Назад к обновлениям
New releaseAug 26, 2026

titus v1.2.8

Высокопроизводительный сканер секретов. CLI, библиотека Go, расширение для Burp Suite и расширение для Chrome. 487 правил обнаружения с проверкой учетных данных в реальном времени.

Поделиться
Titus — высокопроизводительный сканер секретов для исходного кода, истории git и бинарных файлов

Titus: высокопроизводительный сканер секретов

Go License CI

Titus — это высокопроизводительный сканер секретов, который обнаруживает учётные данные, API-ключи и токены в исходном коде, файлах и истории git. Он поставляется с 487 правилами обнаружения, охватывающими сотни сервисов и типов учётных данных, взятыми из NoseyParker и Kingfisher. Titus работает как CLI, библиотека Go, расширение для Burp Suite и расширение для браузера Chrome — все они используют один и тот же движок обнаружения и набор правил.

Созданный для инженеров по безопасности, пентестеров и команд DevSecOps, Titus сочетает ускоренное сопоставление регулярных выражений с помощью Hyperscan/Vectorscan с проверкой учётных данных в реальном времени, чтобы находить и подтверждать утечки секретов по всей вашей кодовой базе.

Содержание

Почему Titus?

  • Быстрое сканирование секретов: сопоставление регулярных выражений ускоряется с помощью Hyperscan/Vectorscan, когда они доступны, с резервной реализацией на чистом Go для переносимости на любую платформу.
  • Широкий охват обнаружения учётных данных: 487 правил обнаруживают API-ключи, токены и учётные данные для AWS, GCP, Azure, GitHub, Slack, баз данных, систем CI/CD и сотен других сервисов.
  • Проверка секретов в реальном времени: обнаруженные секреты проверяются через их исходные API, чтобы подтвердить, активны ли они, что снижает количество ложных срабатываний и помогает расставить приоритеты при устранении.
  • Оценка серьёзности на основе риска: каждая находка получает числовую оценку (0–100) и уровень серьёзности (info → critical). Оценки настраиваются на основе статических метаданных правил, контекста доступности кода и вызовов API в реальном времени, измеряющих реальный масштаб угрозы от учётных данных, — так что самые опасные находки всегда всплывают первыми.
  • Сканирование образов контейнеров: сканируйте образы Docker и OCI напрямую из любого реестра, tarball или каталога с раскладкой OCI — без необходимости в демоне или бинарном файле Docker.
  • Несколько интерфейсов для любого рабочего процесса: сканируйте из CLI, встраивайте как библиотеку Go, пассивно сканируйте HTTP-трафик в Burp Suite или сканируйте веб-страницы в Chrome во время тестирования безопасности приложений.
  • Извлечение из бинарных файлов: извлекайте и сканируйте секреты из документов Office, PDF-файлов, архивов (zip, tar, 7z), мобильных приложений (APK, IPA), расширений для браузера и многого другого.

Установка

Скачайте готовый бинарный файл со страницы Releases или соберите из исходного кода:```bash make build

Бинарный файл будет находиться в `dist/titus`.

## Быстрый старт```bash
# Scan a file for secrets
titus scan path/to/file.txt

# Scan a directory for leaked credentials
titus scan path/to/directory

# Scan a public GitHub repository (no token needed)
titus scan github.com/org/repo

# Scan a public GitLab project (no token needed)
titus scan gitlab.com/namespace/project

# Scan git history for secrets in past commits
titus scan --git path/to/repo

# Scan a Docker / OCI image (pulled from a registry — no docker daemon required)
titus scan --docker alpine:latest

# Validate detected secrets against source APIs
titus scan path/to/code --validate

Результаты записываются в хранилище данных (titus.ds по умолчанию) и выводятся в консоль.

Параметры сканирования

Сканирование GitHub и GitLab

Сканируйте публичные репозитории напрямую по URL — API-токен не требуется:```bash

Scan a GitHub repository

titus scan github.com/kubernetes/kubernetes

Scan a GitLab project

titus scan gitlab.com/gitlab-org/cli

Full URLs work too

titus scan https://github.com/org/repo titus scan https://gitlab.com/namespace/project.git

Для сканирования в масштабах организации или пользователя используйте специальные подкоманды:```bash
# Scan all public repos in a GitHub org
titus github --org kubernetes

