gitextract_t1amwk0u/ ├── .air.toml ├── .devcontainer/ │ ├── Dockerfile │ ├── README.md │ ├── devcontainer.json │ ├── docker-compose.yaml │ └── poststart.sh ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yaml │ │ ├── config.yml │ │ └── feature_request.yaml │ ├── PULL_REQUEST_TEMPLATE.md │ ├── actions/ │ │ └── spelling/ │ │ ├── README.md │ │ ├── advice.md │ │ ├── allow.txt │ │ ├── candidate.patterns │ │ ├── excludes.txt │ │ ├── expect.txt │ │ ├── line_forbidden.patterns │ │ ├── patterns.txt │ │ └── reject.txt │ ├── dependabot.yml │ ├── workflows/ │ │ ├── asset-verification.yml │ │ ├── dco-check.yaml │ │ ├── docker-pr.yml │ │ ├── docker.yml │ │ ├── docs-deploy.yml │ │ ├── docs-test.yml │ │ ├── go-mod-tidy-check.yml │ │ ├── go.yml │ │ ├── lint-pr-title.yaml │ │ ├── package-builds-stable.yml │ │ ├── package-builds-unstable.yml │ │ ├── smoke-tests.yml │ │ ├── spelling.yml │ │ ├── ssh-ci-runner-cron.yml │ │ ├── ssh-ci.yml │ │ └── zizmor.yml │ └── zizmor.yml ├── .gitignore ├── .husky/ │ ├── commit-msg │ └── pre-commit ├── .ko.yaml ├── .prettierignore ├── .vscode/ │ ├── extensions.json │ ├── launch.json │ └── settings.json ├── AGENTS.md ├── Brewfile ├── CLAUDE.md ├── CONTRIBUTING.md ├── LICENSE ├── Makefile ├── README.md ├── SECURITY.md ├── VERSION ├── anubis.go ├── cmd/ │ ├── containerbuild/ │ │ ├── .gitignore │ │ └── main.go │ └── robots2policy/ │ ├── batch/ │ │ └── batch_process.go │ ├── main.go │ ├── robots2policy_test.go │ └── testdata/ │ ├── blacklist.robots.txt │ ├── blacklist.yaml │ ├── complex.robots.txt │ ├── complex.yaml │ ├── consecutive.robots.txt │ ├── consecutive.yaml │ ├── custom-name.yaml │ ├── deny-action.yaml │ ├── empty.robots.txt │ ├── empty.yaml │ ├── simple.json │ ├── simple.robots.txt │ ├── simple.yaml │ ├── wildcards.robots.txt │ └── wildcards.yaml ├── data/ │ ├── apps/ │ │ ├── allow-api-routes.yaml │ │ ├── bookstack-saml.yaml │ │ ├── gitea-rss-feeds.yaml │ │ ├── qualys-ssl-labs.yml │ │ └── searx-checker.yml │ ├── botPolicies.yaml │ ├── bots/ │ │ ├── _deny-pathological.yaml │ │ ├── aggressive-brazilian-scrapers.yaml │ │ ├── ai-catchall.yaml │ │ ├── ai-robots-txt.yaml │ │ ├── cloudflare-workers.yaml │ │ ├── custom-async-http-client.yaml │ │ ├── headless-browsers.yaml │ │ ├── irc-bots/ │ │ │ ├── archlinux-phrik.yaml │ │ │ └── gentoo-chat.yaml │ │ └── us-ai-scraper.yaml │ ├── clients/ │ │ ├── ai.yaml │ │ ├── docker-client.yaml │ │ ├── git.yaml │ │ ├── go-get.yaml │ │ ├── mistral-mistralai-user.yaml │ │ ├── openai-chatgpt-user.yaml │ │ ├── perplexity-user.yaml │ │ ├── small-internet-browsers/ │ │ │ ├── _permissive.yaml │ │ │ ├── netsurf.yaml │ │ │ └── palemoon.yaml │ │ ├── telegram-preview.yaml │ │ ├── vk-preview.yaml │ │ └── x-firefox-ai.yaml │ ├── common/ │ │ ├── acts-like-browser.yaml │ │ ├── allow-api-like.yaml │ │ ├── allow-private-addresses.yaml │ │ ├── json-api.yaml │ │ ├── keep-internet-working.yaml │ │ └── rfc-violations.yaml │ ├── crawlers/ │ │ ├── _allow-good.yaml │ │ ├── ai-search.yaml │ │ ├── ai-training.yaml │ │ ├── alibaba-cloud.yaml │ │ ├── applebot.yaml │ │ ├── bingbot.yaml │ │ ├── commoncrawl.yaml │ │ ├── duckduckbot.yaml │ │ ├── googlebot.yaml │ │ ├── huawei-cloud.yaml │ │ ├── internet-archive.yaml │ │ ├── kagibot.yaml │ │ ├── marginalia.yaml │ │ ├── mojeekbot.yaml │ │ ├── openai-gptbot.yaml │ │ ├── openai-searchbot.yaml │ │ ├── perplexitybot.yaml │ │ ├── qwantbot.yaml │ │ ├── tencent-cloud.yaml │ │ ├── wikimedia-citoid.yaml │ │ └── yandexbot.yaml │ ├── embed.go │ ├── embed_test.go │ ├── meta/ │ │ ├── README.md │ │ ├── ai-block-aggressive.yaml │ │ ├── ai-block-moderate.yaml │ │ ├── ai-block-permissive.yaml │ │ ├── default-config.yaml │ │ └── messengers-preview.yaml │ └── services/ │ ├── updown.yaml │ └── uptime-robot.yaml ├── decaymap/ │ ├── decaymap.go │ └── decaymap_test.go ├── docs/ │ ├── .dockerignore │ ├── .gitignore │ ├── Dockerfile │ ├── README.md │ ├── blog/ │ │ ├── 2025-06-16-welcome/ │ │ │ └── index.mdx │ │ ├── 2025-06-27-release-1.20.0/ │ │ │ └── index.mdx │ │ ├── 2025-07-09-incident-report/ │ │ │ └── index.mdx │ │ ├── 2025-07-22-release-1.21.1/ │ │ │ └── index.mdx │ │ ├── 2025-08-18-funding-update/ │ │ │ └── index.mdx │ │ ├── 2025-08-28-cpu-core-odd/ │ │ │ ├── ProofOfWorkDiagram/ │ │ │ │ ├── index.jsx │ │ │ │ └── styles.module.css │ │ │ └── index.mdx │ │ ├── 2025-10-31-file-abuse-reports/ │ │ │ └── index.mdx │ │ └── authors.yml │ ├── docs/ │ │ ├── CHANGELOG.md │ │ ├── admin/ │ │ │ ├── _category_.json │ │ │ ├── botstopper.mdx │ │ │ ├── caveats-gitea-forgejo.mdx │ │ │ ├── caveats-xff.mdx │ │ │ ├── configuration/ │ │ │ │ ├── _category_.json │ │ │ │ ├── challenges/ │ │ │ │ │ ├── _category_.json │ │ │ │ │ ├── index.mdx │ │ │ │ │ ├── metarefresh.mdx │ │ │ │ │ ├── preact.mdx │ │ │ │ │ └── proof-of-work.mdx │ │ │ │ ├── custom-status-codes.mdx │ │ │ │ ├── expressions.mdx │ │ │ │ ├── import.mdx │ │ │ │ ├── impressum.mdx │ │ │ │ ├── open-graph.mdx │ │ │ │ ├── redirect-domains.mdx │ │ │ │ ├── subrequest-auth.mdx │ │ │ │ └── thresholds.mdx │ │ │ ├── default-allow-behavior.mdx │ │ │ ├── environments/ │ │ │ │ ├── _category_.json │ │ │ │ ├── apache.mdx │ │ │ │ ├── caddy.mdx │ │ │ │ ├── cloudflare.mdx │ │ │ │ ├── docker-compose.mdx │ │ │ │ ├── haproxy/ │ │ │ │ │ ├── advanced-config-policy.yml │ │ │ │ │ ├── advanced-config.env │ │ │ │ │ ├── advanced-haproxy.cfg │ │ │ │ │ ├── simple-config.env │ │ │ │ │ └── simple-haproxy.cfg │ │ │ │ ├── haproxy.mdx │ │ │ │ ├── kubernetes.mdx │ │ │ │ ├── nginx/ │ │ │ │ │ ├── conf-anubis.inc │ │ │ │ │ ├── server-anubistest-techaro-lol.conf │ │ │ │ │ ├── server-mimi-techaro-lol.conf │ │ │ │ │ └── upstream-anubis.conf │ │ │ │ ├── nginx.mdx │ │ │ │ └── traefik.mdx │ │ │ ├── frameworks/ │ │ │ │ ├── _category_.json │ │ │ │ ├── htmx.mdx │ │ │ │ └── wordpress.mdx │ │ │ ├── honeypot/ │ │ │ │ ├── _category_.json │ │ │ │ └── overview.mdx │ │ │ ├── installation.mdx │ │ │ ├── iplist2rule.mdx │ │ │ ├── native-install.mdx │ │ │ ├── policies.mdx │ │ │ ├── robots2policy.mdx │ │ │ ├── roles/ │ │ │ │ ├── _category_.json │ │ │ │ └── oci-registry.mdx │ │ │ └── thoth.mdx │ │ ├── design/ │ │ │ ├── _category_.json │ │ │ ├── how-anubis-works.mdx │ │ │ └── why-proof-of-work.mdx │ │ ├── developer/ │ │ │ ├── _category_.json │ │ │ ├── ai-coding-policy.md │ │ │ ├── building-anubis.md │ │ │ ├── local-dev.md │ │ │ └── signed-commits.md │ │ ├── funding.md │ │ ├── index.mdx │ │ └── user/ │ │ ├── _category_.json │ │ ├── frequently-asked-questions.mdx │ │ ├── known-broken-extensions.md │ │ ├── known-instances.md │ │ └── why-see-challenge.md │ ├── docusaurus.config.ts │ ├── fly.toml │ ├── manifest/ │ │ ├── 1password.yaml │ │ ├── cfg/ │ │ │ ├── anubis/ │ │ │ │ └── botPolicies.yaml │ │ │ └── nginx/ │ │ │ ├── mime.types │ │ │ └── nginx.conf │ │ ├── deployment.yaml │ │ ├── ingress.yaml │ │ ├── kustomization.yaml │ │ ├── onionservice.yaml │ │ ├── poddisruptionbudget.yaml │ │ └── service.yaml │ ├── package.json │ ├── sidebars.ts │ ├── src/ │ │ ├── components/ │ │ │ ├── EnterpriseOnly/ │ │ │ │ ├── index.jsx │ │ │ │ └── styles.module.css │ │ │ ├── HomepageFeatures/ │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ └── RandomKey/ │ │ │ └── index.tsx │ │ ├── css/ │ │ │ └── custom.css │ │ └── pages/ │ │ ├── index.module.css │ │ └── index.tsx │ ├── static/ │ │ └── .nojekyll │ └── tsconfig.json ├── go.mod ├── go.sum ├── internal/ │ ├── actorify/ │ │ └── actorify.go │ ├── clampip.go │ ├── clampip_test.go │ ├── dns/ │ │ ├── cache.go │ │ ├── dns.go │ │ └── dns_test.go │ ├── dnsbl/ │ │ ├── dnsbl.go │ │ ├── dnsbl_test.go │ │ └── droneblresponse_string.go │ ├── glob/ │ │ ├── glob.go │ │ └── glob_test.go │ ├── gzip.go │ ├── hash.go │ ├── hash_bench_test.go │ ├── headers.go │ ├── health.go │ ├── honeypot/ │ │ ├── honeypot.go │ │ └── naive/ │ │ ├── 100bytes.css │ │ ├── affirmations.txt │ │ ├── naive.go │ │ ├── page.templ │ │ ├── page_templ.go │ │ ├── spintext.txt │ │ └── titles.txt │ ├── ja4h.go │ ├── listor.go │ ├── listor_test.go │ ├── log.go │ ├── log_test.go │ ├── mimetype.go │ ├── ogtags/ │ │ ├── cache.go │ │ ├── cache_test.go │ │ ├── fetch.go │ │ ├── fetch_test.go │ │ ├── integration_test.go │ │ ├── mem_test.go │ │ ├── ogtags.go │ │ ├── ogtags_fuzz_test.go │ │ ├── ogtags_test.go │ │ ├── parse.go │ │ ├── parse_test.go │ │ └── sni.go │ ├── test/ │ │ ├── playwright_test.go │ │ └── var/ │ │ └── .gitignore │ ├── unbreakdocker.go │ └── xff_test.go ├── lib/ │ ├── anubis.go │ ├── anubis_test.go │ ├── challenge/ │ │ ├── challenge.go │ │ ├── challengetest/ │ │ │ ├── challengetest.go │ │ │ └── challengetest_test.go │ │ ├── error.go │ │ ├── interface.go │ │ ├── metarefresh/ │ │ │ ├── metarefresh.go │ │ │ ├── metarefresh.templ │ │ │ └── metarefresh_templ.go │ │ ├── metrics.go │ │ ├── preact/ │ │ │ ├── build.sh │ │ │ ├── js/ │ │ │ │ ├── app.tsx │ │ │ │ └── xeact.js │ │ │ ├── preact.go │ │ │ ├── preact.templ │ │ │ ├── preact_templ.go │ │ │ └── static/ │ │ │ └── .gitignore │ │ └── proofofwork/ │ │ ├── proofofwork.go │ │ ├── proofofwork.templ │ │ ├── proofofwork_templ.go │ │ └── proofofwork_test.go │ ├── config/ │ │ ├── asn.go │ │ ├── asn_test.go │ │ ├── check.go │ │ ├── config.go │ │ ├── config_test.go │ │ ├── expressionorlist.go │ │ ├── expressionorlist_test.go │ │ ├── geoip.go │ │ ├── geoip_test.go │ │ ├── impressum.go │ │ ├── impressum_test.go │ │ ├── logging.go │ │ ├── logging_test.go │ │ ├── opengraph.go │ │ ├── opengraph_test.go │ │ ├── store.go │ │ ├── store_test.go │ │ ├── testdata/ │ │ │ ├── bad/ │ │ │ │ ├── badregexes.json │ │ │ │ ├── badregexes.yaml │ │ │ │ ├── dns-ttl-custom.yaml │ │ │ │ ├── import_and_bot.json │ │ │ │ ├── import_and_bot.yaml │ │ │ │ ├── import_invalid_file.json │ │ │ │ ├── import_invalid_file.yaml │ │ │ │ ├── impressum-no-footer.yaml │ │ │ │ ├── impressum-no-page-contents.yaml │ │ │ │ ├── invalid.json │ │ │ │ ├── invalid.yaml │ │ │ │ ├── logging-invalid-sink.yaml │ │ │ │ ├── logging-no-parameters.yaml │ │ │ │ ├── multiple_expression_types.json │ │ │ │ ├── multiple_expression_types.yaml │ │ │ │ ├── nobots.json │ │ │ │ ├── nobots.yaml │ │ │ │ ├── opengraph_bad_ttl.yaml │ │ │ │ ├── regex_ends_newline.json │ │ │ │ ├── regex_ends_newline.yaml │ │ │ │ ├── status-codes-0.json │ │ │ │ ├── status-codes-0.yaml │ │ │ │ ├── threshold-challenge-without-challenge.yaml │ │ │ │ ├── thresholds.yaml │ │ │ │ ├── unparseable.json │ │ │ │ └── unparseable.yaml │ │ │ ├── good/ │ │ │ │ ├── allow_everyone.json │ │ │ │ ├── allow_everyone.yaml │ │ │ │ ├── block_cf_workers.json │ │ │ │ ├── block_cf_workers.yaml │ │ │ │ ├── challenge_cloudflare.yaml │ │ │ │ ├── challengemozilla.json │ │ │ │ ├── challengemozilla.yaml │ │ │ │ ├── dns-ttl-custom.yaml │ │ │ │ ├── entropy.yaml │ │ │ │ ├── everything_blocked.json │ │ │ │ ├── everything_blocked.yaml │ │ │ │ ├── geoip_us.yaml │ │ │ │ ├── git_client.json │ │ │ │ ├── git_client.yaml │ │ │ │ ├── import_filesystem.json │ │ │ │ ├── import_filesystem.yaml │ │ │ │ ├── import_keep_internet_working.json │ │ │ │ ├── import_keep_internet_working.yaml │ │ │ │ ├── impressum.yaml │ │ │ │ ├── logging-file.yaml │ │ │ │ ├── logging-stdio.yaml │ │ │ │ ├── no-thresholds.yaml │ │ │ │ ├── old_xesite.json │ │ │ │ ├── opengraph_all_good.yaml │ │ │ │ ├── simple-weight.yaml │ │ │ │ ├── status-codes-paranoid.json │ │ │ │ ├── status-codes-paranoid.yaml │ │ │ │ ├── status-codes-rfc.json │ │ │ │ ├── status-codes-rfc.yaml │ │ │ │ ├── thresholds.yaml │ │ │ │ └── weight-no-weight.yaml │ │ │ ├── hack-test.json │ │ │ └── hack-test.yaml │ │ ├── threshold.go │ │ ├── threshold_test.go │ │ └── weight.go │ ├── config.go │ ├── config_test.go │ ├── http.go │ ├── http_test.go │ ├── localization/ │ │ ├── locales/ │ │ │ ├── cs.json │ │ │ ├── de.json │ │ │ ├── en.json │ │ │ ├── es.json │ │ │ ├── et.json │ │ │ ├── fi.json │ │ │ ├── fil.json │ │ │ ├── fr.json │ │ │ ├── is.json │ │ │ ├── it.json │ │ │ ├── ja.json │ │ │ ├── lt.json │ │ │ ├── manifest.json │ │ │ ├── nb.json │ │ │ ├── nl.json │ │ │ ├── nn.json │ │ │ ├── pl.json │ │ │ ├── pt-BR.json │ │ │ ├── ru.json │ │ │ ├── sv.json │ │ │ ├── th.json │ │ │ ├── tr.json │ │ │ ├── uk.json │ │ │ ├── vi.json │ │ │ ├── zh-CN.json │ │ │ └── zh-TW.json │ │ ├── localization.go │ │ └── localization_test.go │ ├── policy/ │ │ ├── bot.go │ │ ├── celchecker.go │ │ ├── checker/ │ │ │ ├── checker.go │ │ │ └── checker_test.go │ │ ├── checker.go │ │ ├── checker_test.go │ │ ├── checkresult.go │ │ ├── expressions/ │ │ │ ├── README.md │ │ │ ├── environment.go │ │ │ ├── environment_test.go │ │ │ ├── http_headers.go │ │ │ ├── http_headers_test.go │ │ │ ├── loadavg.go │ │ │ ├── url_values.go │ │ │ └── url_values_test.go │ │ ├── policy.go │ │ ├── policy_test.go │ │ ├── testdata/ │ │ │ ├── hack-test.json │ │ │ └── hack-test.yaml │ │ └── thresholds.go │ ├── redirect_security_test.go │ ├── store/ │ │ ├── actorifiedstore.go │ │ ├── all/ │ │ │ └── all.go │ │ ├── bbolt/ │ │ │ ├── bbolt.go │ │ │ ├── bbolt_test.go │ │ │ ├── factory.go │ │ │ └── factory_test.go │ │ ├── interface.go │ │ ├── json_test.go │ │ ├── memory/ │ │ │ ├── memory.go │ │ │ └── memory_test.go │ │ ├── registry.go │ │ ├── s3api/ │ │ │ ├── factory.go │ │ │ ├── s3api.go │ │ │ └── s3api_test.go │ │ ├── storetest/ │ │ │ └── storetest.go │ │ └── valkey/ │ │ ├── factory.go │ │ ├── valkey.go │ │ └── valkey_test.go │ ├── testdata/ │ │ ├── aggressive_403.yaml │ │ ├── cloudflare-workers-cel.yaml │ │ ├── cloudflare-workers-header.yaml │ │ ├── hack-test.json │ │ ├── hack-test.yaml │ │ ├── invalid-challenge-method.yaml │ │ ├── permissive.yaml │ │ ├── rule_change.yaml │ │ ├── test_config.yaml │ │ ├── test_config_no_thresholds.yaml │ │ ├── useragent.yaml │ │ └── zero_difficulty.yaml │ └── thoth/ │ ├── asnchecker.go │ ├── asnchecker_test.go │ ├── auth.go │ ├── cachediptoasn.go │ ├── context.go │ ├── geoipchecker.go │ ├── geoipchecker_test.go │ ├── thoth.go │ ├── thoth_test.go │ └── thothmock/ │ ├── iptoasn.go │ └── withthothmock.go ├── package.json ├── run/ │ ├── anubis.freebsd │ ├── anubis@.service │ ├── default.env │ └── openrc/ │ ├── anubis.confd │ └── anubis.initd ├── test/ │ ├── .gitignore │ ├── anubis_configs/ │ │ └── aggressive_403.yaml │ ├── caddy/ │ │ ├── Caddyfile │ │ ├── Dockerfile │ │ ├── docker-compose.yaml │ │ └── start.sh │ ├── cmd/ │ │ ├── cipra/ │ │ │ ├── internal/ │ │ │ │ ├── containerip.go │ │ │ │ ├── getlanip.go │ │ │ │ └── unbreakdocker.go │ │ │ └── main.go │ │ ├── httpdebug/ │ │ │ └── main.go │ │ ├── relayd/ │ │ │ └── main.go │ │ └── unixhttpd/ │ │ └── main.go │ ├── default-config-macro/ │ │ ├── compare_bots.py │ │ └── test.sh │ ├── docker-registry/ │ │ ├── anubis.yaml │ │ ├── docker-compose.yaml │ │ ├── test.sh │ │ └── var/ │ │ └── .gitignore │ ├── double_slash/ │ │ ├── anubis.yaml │ │ ├── input.txt │ │ ├── test.mjs │ │ ├── test.sh │ │ └── var/ │ │ └── .gitignore │ ├── forced-language/ │ │ ├── anubis.yaml │ │ ├── test.mjs │ │ ├── test.sh │ │ └── var/ │ │ └── .gitignore │ ├── git-clone/ │ │ ├── docker-compose.yaml │ │ ├── test.sh │ │ └── var/ │ │ └── .gitignore │ ├── git-push/ │ │ ├── docker-compose.yaml │ │ ├── test.sh │ │ └── var/ │ │ └── .gitignore │ ├── go.mod │ ├── go.sum │ ├── healthcheck/ │ │ ├── docker-compose.yaml │ │ ├── test.sh │ │ └── var/ │ │ └── .gitignore │ ├── i18n/ │ │ ├── anubis.yaml │ │ ├── test.mjs │ │ ├── test.sh │ │ └── var/ │ │ └── .gitignore │ ├── k8s/ │ │ ├── cert-manager/ │ │ │ └── selfsigned-issuer.yaml │ │ └── deps/ │ │ └── cert-manager.yaml │ ├── lib/ │ │ └── lib.sh │ ├── log-file/ │ │ ├── anubis.yaml │ │ ├── input.txt │ │ ├── test.mjs │ │ ├── test.sh │ │ └── var/ │ │ └── .gitignore │ ├── nginx/ │ │ ├── conf/ │ │ │ └── nginx/ │ │ │ ├── conf-anubis.inc │ │ │ ├── conf.d/ │ │ │ │ ├── server-mimi-techaro-lol.conf │ │ │ │ └── upstream-anubis.conf │ │ │ ├── mime.types │ │ │ └── nginx.conf │ │ └── test.sh │ ├── nginx-external-auth/ │ │ ├── conf.d/ │ │ │ └── default.conf │ │ ├── deployment.yaml │ │ ├── ingress.yaml │ │ ├── kustomization.yaml │ │ ├── service.yaml │ │ └── start.sh │ ├── palemoon/ │ │ ├── README.md │ │ ├── amd64/ │ │ │ ├── docker-compose.yml │ │ │ ├── test.sh │ │ │ └── var/ │ │ │ └── .gitignore │ │ ├── anubis/ │ │ │ └── anubis.yaml │ │ ├── i386/ │ │ │ ├── docker-compose.yml │ │ │ ├── test.sh │ │ │ └── var/ │ │ │ └── .gitignore │ │ └── scripts/ │ │ └── install-cert.sh │ ├── pki/ │ │ └── .gitignore │ ├── robots_txt/ │ │ ├── anubis.yaml │ │ ├── test.mjs │ │ ├── test.sh │ │ └── var/ │ │ └── .gitignore │ ├── shared/ │ │ └── www/ │ │ └── index.html │ ├── ssh-ci/ │ │ ├── Dockerfile │ │ ├── docker-bake.hcl │ │ ├── in-container.sh │ │ └── rigging.sh │ └── unix-socket-xff/ │ ├── start.sh │ └── test.mjs ├── utils/ │ └── cmd/ │ ├── backoff-retry/ │ │ └── main.go │ └── iplist2rule/ │ ├── blocklist.go │ └── main.go ├── var/ │ └── .gitignore ├── web/ │ ├── build.sh │ ├── embed.go │ ├── index.go │ ├── index.templ │ ├── index_templ.go │ ├── index_test.go │ ├── js/ │ │ ├── algorithms/ │ │ │ ├── fast.ts │ │ │ └── index.ts │ │ ├── bench.ts │ │ ├── main.ts │ │ └── worker/ │ │ ├── sha256-purejs.ts │ │ └── sha256-webcrypto.ts │ └── static/ │ ├── img/ │ │ └── ATTRIBUTIONS.txt │ ├── js/ │ │ └── .gitignore │ └── robots.txt ├── xess/ │ ├── .gitignore │ ├── build.sh │ ├── postcss.config.js │ ├── static/ │ │ └── podkova.css │ ├── xess.css │ └── xess.go └── yeetfile.js