# Scan all repos in a GitHub org with a token (private repos + higher rate limits)
titus github --org kubernetes --token $GITHUB_TOKEN

# Scan all repos for a GitHub user
titus github --user octocat

# Scan all projects in a GitLab group
titus gitlab scan --group mygroup --token $GITLAB_TOKEN

# Scan a single repo with git history (finds deleted secrets)
titus github owner/repo --git

Токены необязательны для публичных репозиториев. Установите GITHUB_TOKEN или GITLAB_TOKEN (или используйте --token) для доступа к приватным репозиториям и повышения лимитов API.

Сканирование образов Docker / OCI

Сканируйте образы контейнеров напрямую — без docker-демона и без бинарного файла docker. Titus извлекает образы напрямую из любого OCI-реестра по HTTPS (используя учётные данные из ~/.docker/config.json) или читает образы из локального tarball, созданного командой docker save, либо из каталога с раскладкой OCI-образа. Затем он сканирует метаданные манифеста/конфигурации образа и каждый обычный файл в каждом слое, включая файлы нижних слоёв, удалённые последующими слоями (поскольку секреты могут оставаться восстановимыми из истории образа).```bash

Pull from a registry and scan

titus scan --docker alpine:latest titus scan docker://ghcr.io/owner/repo:tag

Scan an image saved to a tarball:

docker save my-app:latest -o my-app.tar

podman save my-app:latest -o my-app.tar

titus scan --docker ./my-app.tar

Scan an OCI image layout directory:

docker buildx build --output type=oci,dest=./img/ .

skopeo copy docker://my-app:latest oci:./img:latest

titus scan --docker ./img/

Аутентификация использует вашу существующую конфигурацию Docker / Podman (`~/.docker/config.json`, `${XDG_RUNTIME_DIR}/containers/auth.json`). Приватные реестры, требующие нового входа, должны быть предварительно аутентифицированы с помощью `docker login` (или `podman login`, или `crane auth login`) — titus не запрашивает учётные данные.

### Просмотр результатов сканирования

Используйте `report`, чтобы повторно прочитать результаты предыдущего сканирования:```bash
# Human-readable summary of detected secrets
titus report

# JSON output for programmatic processing
titus report --format json

# SARIF output for CI/CD integration with GitHub Advanced Security
titus report --format sarif

# Report from a specific datastore
titus report --datastore path/to/titus.ds

Вы также можете управлять форматом вывода во время сканирования с помощью --format:```bash titus scan path/to/code --format json

### Проверка обнаруженных секретов

Передайте `--validate` во время сканирования, чтобы проверить обнаруженные секреты через их исходные API:```bash
titus scan path/to/code --validate

Валидация выполняется параллельно (по умолчанию 4 воркера, настраивается с помощью --validate-workers) и помечает каждую находку как подтверждённую, опровергнутую или неизвестную.

Правила обнаружения фильтрации```bash

List all available detection rules

titus rules list

Scan with only specific rules (e.g., AWS and GCP credentials)

titus scan path/to/code --rules-include "aws,gcp"

Exclude rules by pattern

titus scan path/to/code --rules-exclude "kingfisher.generic"

Use a custom rules file for organization-specific secrets

titus scan path/to/code --rules path/to/custom-rules.yaml

Opt in to rules marked noisy: true (high false-positive rate, off by default)

titus scan path/to/code --include-noisy

### Извлечение секретов из бинарных файлов

Titus может извлекать текст из бинарных форматов файлов и сканировать содержимое на наличие секретов:```bash
# Extract and scan all supported binary formats
titus scan path/to/files --extract=all

# Target specific formats
titus scan path/to/files --extract=xlsx,docx,pdf,zip

Поддерживаемые форматы включают документы Office (xlsx, docx, pptx, odp, ods, odt), PDF-файлы, блокноты Jupyter, базы данных SQLite, электронную почту (eml, rtf) и архивы (zip, tar, tar.gz, jar, war, ear, apk, ipa, crx, xpi, 7z). Архивы рекурсивно извлекаются с настраиваемыми ограничениями по глубине и размеру.```bash

Tune extraction limits for large codebases

titus scan path/to/files --extract=all
--extract-max-size 10MB
--extract-max-total 100MB
--extract-max-depth 5

Для баз данных SQLite Titus извлекает текст из всех таблиц (по умолчанию 1000 строк на таблицу). Используйте `--sqlite-row-limit` для настройки:```bash
# Full dump of all SQLite tables (no row limit)
titus scan path/to/files --extract=all --sqlite-row-limit 0

# Custom row limit per table
titus scan path/to/files --extract=all --sqlite-row-limit 5000

Оценка находок

Каждая находка, создаваемая Titus, имеет числовую оценку от 0 до 100 и уровень серьёзности:

ОценкаСерьёзность
0–20info
21–40low
41–60medium
61–80high
81–100critical

Оценки начинаются с base_score правила и корректируются модификаторами — условиями, которые повышают или понижают оценку на основе того, что известно о учётных данных:```bash

Score findings using static rule metadata only (no network calls)

titus scan path/to/code

Score findings AND make live API calls to verify credential blast radius

(calls AWS STS/IAM and GitHub API for supported credential types)

titus scan path/to/code --score-scope

Override the accessibility context (default: auto-detected from git remote)

titus scan path/to/code --accessibility public # no penalty for public repos titus scan path/to/code --accessibility private # -25 penalty (default for local scans)

Titus поставляется с YAML-скоринговыми модулями для учётных данных AWS, GitHub PAT и токенов Slack, а также с Go-скоринговыми модулями на основе SDK, которые выполняют перечисление политик IAM в реальном времени (AWS) и проверку разрешений репозитория (GitHub fine-grained PAT), когда включён `--score-scope`.

Полный справочник см. в [docs/scoring.md](https://github.com/praetorian-inc/titus/blob/main/docs/scoring.md): уровни серьёзности, виды модификаторов, сведения о встроенных скоринговых модулях и о том, как написать собственные YAML- или Go-скоринговые модули.

## Go-библиотека для обнаружения секретов

Titus можно импортировать как Go-библиотеку, чтобы добавить обнаружение секретов в ваши собственные инструменты и конвейеры.```bash
go get github.com/praetorian-inc/titus

| --no-color | Отключить цветной вывод | | --debug | Включить отладочный вывод | | --verbose | Включить подробный вывод | | --silent | Подавить весь вывод, кроме ошибок | | --version | Показать версию программы и выход | | --help | Показать справочное сообщение и выход |

Примеры

# Сканировать один URL
python3 csp_scanner.py -u https://example.com

# Сканировать несколько URL из файла
python3 csp_scanner.py -f urls.txt

# Сканировать с подробным выводом
python3 csp_scanner.py -u https://example.com -v

# Сканировать и сохранить результаты в JSON
python3 csp_scanner.py -u https://example.com -o results.json

# Сканировать с пользовательским таймаутом и заголовками
python3 csp_scanner.py -u https://example.com -t 15 -H "Authorization: Bearer token"

# Сканировать с использованием пользовательского User-Agent
python3 csp_scanner.py -u https://example.com -A "Mozilla/5.0 (Custom)"

# Сканировать с использованием прокси
python3 csp_scanner.py -u https://example.com -p http://proxy:8080

# Сканировать с отключённой проверкой SSL
python3 csp_scanner.py -u https://example.com -k

# Сканировать с ограничением скорости
python3 csp_scanner.py -u https://example.com -r 5

# Сканировать с повторными попытками
python3 csp_scanner.py -u https://example.com --retries 3

# Сканировать с задержкой между запросами
python3 csp_scanner.py -u https://example.com --delay 2

# Сканировать с параллельными потоками
python3 csp_scanner.py -f urls.txt --threads 10

# Сканировать с отключённым цветным выводом
python3 csp_scanner.py -u https://example.com --no-color

# Сканировать с включённым отладочным выводом
python3 csp_scanner.py -u https://example.com --debug

# Сканировать с включённым подробным выводом
python3 csp_scanner.py -u https://example.com --verbose

# Сканировать с подавлением всего вывода, кроме ошибок
python3 csp_scanner.py -u https://example.com --silent

# Показать версию программы
python3 csp_scanner.py --version

# Показать справочное сообщение
python3 csp_scanner.py --help

Вывод

{
  "url": "https://example.com",
  "csp": {
    "present": true,
    "policy": "default-src 'self'; script-src 'self' 'unsafe-inline'",
    "directives": {
      "default-src": ["'self'"],
      "script-src": ["'self'", "'unsafe-inline'"]
    },
    "issues": [
      {
        "directive": "script-src",
        "issue": "unsafe-inline",
        "severity": "high",
        "description": "Директива script-src содержит 'unsafe-inline', что позволяет выполнять встроенные скрипты."
      }
    ]
  }
}

Лицензия

Этот проект лицензирован под лицензией MIT — подробности см. в файле LICENSE.

Благодарности

  • OWASP — за ресурсы по безопасности
  • MDN Web Docs — за документацию по CSP
  • W3C — за спецификацию CSP

Контакты

Отказ от ответственности

Этот инструмент предназначен только для образовательных целей и тестирования на проникновение. Используйте его ответственно и только на тех сайтах, на которые у вас есть разрешение. Автор не несёт ответственности за любое неправомерное использование или ущерб, причинённый этим инструментом.


Примечание: Этот инструмент предназначен для образовательных целей и тестирования на проникновение. Всегда убеждайтесь, что у вас есть надлежащее разрешение перед сканированием любого веб-сайта.```go package main

import ( "fmt" "log"

"github.com/praetorian-inc/titus"

)

func main() { // Initialize the secrets scanner with default rules scanner, err := titus.NewScanner() if err != nil { log.Fatal(err) } defer scanner.Close()

// Scan a string for API keys, tokens, and credentials
matches, err := scanner.ScanString(`aws_access_key_id = AKIAIOSFODNN7EXAMPLE`)
if err != nil {
    log.Fatal(err)
}

for _, match := range matches {
    fmt.Printf("%s (rule: %s) at line %d\n",
        match.RuleName, match.RuleID,
        match.Location.SourceSpan.Start.Line,
    )
}

}

Библиотека также поддерживает сканирование байтов и файлов, проверку обнаруженных секретов и загрузку пользовательских правил:```go
// Scan a file for leaked credentials
matches, err := scanner.ScanFile("/path/to/config.json")

// Enable validation to check if detected secrets are live
scanner, err := titus.NewScanner(titus.WithValidation())

// Load custom detection rules for organization-specific secrets
rules, err := titus.LoadRulesFromFile("/path/to/rules.yaml")
scanner, err := titus.NewScanner(titus.WithRules(rules))

См. docs/library-usage.md для полного справочника по API, шаблонов параллелизма и дополнительных примеров.

Расширение Burp Suite для сканирования секретов

Расширение Burp сканирует HTTP-ответы на наличие секретов во время прокси-трафика и активного тестирования на проникновение.

Настройка

Linux / macOS (сборка из исходного кода)```bash

Build the CLI and Burp extension JAR, install CLI to ~/.titus/

make install-burp

Затем загрузите `dist/titus-burp-1.0.0-all.jar` в Burp Suite через Extensions > Add.

#### Windows (загрузка из Releases)

1. Скачайте `titus-windows-amd64.exe` и `titus-burp-<version>.jar` из [Releases](../../releases)
2. Создайте каталог Titus и установите бинарный файл:   ```powershell
   mkdir %USERPROFILE%\.titus
   copy titus-windows-amd64.exe %USERPROFILE%\.titus\titus.exe
  1. Загрузите JAR в Burp Suite через Extensions > Add

Linux / macOS (Скачать из Releases)

  1. Скачайте подходящий бинарный файл для вашей платформы и titus-burp-<version>.jar из Releases:
    • titus-linux-amd64 или titus-linux-arm64 для Linux
    • titus-darwin-amd64 или titus-darwin-arm64 для macOS
  2. Установите бинарный файл: ```bash mkdir -p ~/.titus cp titus- ~/.titus/titus chmod +x ~/.titus/titus
  3. Загрузите JAR в Burp Suite через Extensions > Add

Расширение запускает процесс titus serve в фоновом режиме и взаимодействует через stdin/stdout с использованием NDJSON. Правила обнаружения загружаются один раз при запуске.

Возможности расширения для Burp

  • Пассивное сканирование секретов: автоматически сканирует прокси-трафик по мере его прохождения через Burp
  • Активное сканирование секретов: контекстное меню по правому клику для сканирования выбранных запросов
  • Дедупликация: один и тот же секрет сообщается только один раз за сессию
  • Быстрая фильтрация: бинарное содержимое, изображения и нетекстовые ответы пропускаются
  • Валидация учётных данных в реальном времени: проверка обнаруженных секретов через API источников для подтверждения их активности
  • Управление ложными срабатываниями: пометка находок как ложных срабатываний для фильтрации шума
  • Классификация по уровню критичности: находки цветокодируются по риску (High/Medium/Low)
  • Экспорт: сохранение находок в JSON для отчётности

Интерфейс расширения для Burp

Расширение добавляет вкладку Titus в Burp с тремя подвкладками:

Secrets: Все обнаруженные секреты с фильтрацией по типу, хосту и статусу валидации.

Titus Burp Suite extension secrets tab showing detected API keys and credentials with validation status

  • Статус валидации: Показывает, были ли проверены секреты (Active/Inactive/Unknown)
  • Фильтрация: Нажмите кнопки Type, Host или Status для фильтрации по конкретным значениям; используйте поле поиска для текстового и regex-сопоставления
  • Массовые действия: Выберите несколько строк для пакетной валидации или пометки как ложное срабатывание
  • Панель Secret Details: Выберите находку для просмотра:
    • Details: Информация о правиле, категория, полное значение секрета, метка времени первого обнаружения
    • URLs: Все местоположения, где был найден этот секрет
    • Validation: Результат валидации с деталями (например, AWS account ID, ARN)
    • Request/Response: Полный HTTP-трафик с выделенным секретом

Statistics: Агрегированный вид секретов, сгруппированных по типу и хосту.

Titus Burp Suite extension statistics tab showing secrets by type and host
  • Summary: Общее количество уникальных секретов, просканированных хостов, разбивка по валидации (активные против неактивных) и количество ложных срабатываний
  • Secrets by Type: Количество каждого типа секретов с классификацией по категориям
  • Secrets by Host: Количество секретов, найденных на каждом хосте

Settings: Настройка параметров сканирования, валидации и сопоставления уровней критичности.

Titus Burp Suite extension settings tab with scan configuration options

  • Scan Settings:
    • Passive scanning: Автоматически сканировать весь прокси-трафик (включено по умолчанию)
    • Request body scanning: Также сканировать тела запросов на наличие секретов, отправляемых приложением
    • Validation: Включите для проверки секретов через API источников (выполняет исходящие запросы и может вызвать оповещения)
  • Scan Parameters: Рабочие потоки, максимальный размер файла, длина контекстного фрагмента
  • Severity Configuration: Настройка уровней критичности для каждой категории секретов
  • Actions: Очистить кэш, сбросить настройки, сохранить/экспортировать находки в JSON

При просмотре любого запроса в Burp в инспекторе ответов появляется вкладка Titus, если обнаружены секреты, что обеспечивает быстрый доступ к находкам без переключения на основную вкладку Titus.

Titus tab in Burp Suite response inspector highlighting detected secrets in HTTP responses

Расширение для браузера Chrome для сканирования секретов

Расширение для Chrome сканирует веб-страницы на наличие секретов во время оценки безопасности веб-приложений.

Настройка```bash

make build-extension

1. Перейдите по адресу `chrome://extensions/`
2. Включите **Режим разработчика**
3. Нажмите **Загрузить распакованное расширение** и выберите каталог `extension/`

### Возможности браузерного расширения

- Сканирует встроенный и внешний JavaScript, а также таблицы стилей на наличие API-ключей и токенов
- Сканирует localStorage и sessionStorage на наличие утечек учётных данных
- Опциональный перехват сетевых ответов для комплексного обнаружения секретов
- Результаты отображаются во всплывающем окне и на панели управления

<img width="1719" height="958" alt="Titus Chrome extension popup showing detected secrets on a web page" src="https://assets.kitploit.com/production/public/readmes/11969/057a24e2746412ceabe1aac0292a2de463de1efee5bca2489ca34b59d8b0dc2c.png" />

<img width="1744" height="827" alt="Titus Chrome extension dashboard with aggregated secret detection results" src="https://assets.kitploit.com/production/public/readmes/11969/265d972fadcc7f212944d7a1d8fd58a43446e7199d1209900e83b96a546ffb00.png" />

### Уведомление о безопасности

Браузерное расширение удаляет заголовки Content Security Policy и CORS с посещаемых страниц для сканирования внешних ресурсов. Это ослабляет защиту сайтов, которые вы посещаете, пока расширение активно. **Включайте только во время активного тестирования безопасности.**

## Сборка из исходного кода

### Стандартная сборка (с ускорением Vectorscan)

По умолчанию Titus компилируется с [Vectorscan](https://github.com/VectorCamp/vectorscan) (ARM) / [Hyperscan](https://github.com/intel/hyperscan) (x86) для SIMD-ускоренного сопоставления регулярных выражений. Для этого требуются CGO, библиотека C и `pkg-config` (который cgo использует для поиска библиотеки). `make build` проверяет их наличие и пытается установить всё отсутствующее через Homebrew / apt / dnf:```bash
# Build the CLI binary with vectorscan acceleration (outputs to dist/titus)
make build

# Build the Burp Suite extension JAR
make build-burp

# Build the Chrome browser extension
make build-extension

# Run unit tests
make test

# Run integration tests
make integration-test

Вы увидите [vectorscan] N/N rules compiled for Hyperscan при запуске, когда активен ускоренный движок.

Чтобы установить библиотеку C самостоятельно, вместо того чтобы полагаться на автоустановку:```bash

macOS (Homebrew)

brew install pkg-config vectorscan

Ubuntu/Debian

sudo apt-get install pkg-config libhyperscan-dev

Fedora/RHEL

sudo dnf install pkgconf-pkg-config vectorscan-devel

Or build vectorscan from source:

git clone --depth 1 --branch vectorscan/5.4.11 https://github.com/VectorCamp/vectorscan.git cd vectorscan && cmake -B build -DCMAKE_INSTALL_PREFIX=/usr/local && cmake --build build && sudo cmake --install build

Если вы вызываете `go build` напрямую (например, при встраивании Titus), передайте тег и включите CGO:```bash
# macOS (Homebrew) — adjust PKG_CONFIG_PATH to your installed version
CGO_ENABLED=1 PKG_CONFIG_PATH="$(brew --prefix vectorscan)/lib/pkgconfig" \
  go build -tags vectorscan -o dist/titus ./cmd/titus

# Linux (system-installed)
CGO_ENABLED=1 go build -tags vectorscan -o dist/titus ./cmd/titus

Сборка на чистом Go (без зависимостей от C)

Если вы не можете установить библиотеку C — или хотите полностью переносимый статический бинарный файл — вместо этого соберите движок на чистом Go. Titus автоматически переключается на него во время выполнения, когда vectorscan не скомпилирован:```bash

Portable pure-Go binary (no CGO, no vectorscan)

make build-pure

Fully static binary

make build-static

#### Автоматический кэш баз данных Hyperscan

Titus автоматически сериализует каждую успешно скомпилированную базу данных Hyperscan
в стандартный пользовательский кэш. Последующие экземпляры сканера с точно таким же упорядоченным
набором правил и флагов загружают эту базу данных вместо повторной компиляции. Файл кэша
представляет собой неизменённый поток байтов, созданный функцией Hyperscan `hs_serialize_database`,
и Titus загружает его с помощью `hs_deserialize_database`.

`TITUS_CACHE_DIR` может переопределить расположение кэша. Запись в кэш выполняется атомарно и
по мере возможности: недоступный или доступный только для чтения кэш не препятствует сканированию. Отсутствующая, повреждённая, несовместимая или имеющая другой отпечаток база данных
запускает обычную компиляцию и обновляет кэш, когда это возможно.

Сериализованные базы данных зависят от архитектуры, возможностей CPU и версии
Hyperscan. Titus обнаруживает несовместимые записи при десериализации и заменяет
их базой данных, скомпилированной для текущей среды выполнения.

## Участие в разработке

Мы приветствуем вклад! См. [CONTRIBUTING.md](https://github.com/praetorian-inc/titus/blob/main/CONTRIBUTING.md) с рекомендациями о том, как внести вклад в Titus.

## Лицензия

Apache License 2.0 — см. [LICENSE](https://github.com/praetorian-inc/titus/blob/main/LICENSE).

Правила обнаружения основаны на [NoseyParker](https://github.com/praetorian-inc/noseyparker) (Praetorian Security, Inc.) и [Kingfisher](https://github.com/mongodb/kingfisher) (MongoDB, Inc.), оба лицензированы под Apache 2.0. См. [NOTICE](https://github.com/praetorian-inc/titus/blob/main/NOTICE) для полной атрибуции.

Категории