From 498922567109aa14657dae71872e3f7a3ece678b Mon Sep 17 00:00:00 2001 From: Hadi <112569860+anotherhadi@users.noreply.github.com> Date: Mon, 6 Apr 2026 15:12:34 +0200 Subject: [PATCH] init --- .github/CONTRIBUTING.md | 46 + .github/FUNDING.yml | 1 + .github/assets/banner.png | Bin 0 -> 61310 bytes .github/assets/logo.png | Bin 0 -> 3348 bytes .github/docs/how-it-works.md | 36 + .github/docs/tools.md | 18 + .github/docs/tools/breachdirectory.md | 22 + .github/docs/tools/crt.sh.md | 17 + .github/docs/tools/dig.md | 24 + .github/docs/tools/github-recon.md | 30 + .github/docs/tools/gravatar-recon.md | 23 + .github/docs/tools/ipinfo.md | 21 + .github/docs/tools/leakcheck.md | 23 + .github/docs/tools/maigret.md | 27 + .github/docs/tools/user-scanner.md | 29 + .github/docs/tools/wappalyzer.md | 17 + .github/docs/tools/whois.md | 24 + .github/docs/tools/whoisfreaks.md | 23 + .gitignore | 2 + LICENSE | 21 + README.md | 196 ++ back/.air.toml | 24 + back/.gitignore | 2 + back/cmd/gendocs/main.go | 155 ++ back/cmd/server/main.go | 62 + back/config/builtin.go | 62 + back/config/config.go | 144 ++ back/config/env/env.go | 64 + back/go.mod | 20 + back/go.sum | 22 + back/internal/api/handler/config.go | 593 ++++++ back/internal/api/handler/search.go | 146 ++ back/internal/api/handler/tools.go | 91 + back/internal/api/middleware/ratelimit.go | 72 + back/internal/api/router.go | 73 + back/internal/api/static.go | 56 + back/internal/registry/registry.go | 32 + back/internal/respond/respond.go | 18 + back/internal/search/demo.go | 114 ++ back/internal/search/manager.go | 274 +++ back/internal/search/search.go | 97 + back/internal/tools/breachdirectory/tool.go | 162 ++ back/internal/tools/config_reflect.go | 155 ++ back/internal/tools/crtsh/tool.go | 137 ++ back/internal/tools/dig/tool.go | 90 + back/internal/tools/github-recon/tool.go | 91 + back/internal/tools/gravatar-recon/tool.go | 55 + back/internal/tools/ipinfo/tool.go | 133 ++ back/internal/tools/leakcheck/tool.go | 178 ++ back/internal/tools/maigret/tool.go | 89 + back/internal/tools/ptyrun.go | 28 + back/internal/tools/tools.go | 72 + back/internal/tools/user-scanner/tool.go | 95 + back/internal/tools/utils.go | 61 + back/internal/tools/wappalyzer/tool.go | 126 ++ back/internal/tools/whois/tool.go | 62 + back/internal/tools/whoisfreaks/tool.go | 232 +++ flake.lock | 157 ++ flake.nix | 74 + front/.gitignore | 27 + front/astro.config.mjs | 52 + front/bun.lock | 877 +++++++++ front/bun.nix | 1700 +++++++++++++++++ front/package.json | 34 + front/public/.well-known/security.txt | 5 + front/public/Wrench.svg | 1 + front/public/anotherhadi.asc | 52 + front/public/favicon.svg | 6 + front/public/fonts/unbounded-black.ttf | Bin 0 -> 417616 bytes front/public/logo-large.svg | 71 + front/public/logo.svg | 6 + front/public/op.png | Bin 0 -> 61310 bytes front/public/security.txt | 5 + front/src/components/CheatsheetList.svelte | 83 + front/src/components/DemoBanner.svelte | 24 + front/src/components/HomePage.svelte | 98 + front/src/components/Nav.svelte | 136 ++ front/src/components/ProfileSettings.svelte | 571 ++++++ front/src/components/SearchBar.svelte | 232 +++ front/src/components/SearchDetail.svelte | 349 ++++ front/src/components/SearchList.svelte | 71 + front/src/components/ToolDetail.svelte | 265 +++ front/src/components/ToolList.svelte | 346 ++++ front/src/components/comps/Badge.svelte | 29 + front/src/components/comps/InfoTip.svelte | 13 + front/src/components/comps/Select.svelte | 84 + front/src/components/comps/ToolIcon.svelte | 29 + front/src/components/comps/TtyOutput.svelte | 63 + front/src/content.config.ts | 14 + front/src/content/cheatsheets/github-osint.md | 134 ++ front/src/content/cheatsheets/google-dorks.md | 100 + front/src/content/cheatsheets/sock-puppets.md | 61 + front/src/content/cheatsheets/tips.md | 23 + .../content/cheatsheets/x-twitter-osint.md | 88 + front/src/layouts/Layout.astro | 92 + front/src/lib/utils.ts | 17 + front/src/lib/vars.ts | 16 + front/src/pages/403.astro | 30 + front/src/pages/404.astro | 26 + front/src/pages/500.astro | 32 + front/src/pages/cheatsheets/[slug].astro | 126 ++ front/src/pages/cheatsheets/index.astro | 33 + front/src/pages/help.astro | 172 ++ front/src/pages/index.astro | 19 + front/src/pages/profiles.astro | 21 + front/src/pages/search/[id].astro | 22 + front/src/pages/tools/[name].astro | 22 + front/src/pages/tools/index.astro | 20 + front/src/styles/gfm.css | 144 ++ front/src/styles/global.css | 84 + front/src/styles/markdown.css | 20 + front/svelte.config.js | 5 + front/tsconfig.json | 12 + justfile | 31 + nix/backend.nix | 17 + nix/frontend.nix | 38 + nix/module.nix | 88 + 117 files changed, 11454 insertions(+) create mode 100644 .github/CONTRIBUTING.md create mode 100644 .github/FUNDING.yml create mode 100644 .github/assets/banner.png create mode 100644 .github/assets/logo.png create mode 100644 .github/docs/how-it-works.md create mode 100644 .github/docs/tools.md create mode 100644 .github/docs/tools/breachdirectory.md create mode 100644 .github/docs/tools/crt.sh.md create mode 100644 .github/docs/tools/dig.md create mode 100644 .github/docs/tools/github-recon.md create mode 100644 .github/docs/tools/gravatar-recon.md create mode 100644 .github/docs/tools/ipinfo.md create mode 100644 .github/docs/tools/leakcheck.md create mode 100644 .github/docs/tools/maigret.md create mode 100644 .github/docs/tools/user-scanner.md create mode 100644 .github/docs/tools/wappalyzer.md create mode 100644 .github/docs/tools/whois.md create mode 100644 .github/docs/tools/whoisfreaks.md create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 back/.air.toml create mode 100644 back/.gitignore create mode 100644 back/cmd/gendocs/main.go create mode 100644 back/cmd/server/main.go create mode 100644 back/config/builtin.go create mode 100644 back/config/config.go create mode 100644 back/config/env/env.go create mode 100644 back/go.mod create mode 100644 back/go.sum create mode 100644 back/internal/api/handler/config.go create mode 100644 back/internal/api/handler/search.go create mode 100644 back/internal/api/handler/tools.go create mode 100644 back/internal/api/middleware/ratelimit.go create mode 100644 back/internal/api/router.go create mode 100644 back/internal/api/static.go create mode 100644 back/internal/registry/registry.go create mode 100644 back/internal/respond/respond.go create mode 100644 back/internal/search/demo.go create mode 100644 back/internal/search/manager.go create mode 100644 back/internal/search/search.go create mode 100644 back/internal/tools/breachdirectory/tool.go create mode 100644 back/internal/tools/config_reflect.go create mode 100644 back/internal/tools/crtsh/tool.go create mode 100644 back/internal/tools/dig/tool.go create mode 100644 back/internal/tools/github-recon/tool.go create mode 100644 back/internal/tools/gravatar-recon/tool.go create mode 100644 back/internal/tools/ipinfo/tool.go create mode 100644 back/internal/tools/leakcheck/tool.go create mode 100644 back/internal/tools/maigret/tool.go create mode 100644 back/internal/tools/ptyrun.go create mode 100644 back/internal/tools/tools.go create mode 100644 back/internal/tools/user-scanner/tool.go create mode 100644 back/internal/tools/utils.go create mode 100644 back/internal/tools/wappalyzer/tool.go create mode 100644 back/internal/tools/whois/tool.go create mode 100644 back/internal/tools/whoisfreaks/tool.go create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 front/.gitignore create mode 100644 front/astro.config.mjs create mode 100644 front/bun.lock create mode 100644 front/bun.nix create mode 100644 front/package.json create mode 100644 front/public/.well-known/security.txt create mode 100644 front/public/Wrench.svg create mode 100644 front/public/anotherhadi.asc create mode 100644 front/public/favicon.svg create mode 100644 front/public/fonts/unbounded-black.ttf create mode 100644 front/public/logo-large.svg create mode 100644 front/public/logo.svg create mode 100644 front/public/op.png create mode 100644 front/public/security.txt create mode 100644 front/src/components/CheatsheetList.svelte create mode 100644 front/src/components/DemoBanner.svelte create mode 100644 front/src/components/HomePage.svelte create mode 100644 front/src/components/Nav.svelte create mode 100644 front/src/components/ProfileSettings.svelte create mode 100644 front/src/components/SearchBar.svelte create mode 100644 front/src/components/SearchDetail.svelte create mode 100644 front/src/components/SearchList.svelte create mode 100644 front/src/components/ToolDetail.svelte create mode 100644 front/src/components/ToolList.svelte create mode 100644 front/src/components/comps/Badge.svelte create mode 100644 front/src/components/comps/InfoTip.svelte create mode 100644 front/src/components/comps/Select.svelte create mode 100644 front/src/components/comps/ToolIcon.svelte create mode 100644 front/src/components/comps/TtyOutput.svelte create mode 100644 front/src/content.config.ts create mode 100644 front/src/content/cheatsheets/github-osint.md create mode 100644 front/src/content/cheatsheets/google-dorks.md create mode 100644 front/src/content/cheatsheets/sock-puppets.md create mode 100644 front/src/content/cheatsheets/tips.md create mode 100644 front/src/content/cheatsheets/x-twitter-osint.md create mode 100644 front/src/layouts/Layout.astro create mode 100644 front/src/lib/utils.ts create mode 100644 front/src/lib/vars.ts create mode 100644 front/src/pages/403.astro create mode 100644 front/src/pages/404.astro create mode 100644 front/src/pages/500.astro create mode 100644 front/src/pages/cheatsheets/[slug].astro create mode 100644 front/src/pages/cheatsheets/index.astro create mode 100644 front/src/pages/help.astro create mode 100644 front/src/pages/index.astro create mode 100644 front/src/pages/profiles.astro create mode 100644 front/src/pages/search/[id].astro create mode 100644 front/src/pages/tools/[name].astro create mode 100644 front/src/pages/tools/index.astro create mode 100644 front/src/styles/gfm.css create mode 100644 front/src/styles/global.css create mode 100644 front/src/styles/markdown.css create mode 100644 front/svelte.config.js create mode 100644 front/tsconfig.json create mode 100644 justfile create mode 100644 nix/backend.nix create mode 100644 nix/frontend.nix create mode 100644 nix/module.nix diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..31babc4 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,46 @@ +# Contributing + +Contributions are welcome: new tool integrations especially. + +1. Fork the repository +2. Create a feature branch: `git checkout -b feat/my-tool` +3. Implement your tool +4. Open a pull request + +Please ensure your tool handles context cancellation, respects rate limits, and declares the correct input types. Document any required API key or external binary dependency. + +## Development + +### Prerequisites + +- [Go 1.25+](https://go.dev/dl/) +- [Bun](https://bun.sh) +- [Just](https://github.com/casey/just) + +Or you can use the Nix Shell by typing `nix develop` + +### Run locally + +```bash +git clone https://github.com/anotherhadi/iknowyou.git +cd iknowyou + +just dev +``` + +Open [http://localhost:4321](http://localhost:4321). + +The backend listens on `:8080` by default. Configure via environment variables: + +| Variable | Default | Description | +| ------------ | ------------- | ---------------------------- | +| `IKY_PORT` | `8080` | HTTP port | +| `IKY_CONFIG` | `config.yaml` | Path to the YAML config file | + +## Adding a Tool + +1. Create `back/internal/tools/mytool/mytool.go` implementing `tools.ToolRunner` +2. Optionally implement `tools.Configurable` + `tools.ConfigDescriber` for config UI support +3. Optionally implement `tools.AvailabilityChecker` if the tool requires an external binary +4. Register in `back/cmd/server/main.go` and `back/cmd/gendocs/main.go` +5. Run `just docs` to update the docs diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..b1c5749 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +ko_fi: anotherhadi diff --git a/.github/assets/banner.png b/.github/assets/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..c845da3ef1c0471bd77311e269bde1e720be30b9 GIT binary patch literal 61310 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 mR*4H + +logo + +# I Know You + +**Self-hosted OSINT aggregation platform** + +Run dozens of open-source intelligence tools against a single target in parallel; all from one clean web interface. + +[![Go](https://img.shields.io/badge/Go-1.25+-00ADD8?style=flat&logo=go)](https://go.dev) +[![Astro](https://img.shields.io/badge/Astro-Svelte-FF5D01?style=flat&logo=astro)](https://astro.build) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) +[![Self-hosted](https://img.shields.io/badge/deployment-self--hosted-blueviolet)](https://github.com/anotherhadi/iknowyou) + + + +--- + +## What is it? + +IKY (iknowyou) is a **self-hosted OSINT (Open-Source Intelligence) platform** that centralises reconnaissance tools into a single reactive web interface. Instead of juggling terminals, browser tabs, and disconnected CLI tools, you type a target once and get results streaming in real time. + +Designed for security researchers, penetration testers, and OSINT investigators who need speed and visibility without compromising on control. + +**Supported target types:** `email`, `username`, `domain`, `IP`, `phone`, ... + +## Features + +- **Parallel execution**: all tools run simultaneously; results stream in as they arrive +- **Profile system**: create named profiles to enable/disable specific tools or override their config per investigation type (quick recon vs. thorough sweep) +- **Per-tool configuration**: set API keys, rate limits, and options globally or per profile +- **Tool availability checks**: tools that depend on an external binary report their status; the interface shows which tools are ready, which need config, and which are unavailable +- **Search history**: completed searches are kept in memory; results can be reviewed without re-running +- **Extensible architecture**: adding a new tool is a single Go file implementing one interface, registered in one line +- **Production-ready**: The configuration is YAML-based and read-only mode is supported (for Nix-managed deployments). A NixOS module is available. + +## Profiles + +Profiles let you tailor which tools run and how, without touching the global config. + +| Profile | Type | Description | +| ---------- | -------- | ---------------------------------------------------------------------------- | +| `default` | Built-in | All tools active, default settings | +| `hard` | Built-in | All tools active, including those that may leave traces at the target | +| _(custom)_ | User | Your own combination of enabled/disabled tools and per-tool config overrides | + +Create and manage custom profiles from the **Profiles** page. + +## Useful Links + +- [See the list of tools](.github/docs/tools.md) +- [Learn how it works](.github/docs/how-it-works.md) +- [Learn how to contribute](.github/CONTRIBUTING.md) + +## Deployment + +
+Deploy on NixOS + +1. In the `flake.nix` file, add `iknowyou` in the `inputs` section and import + the `iknowyou.nixosModules.default` module: + +```nix +{ + inputs = { + iknowyou.url = "github:anotherhadi/iknowyou"; + }; + outputs = { + # ... + modules = [ + inputs.iknowyou.nixosModules.default + ]; + # ... + } +} +``` + +2. Enable the service: + +```nix +services.iknowyou = { + enable = true; + port = 8080; + openFirewall = true; +}; +``` + +All tool dependencies are included automatically. + +
+ +## Configuring + +
+Via the web interface + +No files needed. API keys, tool settings, and profiles can all be managed from the **Settings** page. Changes are written back to the config file automatically. + +This only works if the config file is writable. On NixOS with a read-only store path, use one of the methods below instead. + +
+ +
+Via a YAML file + +Create `/etc/iky/config.yaml` (or any path, then point `IKY_CONFIG` to it): + +```yaml +tools: + github-recon: + token: ghp_yourtoken + whoisfreaks: + api_key: yourkey + ipinfo: + token: yourtoken + breachdirectory: + api_key: yourkey + +profiles: + quick: + enabled: + - whois + - dig + - crt.sh + disabled: [] +``` + +Only include the tools you want to configure — everything else falls back to defaults. + +
+ +
+Via Nix + sops-nix (NixOS) + +API keys should never go in the Nix store (world-readable). Use [sops-nix](https://github.com/Mic92/sops-nix) to store the config file as an encrypted secret and have it decrypted at boot with the right permissions. + +1. Add your IKY config to your sops-encrypted secrets file (e.g. `secrets/iky.yaml`): + +```yaml +iky-config: | + tools: + github-recon: + token: ghp_yourtoken + whoisfreaks: + api_key: yourkey + ipinfo: + token: yourtoken + profiles: + quick: + enabled: + - whois + - dig + - crt.sh + disabled: [] +``` + +2. Declare the secret and point the service to it: + +```nix +sops.secrets."iky-config" = { + owner = "iknowyou"; + mode = "0400"; + restartUnits = [ "iknowyou.service" ]; +}; + +services.iknowyou = { + enable = true; + configFile = config.sops.secrets."iky-config".path; +}; +``` + +The module creates the `iknowyou` group automatically and adds it as a supplementary group to the service, so the `DynamicUser` can read the secret without needing a static user. + +
+ +## ⚠️ Legal Disclaimer + +**IKY is intended for legal, authorized use only.** + +This software is designed for: + +- Security research on systems you own or have **explicit written permission** to test +- Penetration testing engagements conducted under a signed scope of work +- OSINT investigations carried out in compliance with applicable laws and regulations +- Educational purposes in controlled, isolated environments + +**Using IKY against targets without prior authorization may be illegal** under computer fraud and privacy laws. The author(s) of IKY accept **no responsibility** for any misuse, damage, legal consequences, or harm caused by this software. By using IKY you agree that you are solely responsible for ensuring your use is lawful and ethical. + +--- + +
diff --git a/back/.air.toml b/back/.air.toml new file mode 100644 index 0000000..0d00807 --- /dev/null +++ b/back/.air.toml @@ -0,0 +1,24 @@ +root = "." +testdata_dir = "testdata" +tmp_dir = "tmp" + +[build] + bin = "./tmp/main" + cmd = "go build -o ./tmp/main ./cmd/server/main.go" + include_ext = ["go", "toml"] + exclude_dir = ["tmp", "vendor", "node_modules"] + delay = 1000 + stop_on_error = true + clean_on_exit = true + +[log] + time = true + +[color] + main = "magenta" + watcher = "cyan" + build = "yellow" + runner = "green" + +[screen] + clear_on_rebuild = true diff --git a/back/.gitignore b/back/.gitignore new file mode 100644 index 0000000..c49656d --- /dev/null +++ b/back/.gitignore @@ -0,0 +1,2 @@ +tmp/ +config.yaml diff --git a/back/cmd/gendocs/main.go b/back/cmd/gendocs/main.go new file mode 100644 index 0000000..acc042a --- /dev/null +++ b/back/cmd/gendocs/main.go @@ -0,0 +1,155 @@ +package main + +import ( + "flag" + "fmt" + "os" + "path/filepath" + "strings" + + "github.com/anotherhadi/iknowyou/internal/registry" + "github.com/anotherhadi/iknowyou/internal/tools" +) + +func main() { + out := flag.String("out", "../.github/docs", "output directory for generated docs") + flag.Parse() + + toolsDir := filepath.Join(*out, "tools") + if _, err := os.Stat(toolsDir); err == nil { + if err := os.RemoveAll(toolsDir); err != nil { + fatalf("removing tools dir: %v", err) + } + } + + if err := os.MkdirAll(toolsDir, 0o755); err != nil { + fatalf("mkdir: %v", err) + } + + runners := make([]tools.ToolRunner, len(registry.Factories)) + for i, f := range registry.Factories { + runners[i] = f() + } + + if err := writeIndex(*out, runners); err != nil { + fatalf("index: %v", err) + } + for _, r := range runners { + if err := writeTool(*out, r); err != nil { + fatalf("tool %s: %v", r.Name(), err) + } + } + + fmt.Printf("✓ generated docs for %d tools → %s\n", len(runners), *out) +} + +// writeIndex writes the tools.md index table. +func writeIndex(outDir string, runners []tools.ToolRunner) error { + var b strings.Builder + + b.WriteString("# Tools\n\n") + fmt.Fprintf(&b, "_%d tools registered._\n\n", len(runners)) + + b.WriteString("| Tool | Input types | Description | Link |\n") + b.WriteString("|------|-------------|-------------|------|\n") + + for _, r := range runners { + types := make([]string, len(r.InputTypes())) + for i, t := range r.InputTypes() { + types[i] = fmt.Sprintf("`%s`", t) + } + link := fmt.Sprintf("[`%s`](tools/%s.md)", r.Name(), r.Name()) + projectLink := "" + if r.Link() != "" { + projectLink = fmt.Sprintf("[Link](%s)", r.Link()) + } + fmt.Fprintf(&b, "| %s | %s | %s | %s |\n", + link, + strings.Join(types, ", "), + r.Description(), + projectLink, + ) + } + + return writeFile(filepath.Join(outDir, "tools.md"), b.String()) +} + +// writeTool writes the per-tool detail page. +func writeTool(outDir string, r tools.ToolRunner) error { + var b strings.Builder + + fmt.Fprintf(&b, "# `%s`\n\n", r.Name()) + fmt.Fprintf(&b, "%s\n\n", r.Description()) + + if r.Link() != "" { + fmt.Fprintf(&b, "**Source / documentation:** [%s](%s)\n\n", r.Link(), r.Link()) + } + + // Input types + b.WriteString("## Input types\n\n") + for _, t := range r.InputTypes() { + fmt.Fprintf(&b, "- `%s`\n", t) + } + b.WriteString("\n") + + // External binary dependencies + if lister, ok := r.(tools.DependencyLister); ok { + if deps := lister.Dependencies(); len(deps) > 0 { + b.WriteString("## External dependencies\n\n") + b.WriteString("The following binaries must be installed and available in `$PATH`:\n\n") + for _, dep := range deps { + fmt.Fprintf(&b, "- `%s`\n", dep) + } + b.WriteString("\n") + } + } + + // Configuration + if d, ok := r.(tools.ConfigDescriber); ok { + fields := d.ConfigFields() + if len(fields) > 0 { + b.WriteString("## Configuration\n\n") + b.WriteString("Configure globally via the Tools page or override per profile.\n\n") + b.WriteString("| Field | Type | Required | Default | Description |\n") + b.WriteString("|-------|------|:--------:|---------|-------------|\n") + for _, f := range fields { + req := "-" + if f.Required { + req = "**yes**" + } + def := "-" + if f.Default != nil && fmt.Sprintf("%v", f.Default) != "" { + def = fmt.Sprintf("`%v`", f.Default) + } + desc := f.Description + if desc == "" { + desc = "-" + } + fmt.Fprintf(&b, "| `%s` | `%s` | %s | %s | %s |\n", + f.Name, f.Type, req, def, desc, + ) + } + b.WriteString("\n") + } else { + b.WriteString("## Configuration\n\nThis tool has no configuration fields.\n\n") + } + } else if _, ok := r.(tools.Configurable); ok { + b.WriteString("## Configuration\n\nThis tool is configurable but does not expose field metadata.\n\n") + } else { + b.WriteString("## Configuration\n\nThis tool requires no configuration.\n\n") + } + + b.WriteString("---\n\n") + b.WriteString("[← Back to tools index](../tools.md)\n") + + return writeFile(filepath.Join(outDir, "tools", r.Name()+".md"), b.String()) +} + +func writeFile(path, content string) error { + return os.WriteFile(path, []byte(content), 0o644) +} + +func fatalf(format string, args ...any) { + fmt.Fprintf(os.Stderr, "gendocs: "+format+"\n", args...) + os.Exit(1) +} diff --git a/back/cmd/server/main.go b/back/cmd/server/main.go new file mode 100644 index 0000000..2876aaf --- /dev/null +++ b/back/cmd/server/main.go @@ -0,0 +1,62 @@ +package main + +import ( + "context" + "fmt" + "log" + "net/http" + "os/signal" + "syscall" + "time" + + "github.com/anotherhadi/iknowyou/config/env" + internalapi "github.com/anotherhadi/iknowyou/internal/api" + "github.com/anotherhadi/iknowyou/internal/registry" + "github.com/anotherhadi/iknowyou/internal/search" +) + +func main() { + cfg, err := env.Load() + if err != nil { + log.Fatalf("env: %v", err) + } + + manager := search.NewManager(cfg.ConfigPath, registry.Factories, cfg.SearchTTL, cfg.CleanupInterval) + defer manager.Stop() + + if cfg.Demo { + manager.InjectDemoSearches() + log.Println("demo mode enabled") + } + + router := internalapi.NewRouter(manager, registry.Factories, cfg.ConfigPath, cfg.FrontDir, cfg.Demo) + + srv := &http.Server{ + Addr: fmt.Sprintf(":%d", cfg.Port), + Handler: router, + ReadTimeout: 10 * time.Second, + WriteTimeout: 30 * time.Second, + IdleTimeout: 60 * time.Second, + } + + ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) + defer stop() + + go func() { + log.Printf("listening on :%d (config: %s)", cfg.Port, cfg.ConfigPath) + if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { + log.Fatalf("server error: %v", err) + } + }() + + <-ctx.Done() + log.Println("shutting down...") + + shutdownCtx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + if err := srv.Shutdown(shutdownCtx); err != nil { + log.Fatalf("graceful shutdown failed: %v", err) + } + + log.Println("stopped") +} diff --git a/back/config/builtin.go b/back/config/builtin.go new file mode 100644 index 0000000..80226ac --- /dev/null +++ b/back/config/builtin.go @@ -0,0 +1,62 @@ +package config + +import "gopkg.in/yaml.v3" + +// BuiltinProfile is a hardcoded, read-only profile with optional tool config overrides. +type BuiltinProfile struct { + Notes string + Profile Profile + Tools map[string]map[string]any +} + +var BuiltinProfiles = map[string]BuiltinProfile{ + "default": { + Notes: "Standard profile. All tools are active with default settings.", + Profile: Profile{}, + }, + "hard": { + Notes: "Aggressive profile. All tools are active, including those that may send notifications to the target.", + Profile: Profile{}, + Tools: map[string]map[string]any{ + "user-scanner": {"allow_loud": true}, + "github-recon": {"deepscan": true}, + }, + }, +} + +func ApplyBuiltinToolOverride(profileName, toolName string, dst any) error { + builtin, ok := BuiltinProfiles[profileName] + if !ok || builtin.Tools == nil { + return nil + } + overrides, hasOverride := builtin.Tools[toolName] + if !hasOverride { + return nil + } + b, err := yaml.Marshal(overrides) + if err != nil { + return err + } + return yaml.Unmarshal(b, dst) +} + +func ActiveToolsForProfile(p Profile, allToolNames []string) []string { + active := allToolNames + if len(p.Enabled) > 0 { + active = p.Enabled + } + if len(p.Disabled) > 0 { + blacklist := make(map[string]struct{}, len(p.Disabled)) + for _, n := range p.Disabled { + blacklist[n] = struct{}{} + } + var filtered []string + for _, n := range active { + if _, skip := blacklist[n]; !skip { + filtered = append(filtered, n) + } + } + active = filtered + } + return active +} diff --git a/back/config/config.go b/back/config/config.go new file mode 100644 index 0000000..903d5f3 --- /dev/null +++ b/back/config/config.go @@ -0,0 +1,144 @@ +package config + +import ( + "fmt" + "log" + "os" + + "gopkg.in/yaml.v3" +) + +type Config struct { + Tools map[string]yaml.Node `yaml:"tools" json:"tools"` + Profiles map[string]Profile `yaml:"profiles" json:"profiles"` +} + +type Profile struct { + Notes string `yaml:"notes,omitempty" json:"notes,omitempty"` + Tools map[string]yaml.Node `yaml:"tools" json:"tools"` + Enabled []string `yaml:"enabled" json:"enabled"` + Disabled []string `yaml:"disabled" json:"disabled"` +} + +func (c *Config) DecodeEffective(toolName, profileName string, dst any) error { + if node, ok := c.Tools[toolName]; ok { + if err := node.Decode(dst); err != nil { + return fmt.Errorf("config: decoding global config for tool %q: %w", toolName, err) + } + } + + if profileName != "" { + // Builtin profiles have their overrides defined in Go, not in YAML. + if _, isBuiltin := BuiltinProfiles[profileName]; isBuiltin { + return ApplyBuiltinToolOverride(profileName, toolName, dst) + } + p, ok := c.Profiles[profileName] + if !ok { + return fmt.Errorf("config: unknown profile %q", profileName) + } + if node, ok := p.Tools[toolName]; ok { + if err := node.Decode(dst); err != nil { + return fmt.Errorf("config: decoding profile %q override for tool %q: %w", profileName, toolName, err) + } + } + } + + return nil +} + +func (c *Config) ActiveTools(profileName string, allToolNames []string) ([]string, error) { + if profileName == "" { + return allToolNames, nil + } + if builtin, ok := BuiltinProfiles[profileName]; ok { + return ActiveToolsForProfile(builtin.Profile, allToolNames), nil + } + p, ok := c.Profiles[profileName] + if !ok { + return nil, fmt.Errorf("config: unknown profile %q", profileName) + } + return ActiveToolsForProfile(p, allToolNames), nil +} + +// IsReadonly reports whether the config file at path cannot be written to. +// Returns false if the file does not exist (it can still be created). +func IsReadonly(path string) bool { + f, err := os.OpenFile(path, os.O_WRONLY, 0) + if err != nil { + return os.IsPermission(err) + } + f.Close() + return false +} + +func Load(path string) (*Config, error) { + f, err := os.Open(path) + if os.IsNotExist(err) { + log.Printf("config: %q not found, starting with empty config", path) + return Default(), nil + } + if err != nil { + return nil, fmt.Errorf("config: open %q: %w", path, err) + } + defer func() { _ = f.Close() }() + + var cfg Config + dec := yaml.NewDecoder(f) + dec.KnownFields(true) + if err := dec.Decode(&cfg); err != nil { + return nil, fmt.Errorf("config: decode: %w", err) + } + return &cfg, nil +} + +func Default() *Config { + return &Config{ + Tools: make(map[string]yaml.Node), + Profiles: make(map[string]Profile), + } +} + +func Save(path string, cfg *Config) error { + f, err := os.Create(path) + if err != nil { + return fmt.Errorf("config: create %q: %w", path, err) + } + defer func() { _ = f.Close() }() + + enc := yaml.NewEncoder(f) + enc.SetIndent(2) + if err := enc.Encode(cfg); err != nil { + return fmt.Errorf("config: encode: %w", err) + } + return nil +} + +// MergeNodePatch merges patch key-values into an existing yaml.Node (mapping). +// If existing is a zero value, it starts from an empty mapping. +func MergeNodePatch(existing yaml.Node, patch map[string]any) (yaml.Node, error) { + var m map[string]any + if existing.Kind != 0 { + if err := existing.Decode(&m); err != nil { + return yaml.Node{}, fmt.Errorf("config: decode node: %w", err) + } + } + if m == nil { + m = make(map[string]any) + } + for k, v := range patch { + m[k] = v + } + + b, err := yaml.Marshal(m) + if err != nil { + return yaml.Node{}, fmt.Errorf("config: marshal: %w", err) + } + var doc yaml.Node + if err := yaml.Unmarshal(b, &doc); err != nil { + return yaml.Node{}, fmt.Errorf("config: unmarshal: %w", err) + } + if doc.Kind == yaml.DocumentNode && len(doc.Content) == 1 { + return *doc.Content[0], nil + } + return doc, nil +} diff --git a/back/config/env/env.go b/back/config/env/env.go new file mode 100644 index 0000000..e318a56 --- /dev/null +++ b/back/config/env/env.go @@ -0,0 +1,64 @@ +package env + +import ( + "fmt" + "os" + "strconv" + "time" +) + +type Config struct { + Port int + ConfigPath string + FrontDir string // when set, serves the Astro static build at "/" + SearchTTL time.Duration + CleanupInterval time.Duration + Demo bool // when true, disables searches and config mutations +} + +func Load() (*Config, error) { + cfg := &Config{ + Port: 8080, + ConfigPath: "/etc/iky/config.yaml", + SearchTTL: 48 * time.Hour, + CleanupInterval: time.Hour, + } + + if v := os.Getenv("IKY_PORT"); v != "" { + p, err := strconv.Atoi(v) + if err != nil || p < 1 || p > 65535 { + return nil, fmt.Errorf("env: IKY_PORT %q is not a valid port number", v) + } + cfg.Port = p + } + + if v := os.Getenv("IKY_CONFIG"); v != "" { + cfg.ConfigPath = v + } + + if v := os.Getenv("IKY_FRONT_DIR"); v != "" { + cfg.FrontDir = v + } + + if v := os.Getenv("IKY_SEARCH_TTL"); v != "" { + d, err := time.ParseDuration(v) + if err != nil { + return nil, fmt.Errorf("env: IKY_SEARCH_TTL %q is not a valid duration", v) + } + cfg.SearchTTL = d + } + + if v := os.Getenv("IKY_CLEANUP_INTERVAL"); v != "" { + d, err := time.ParseDuration(v) + if err != nil { + return nil, fmt.Errorf("env: IKY_CLEANUP_INTERVAL %q is not a valid duration", v) + } + cfg.CleanupInterval = d + } + + if v := os.Getenv("IKY_DEMO"); v == "true" || v == "1" { + cfg.Demo = true + } + + return cfg, nil +} diff --git a/back/go.mod b/back/go.mod new file mode 100644 index 0000000..0949e20 --- /dev/null +++ b/back/go.mod @@ -0,0 +1,20 @@ +module github.com/anotherhadi/iknowyou + +go 1.25.7 + +require ( + github.com/go-chi/chi/v5 v5.2.5 + github.com/google/uuid v1.6.0 + gopkg.in/yaml.v3 v3.0.1 +) + +require github.com/creack/pty v1.1.24 + +require ( + github.com/projectdiscovery/wappalyzergo v0.2.75 // indirect + github.com/tidwall/gjson v1.18.0 // indirect + github.com/tidwall/match v1.1.1 // indirect + github.com/tidwall/pretty v1.2.0 // indirect + golang.org/x/net v0.52.0 // indirect + golang.org/x/time v0.15.0 // indirect +) diff --git a/back/go.sum b/back/go.sum new file mode 100644 index 0000000..1997a84 --- /dev/null +++ b/back/go.sum @@ -0,0 +1,22 @@ +github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s= +github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE= +github.com/go-chi/chi/v5 v5.2.5 h1:Eg4myHZBjyvJmAFjFvWgrqDTXFyOzjj7YIm3L3mu6Ug= +github.com/go-chi/chi/v5 v5.2.5/go.mod h1:X7Gx4mteadT3eDOMTsXzmI4/rwUpOwBHLpAfupzFJP0= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/projectdiscovery/wappalyzergo v0.2.75 h1:ScmpgoYuIzERh4lJpjWPPY89PUWbhUu6vFbCYAr0kWc= +github.com/projectdiscovery/wappalyzergo v0.2.75/go.mod h1:hRsnKNleH693FFJsBOD5NMUDbxw/Q94f0Oq2OV04Q6M= +github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= +github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= +github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= +golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= +golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= +golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/back/internal/api/handler/config.go b/back/internal/api/handler/config.go new file mode 100644 index 0000000..1a2d850 --- /dev/null +++ b/back/internal/api/handler/config.go @@ -0,0 +1,593 @@ +package handler + +import ( + "encoding/json" + "fmt" + "net/http" + "sort" + "sync" + + "github.com/go-chi/chi/v5" + "gopkg.in/yaml.v3" + + "github.com/anotherhadi/iknowyou/config" + "github.com/anotherhadi/iknowyou/internal/respond" + "github.com/anotherhadi/iknowyou/internal/tools" +) + +type ConfigHandler struct { + configPath string + factories []func() tools.ToolRunner + demo bool + mu sync.Mutex +} + +func NewConfigHandler(configPath string, factories []func() tools.ToolRunner, demo bool) *ConfigHandler { + return &ConfigHandler{configPath: configPath, factories: factories, demo: demo} +} + +// GET /api/config +func (h *ConfigHandler) Get(w http.ResponseWriter, r *http.Request) { + cfg, err := config.Load(h.configPath) + if err != nil { + respond.Error(w, http.StatusInternalServerError, err.Error()) + return + } + toolConfigs := make(map[string]any, len(cfg.Tools)) + for toolName, node := range cfg.Tools { + var m map[string]any + if err := node.Decode(&m); err == nil { + toolConfigs[toolName] = m + } + } + respond.JSON(w, http.StatusOK, map[string]any{ + "tools": toolConfigs, + "profiles": cfg.Profiles, + "readonly": h.demo || config.IsReadonly(h.configPath), + "demo": h.demo, + }) +} + +type profileSummary struct { + Name string `json:"name"` + Notes string `json:"notes,omitempty"` + Readonly bool `json:"readonly"` +} + +// GET /api/config/profiles +func (h *ConfigHandler) ListProfiles(w http.ResponseWriter, r *http.Request) { + cfg, err := config.Load(h.configPath) + if err != nil { + respond.Error(w, http.StatusInternalServerError, err.Error()) + return + } + + builtinNames := make([]string, 0, len(config.BuiltinProfiles)) + for name := range config.BuiltinProfiles { + builtinNames = append(builtinNames, name) + } + sort.Strings(builtinNames) + summaries := make([]profileSummary, 0, len(builtinNames)+len(cfg.Profiles)) + for _, name := range builtinNames { + summaries = append(summaries, profileSummary{Name: name, Notes: config.BuiltinProfiles[name].Notes, Readonly: true}) + } + + names := make([]string, 0, len(cfg.Profiles)) + for name := range cfg.Profiles { + names = append(names, name) + } + sort.Strings(names) + for _, name := range names { + p := cfg.Profiles[name] + summaries = append(summaries, profileSummary{Name: name, Notes: p.Notes, Readonly: false}) + } + + respond.JSON(w, http.StatusOK, summaries) +} + +type profileDetail struct { + Name string `json:"name"` + Notes string `json:"notes,omitempty"` + Readonly bool `json:"readonly"` + Enabled []string `json:"enabled"` + Disabled []string `json:"disabled"` + Tools map[string]any `json:"tools"` + ActiveTools []string `json:"active_tools"` +} + +// GET /api/config/profiles/{name} +func (h *ConfigHandler) GetProfile(w http.ResponseWriter, r *http.Request) { + name := chi.URLParam(r, "name") + + allNames := make([]string, 0, len(h.factories)) + for _, factory := range h.factories { + allNames = append(allNames, factory().Name()) + } + + if builtin, ok := config.BuiltinProfiles[name]; ok { + activeTools := config.ActiveToolsForProfile(builtin.Profile, allNames) + if activeTools == nil { + activeTools = allNames + } + enabled := builtin.Profile.Enabled + if enabled == nil { + enabled = []string{} + } + disabled := builtin.Profile.Disabled + if disabled == nil { + disabled = []string{} + } + respond.JSON(w, http.StatusOK, profileDetail{ + Name: name, + Notes: builtin.Notes, + Readonly: true, + Enabled: enabled, + Disabled: disabled, + Tools: map[string]any{}, + ActiveTools: activeTools, + }) + return + } + + cfg, err := config.Load(h.configPath) + if err != nil { + respond.Error(w, http.StatusInternalServerError, err.Error()) + return + } + p, ok := cfg.Profiles[name] + if !ok { + respond.Error(w, http.StatusNotFound, "profile not found") + return + } + + toolOverrides := make(map[string]any, len(p.Tools)) + for toolName, node := range p.Tools { + var m map[string]any + if err := node.Decode(&m); err == nil { + toolOverrides[toolName] = m + } + } + + activeTools, _ := cfg.ActiveTools(name, allNames) + + enabled := p.Enabled + if enabled == nil { + enabled = []string{} + } + disabled := p.Disabled + if disabled == nil { + disabled = []string{} + } + + respond.JSON(w, http.StatusOK, profileDetail{ + Name: name, + Notes: p.Notes, + Readonly: false, + Enabled: enabled, + Disabled: disabled, + Tools: toolOverrides, + ActiveTools: activeTools, + }) +} + +// POST /api/config/profiles +func (h *ConfigHandler) CreateProfile(w http.ResponseWriter, r *http.Request) { + if h.demo { + respond.Error(w, http.StatusForbidden, "demo mode: modifications are disabled") + return + } + if config.IsReadonly(h.configPath) { + respond.Error(w, http.StatusForbidden, "config is read-only") + return + } + var req struct { + Name string `json:"name"` + Notes string `json:"notes"` + Enabled []string `json:"enabled"` + Disabled []string `json:"disabled"` + } + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + respond.Error(w, http.StatusBadRequest, "invalid JSON: "+err.Error()) + return + } + if req.Name == "" { + respond.Error(w, http.StatusBadRequest, "name is required") + return + } + if err := validateProfileName(req.Name); err != nil { + respond.Error(w, http.StatusBadRequest, err.Error()) + return + } + if _, isBuiltin := config.BuiltinProfiles[req.Name]; isBuiltin { + respond.Error(w, http.StatusForbidden, fmt.Sprintf("profile %q is reserved", req.Name)) + return + } + + h.mu.Lock() + defer h.mu.Unlock() + + cfg, err := config.Load(h.configPath) + if err != nil { + respond.Error(w, http.StatusInternalServerError, err.Error()) + return + } + if _, exists := cfg.Profiles[req.Name]; exists { + respond.Error(w, http.StatusConflict, "profile already exists") + return + } + + cfg.Profiles[req.Name] = config.Profile{ + Notes: req.Notes, + Enabled: req.Enabled, + Disabled: req.Disabled, + } + if err := config.Save(h.configPath, cfg); err != nil { + respond.Error(w, http.StatusInternalServerError, err.Error()) + return + } + respond.JSON(w, http.StatusCreated, cfg.Profiles[req.Name]) +} + +// PATCH /api/config/profiles/{name} +func (h *ConfigHandler) UpdateProfile(w http.ResponseWriter, r *http.Request) { + if h.demo { + respond.Error(w, http.StatusForbidden, "demo mode: modifications are disabled") + return + } + if config.IsReadonly(h.configPath) { + respond.Error(w, http.StatusForbidden, "config is read-only") + return + } + name := chi.URLParam(r, "name") + if _, isBuiltin := config.BuiltinProfiles[name]; isBuiltin { + respond.Error(w, http.StatusForbidden, fmt.Sprintf("profile %q is read-only", name)) + return + } + + var req struct { + Notes *string `json:"notes"` + Enabled *[]string `json:"enabled"` + Disabled *[]string `json:"disabled"` + } + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + respond.Error(w, http.StatusBadRequest, "invalid JSON: "+err.Error()) + return + } + + h.mu.Lock() + defer h.mu.Unlock() + + cfg, err := config.Load(h.configPath) + if err != nil { + respond.Error(w, http.StatusInternalServerError, err.Error()) + return + } + p, ok := cfg.Profiles[name] + if !ok { + respond.Error(w, http.StatusNotFound, "profile not found") + return + } + + if req.Notes != nil { + p.Notes = *req.Notes + } + if req.Enabled != nil { + p.Enabled = *req.Enabled + } + if req.Disabled != nil { + p.Disabled = *req.Disabled + } + cfg.Profiles[name] = p + + if err := config.Save(h.configPath, cfg); err != nil { + respond.Error(w, http.StatusInternalServerError, err.Error()) + return + } + respond.JSON(w, http.StatusOK, p) +} + +// DELETE /api/config/profiles/{name} +func (h *ConfigHandler) DeleteProfile(w http.ResponseWriter, r *http.Request) { + if h.demo { + respond.Error(w, http.StatusForbidden, "demo mode: modifications are disabled") + return + } + if config.IsReadonly(h.configPath) { + respond.Error(w, http.StatusForbidden, "config is read-only") + return + } + name := chi.URLParam(r, "name") + if _, isBuiltin := config.BuiltinProfiles[name]; isBuiltin { + respond.Error(w, http.StatusForbidden, fmt.Sprintf("profile %q is read-only", name)) + return + } + + h.mu.Lock() + defer h.mu.Unlock() + + cfg, err := config.Load(h.configPath) + if err != nil { + respond.Error(w, http.StatusInternalServerError, err.Error()) + return + } + if _, ok := cfg.Profiles[name]; !ok { + respond.Error(w, http.StatusNotFound, "profile not found") + return + } + delete(cfg.Profiles, name) + + if err := config.Save(h.configPath, cfg); err != nil { + respond.Error(w, http.StatusInternalServerError, err.Error()) + return + } + w.WriteHeader(http.StatusNoContent) +} + +// PATCH /api/config/tools/{toolName} +func (h *ConfigHandler) UpdateToolConfig(w http.ResponseWriter, r *http.Request) { + if h.demo { + respond.Error(w, http.StatusForbidden, "demo mode: modifications are disabled") + return + } + if config.IsReadonly(h.configPath) { + respond.Error(w, http.StatusForbidden, "config is read-only") + return + } + toolName := chi.URLParam(r, "toolName") + + var patch map[string]any + if err := json.NewDecoder(r.Body).Decode(&patch); err != nil { + respond.Error(w, http.StatusBadRequest, "invalid JSON: "+err.Error()) + return + } + if err := h.validatePatch(toolName, patch); err != nil { + respond.Error(w, http.StatusBadRequest, err.Error()) + return + } + + h.mu.Lock() + defer h.mu.Unlock() + + cfg, err := config.Load(h.configPath) + if err != nil { + respond.Error(w, http.StatusInternalServerError, err.Error()) + return + } + + merged, err := config.MergeNodePatch(cfg.Tools[toolName], patch) + if err != nil { + respond.Error(w, http.StatusInternalServerError, err.Error()) + return + } + cfg.Tools[toolName] = merged + + if err := config.Save(h.configPath, cfg); err != nil { + respond.Error(w, http.StatusInternalServerError, err.Error()) + return + } + + var result map[string]any + _ = merged.Decode(&result) + respond.JSON(w, http.StatusOK, result) +} + +// DELETE /api/config/tools/{toolName} +func (h *ConfigHandler) DeleteToolConfig(w http.ResponseWriter, r *http.Request) { + if h.demo { + respond.Error(w, http.StatusForbidden, "demo mode: modifications are disabled") + return + } + if config.IsReadonly(h.configPath) { + respond.Error(w, http.StatusForbidden, "config is read-only") + return + } + toolName := chi.URLParam(r, "toolName") + + h.mu.Lock() + defer h.mu.Unlock() + + cfg, err := config.Load(h.configPath) + if err != nil { + respond.Error(w, http.StatusInternalServerError, err.Error()) + return + } + if _, ok := cfg.Tools[toolName]; !ok { + respond.Error(w, http.StatusNotFound, "no global config for this tool") + return + } + delete(cfg.Tools, toolName) + + if err := config.Save(h.configPath, cfg); err != nil { + respond.Error(w, http.StatusInternalServerError, err.Error()) + return + } + w.WriteHeader(http.StatusNoContent) +} + +// PATCH /api/config/profiles/{name}/tools/{toolName} +func (h *ConfigHandler) UpdateProfileToolConfig(w http.ResponseWriter, r *http.Request) { + if h.demo { + respond.Error(w, http.StatusForbidden, "demo mode: modifications are disabled") + return + } + if config.IsReadonly(h.configPath) { + respond.Error(w, http.StatusForbidden, "config is read-only") + return + } + name := chi.URLParam(r, "name") + toolName := chi.URLParam(r, "toolName") + + if _, isBuiltin := config.BuiltinProfiles[name]; isBuiltin { + respond.Error(w, http.StatusForbidden, fmt.Sprintf("profile %q is read-only", name)) + return + } + + var patch map[string]any + if err := json.NewDecoder(r.Body).Decode(&patch); err != nil { + respond.Error(w, http.StatusBadRequest, "invalid JSON: "+err.Error()) + return + } + if err := h.validatePatch(toolName, patch); err != nil { + respond.Error(w, http.StatusBadRequest, err.Error()) + return + } + + h.mu.Lock() + defer h.mu.Unlock() + + cfg, err := config.Load(h.configPath) + if err != nil { + respond.Error(w, http.StatusInternalServerError, err.Error()) + return + } + p, ok := cfg.Profiles[name] + if !ok { + respond.Error(w, http.StatusNotFound, "profile not found") + return + } + if p.Tools == nil { + p.Tools = make(map[string]yaml.Node) + } + + merged, err := config.MergeNodePatch(p.Tools[toolName], patch) + if err != nil { + respond.Error(w, http.StatusInternalServerError, err.Error()) + return + } + p.Tools[toolName] = merged + cfg.Profiles[name] = p + + if err := config.Save(h.configPath, cfg); err != nil { + respond.Error(w, http.StatusInternalServerError, err.Error()) + return + } + + var result map[string]any + _ = merged.Decode(&result) + respond.JSON(w, http.StatusOK, result) +} + +// DELETE /api/config/profiles/{name}/tools/{toolName} +func (h *ConfigHandler) DeleteProfileToolConfig(w http.ResponseWriter, r *http.Request) { + if h.demo { + respond.Error(w, http.StatusForbidden, "demo mode: modifications are disabled") + return + } + if config.IsReadonly(h.configPath) { + respond.Error(w, http.StatusForbidden, "config is read-only") + return + } + name := chi.URLParam(r, "name") + toolName := chi.URLParam(r, "toolName") + + if _, isBuiltin := config.BuiltinProfiles[name]; isBuiltin { + respond.Error(w, http.StatusForbidden, fmt.Sprintf("profile %q is read-only", name)) + return + } + + h.mu.Lock() + defer h.mu.Unlock() + + cfg, err := config.Load(h.configPath) + if err != nil { + respond.Error(w, http.StatusInternalServerError, err.Error()) + return + } + p, ok := cfg.Profiles[name] + if !ok { + respond.Error(w, http.StatusNotFound, "profile not found") + return + } + if _, ok := p.Tools[toolName]; !ok { + respond.Error(w, http.StatusNotFound, "no config override for this tool in profile") + return + } + delete(p.Tools, toolName) + cfg.Profiles[name] = p + + if err := config.Save(h.configPath, cfg); err != nil { + respond.Error(w, http.StatusInternalServerError, err.Error()) + return + } + w.WriteHeader(http.StatusNoContent) +} + +func validateProfileName(name string) error { + for _, c := range name { + if !((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '-') { + return fmt.Errorf("profile name must contain only lowercase letters (a-z), digits (0-9), and hyphens (-)") + } + } + return nil +} + +func (h *ConfigHandler) validatePatch(toolName string, patch map[string]any) error { + var fields []tools.ConfigField + for _, factory := range h.factories { + t := factory() + if t.Name() == toolName { + if d, ok := t.(tools.ConfigDescriber); ok { + fields = d.ConfigFields() + } + break + } + } + if len(fields) == 0 { + return nil + } + fieldMap := make(map[string]tools.ConfigField, len(fields)) + for _, f := range fields { + fieldMap[f.Name] = f + } + for key, val := range patch { + f, ok := fieldMap[key] + if !ok { + continue + } + if err := validateFieldValue(f, val); err != nil { + return fmt.Errorf("field %q: %w", key, err) + } + } + return nil +} + +func validateFieldValue(f tools.ConfigField, val any) error { + if val == nil { + return nil + } + switch f.Type { + case "string": + if _, ok := val.(string); !ok { + return fmt.Errorf("expected string, got %T", val) + } + case "bool": + if _, ok := val.(bool); !ok { + return fmt.Errorf("expected bool, got %T", val) + } + case "int": + switch v := val.(type) { + case float64: + if v != float64(int64(v)) { + return fmt.Errorf("expected integer, got float") + } + default: + return fmt.Errorf("expected int, got %T", val) + } + case "float": + if _, ok := val.(float64); !ok { + return fmt.Errorf("expected number, got %T", val) + } + case "enum": + s, ok := val.(string) + if !ok { + return fmt.Errorf("expected string, got %T", val) + } + for _, opt := range f.Options { + if s == opt { + return nil + } + } + return fmt.Errorf("invalid value %q, must be one of: %v", s, f.Options) + } + return nil +} diff --git a/back/internal/api/handler/search.go b/back/internal/api/handler/search.go new file mode 100644 index 0000000..dfd2285 --- /dev/null +++ b/back/internal/api/handler/search.go @@ -0,0 +1,146 @@ +package handler + +import ( + "context" + "encoding/json" + "net/http" + + "github.com/go-chi/chi/v5" + + "github.com/anotherhadi/iknowyou/internal/respond" + "github.com/anotherhadi/iknowyou/internal/search" + "github.com/anotherhadi/iknowyou/internal/tools" +) + +type SearchHandler struct { + manager *search.Manager + demo bool +} + +func NewSearchHandler(manager *search.Manager, demo bool) *SearchHandler { + return &SearchHandler{manager: manager, demo: demo} +} + +type postSearchRequest struct { + Target string `json:"target"` + InputType tools.InputType `json:"input_type"` + Profile string `json:"profile,omitempty"` +} + +type searchSummary struct { + ID string `json:"id"` + Target string `json:"target"` + InputType tools.InputType `json:"input_type"` + Profile string `json:"profile,omitempty"` + Status search.Status `json:"status"` + StartedAt string `json:"started_at"` + PlannedTools []search.ToolStatus `json:"planned_tools"` +} + +type searchDetail struct { + searchSummary + Events []tools.Event `json:"events"` +} + +func toSummary(s *search.Search) searchSummary { + planned := s.PlannedTools + if planned == nil { + planned = []search.ToolStatus{} + } + return searchSummary{ + ID: s.ID, + Target: s.Target, + InputType: s.InputType, + Profile: s.Profile, + Status: s.Status(), + StartedAt: s.StartedAt.UTC().Format("2006-01-02T15:04:05Z"), + PlannedTools: planned, + } +} + +var validInputTypes = map[tools.InputType]struct{}{ + tools.InputTypeEmail: {}, + tools.InputTypeUsername: {}, + tools.InputTypePhone: {}, + tools.InputTypeIP: {}, + tools.InputTypeDomain: {}, + tools.InputTypePassword: {}, + tools.InputTypeName: {}, +} + +// POST /searches +func (h *SearchHandler) Create(w http.ResponseWriter, r *http.Request) { + if h.demo { + respond.Error(w, http.StatusForbidden, "demo mode: searches are disabled") + return + } + var req postSearchRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + respond.Error(w, http.StatusBadRequest, "invalid JSON body") + return + } + if req.Target == "" { + respond.Error(w, http.StatusBadRequest, "target is required") + return + } + if len(req.Target) > 500 { + respond.Error(w, http.StatusBadRequest, "target is too long (max 500 characters)") + return + } + if req.Target[0] == '-' || req.Target[0] == '@' { + respond.Error(w, http.StatusBadRequest, "invalid target") + return + } + if req.InputType == "" { + respond.Error(w, http.StatusBadRequest, "input_type is required") + return + } + if _, ok := validInputTypes[req.InputType]; !ok { + respond.Error(w, http.StatusBadRequest, "invalid input_type") + return + } + + s, err := h.manager.Start(context.WithoutCancel(r.Context()), req.Target, req.InputType, req.Profile) + if err != nil { + respond.Error(w, http.StatusInternalServerError, err.Error()) + return + } + + respond.JSON(w, http.StatusCreated, toSummary(s)) +} + +// GET /searches +func (h *SearchHandler) List(w http.ResponseWriter, r *http.Request) { + all := h.manager.All() + summaries := make([]searchSummary, len(all)) + for i, s := range all { + summaries[i] = toSummary(s) + } + respond.JSON(w, http.StatusOK, summaries) +} + +// GET /searches/{id} +func (h *SearchHandler) Get(w http.ResponseWriter, r *http.Request) { + id := chi.URLParam(r, "id") + s, err := h.manager.Get(id) + if err != nil { + respond.Error(w, http.StatusNotFound, err.Error()) + return + } + + detail := searchDetail{ + searchSummary: toSummary(s), + Events: s.Events(), + } + respond.JSON(w, http.StatusOK, detail) +} + +// DELETE /searches/{id} +func (h *SearchHandler) Delete(w http.ResponseWriter, r *http.Request) { + id := chi.URLParam(r, "id") + if err := h.manager.Delete(id); err != nil { + respond.Error(w, http.StatusNotFound, err.Error()) + return + } + w.WriteHeader(http.StatusNoContent) +} diff --git a/back/internal/api/handler/tools.go b/back/internal/api/handler/tools.go new file mode 100644 index 0000000..744dece --- /dev/null +++ b/back/internal/api/handler/tools.go @@ -0,0 +1,91 @@ +package handler + +import ( + "fmt" + "net/http" + + "github.com/go-chi/chi/v5" + + "github.com/anotherhadi/iknowyou/internal/respond" + "github.com/anotherhadi/iknowyou/internal/tools" +) + +type ToolsHandler struct { + factories []func() tools.ToolRunner +} + +func NewToolsHandler(factories []func() tools.ToolRunner) *ToolsHandler { + return &ToolsHandler{factories: factories} +} + +type toolInfo struct { + Name string `json:"name"` + Description string `json:"description"` + Link string `json:"link,omitempty"` + Icon string `json:"icon,omitempty"` + InputTypes []tools.InputType `json:"input_types"` + Configurable bool `json:"configurable"` + ConfigFields []tools.ConfigField `json:"config_fields,omitempty"` + Available *bool `json:"available,omitempty"` + UnavailableReason string `json:"unavailable_reason,omitempty"` + Dependencies []string `json:"dependencies,omitempty"` +} + +func toToolInfo(t tools.ToolRunner) toolInfo { + _, configurable := t.(tools.Configurable) + + var fields []tools.ConfigField + if d, ok := t.(tools.ConfigDescriber); ok { + fields = d.ConfigFields() + } + + var available *bool + var unavailableReason string + if checker, ok := t.(tools.AvailabilityChecker); ok { + avail, reason := checker.Available() + available = &avail + if !avail { + unavailableReason = reason + } + } + + var dependencies []string + if lister, ok := t.(tools.DependencyLister); ok { + dependencies = lister.Dependencies() + } + + return toolInfo{ + Name: t.Name(), + Description: t.Description(), + Link: t.Link(), + Icon: t.Icon(), + InputTypes: t.InputTypes(), + Configurable: configurable, + ConfigFields: fields, + Available: available, + UnavailableReason: unavailableReason, + Dependencies: dependencies, + } +} + +// GET /api/tools +func (h *ToolsHandler) List(w http.ResponseWriter, r *http.Request) { + infos := make([]toolInfo, 0, len(h.factories)) + for _, factory := range h.factories { + infos = append(infos, toToolInfo(factory())) + } + respond.JSON(w, http.StatusOK, infos) +} + +// GET /api/tools/{name} +func (h *ToolsHandler) Get(w http.ResponseWriter, r *http.Request) { + name := chi.URLParam(r, "name") + for _, factory := range h.factories { + t := factory() + if t.Name() == name { + respond.JSON(w, http.StatusOK, toToolInfo(t)) + return + } + } + respond.Error(w, http.StatusNotFound, fmt.Sprintf("tool %q not found", name)) +} diff --git a/back/internal/api/middleware/ratelimit.go b/back/internal/api/middleware/ratelimit.go new file mode 100644 index 0000000..99c1ca5 --- /dev/null +++ b/back/internal/api/middleware/ratelimit.go @@ -0,0 +1,72 @@ +package middleware + +import ( + "net" + "net/http" + "sync" + "time" + + "golang.org/x/time/rate" +) + +type ipLimiter struct { + limiter *rate.Limiter + lastSeen time.Time +} + +type Limiter struct { + mu sync.Mutex + visitors map[string]*ipLimiter + r rate.Limit + burst int +} + +func New(r rate.Limit, burst int) *Limiter { + l := &Limiter{ + visitors: make(map[string]*ipLimiter), + r: r, + burst: burst, + } + go l.cleanupLoop() + return l +} + +func (l *Limiter) getLimiter(ip string) *rate.Limiter { + l.mu.Lock() + defer l.mu.Unlock() + v, exists := l.visitors[ip] + if !exists { + v = &ipLimiter{limiter: rate.NewLimiter(l.r, l.burst)} + l.visitors[ip] = v + } + v.lastSeen = time.Now() + return v.limiter +} + +func (l *Limiter) cleanupLoop() { + ticker := time.NewTicker(10 * time.Minute) + defer ticker.Stop() + for range ticker.C { + l.mu.Lock() + for ip, v := range l.visitors { + if time.Since(v.lastSeen) > 10*time.Minute { + delete(l.visitors, ip) + } + } + l.mu.Unlock() + } +} + +func (l *Limiter) Handler(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ip, _, err := net.SplitHostPort(r.RemoteAddr) + if err != nil { + ip = r.RemoteAddr + } + if !l.getLimiter(ip).Allow() { + http.Error(w, `{"error":"rate limit exceeded, please slow down"}`, http.StatusTooManyRequests) + return + } + next.ServeHTTP(w, r) + }) +} diff --git a/back/internal/api/router.go b/back/internal/api/router.go new file mode 100644 index 0000000..19bb572 --- /dev/null +++ b/back/internal/api/router.go @@ -0,0 +1,73 @@ +package api + +import ( + "time" + + "github.com/go-chi/chi/v5" + chimiddleware "github.com/go-chi/chi/v5/middleware" + "golang.org/x/time/rate" + + "github.com/anotherhadi/iknowyou/internal/api/handler" + ikymiddleware "github.com/anotherhadi/iknowyou/internal/api/middleware" + "github.com/anotherhadi/iknowyou/internal/search" + "github.com/anotherhadi/iknowyou/internal/tools" +) + +func NewRouter( + manager *search.Manager, + factories []func() tools.ToolRunner, + configPath string, + frontDir string, + demo bool, +) *chi.Mux { + r := chi.NewRouter() + + r.Use(chimiddleware.Logger) + r.Use(chimiddleware.Recoverer) + r.Use(chimiddleware.RequestID) + + searchHandler := handler.NewSearchHandler(manager, demo) + toolsHandler := handler.NewToolsHandler(factories) + configHandler := handler.NewConfigHandler(configPath, factories, demo) + + searchLimiter := ikymiddleware.New(rate.Every(10*time.Second), 3) + + r.Route("/api", func(r chi.Router) { + r.Route("/searches", func(r chi.Router) { + r.With(searchLimiter.Handler).Post("/", searchHandler.Create) + r.Get("/", searchHandler.List) + r.Get("/{id}", searchHandler.Get) + r.Delete("/{id}", searchHandler.Delete) + }) + + r.Route("/tools", func(r chi.Router) { + r.Get("/", toolsHandler.List) + r.Get("/{name}", toolsHandler.Get) + }) + + r.Route("/config", func(r chi.Router) { + r.Get("/", configHandler.Get) + + r.Route("/tools", func(r chi.Router) { + r.Patch("/{toolName}", configHandler.UpdateToolConfig) + r.Delete("/{toolName}", configHandler.DeleteToolConfig) + }) + + r.Route("/profiles", func(r chi.Router) { + r.Get("/", configHandler.ListProfiles) + r.Post("/", configHandler.CreateProfile) + r.Get("/{name}", configHandler.GetProfile) + r.Patch("/{name}", configHandler.UpdateProfile) + r.Delete("/{name}", configHandler.DeleteProfile) + r.Patch("/{name}/tools/{toolName}", configHandler.UpdateProfileToolConfig) + r.Delete("/{name}/tools/{toolName}", configHandler.DeleteProfileToolConfig) + }) + }) + }) + + if frontDir != "" { + r.Handle("/*", newStaticHandler(frontDir)) + } + + return r +} diff --git a/back/internal/api/static.go b/back/internal/api/static.go new file mode 100644 index 0000000..156753b --- /dev/null +++ b/back/internal/api/static.go @@ -0,0 +1,56 @@ +package api + +import ( + "net/http" + "os" + "path/filepath" + "strings" +) + +// newStaticHandler serves the Astro static build with SPA fallbacks: +// /search/ and /tools/ → their respective shell pages. +func newStaticHandler(dir string) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + urlPath := r.URL.Path + + if strings.HasPrefix(urlPath, "/search/") && len(urlPath) > len("/search/") { + http.ServeFile(w, r, filepath.Join(dir, "search", "_", "index.html")) + return + } + + if strings.HasPrefix(urlPath, "/tools/") { + rest := strings.TrimPrefix(urlPath, "/tools/") + if rest != "" && !strings.Contains(rest, "/") { + http.ServeFile(w, r, filepath.Join(dir, "tools", "_", "index.html")) + return + } + } + + rel := filepath.FromSlash(strings.TrimPrefix(urlPath, "/")) + full := filepath.Join(dir, rel) + + info, err := os.Stat(full) + if err == nil && info.IsDir() { + full = filepath.Join(full, "index.html") + if _, err2 := os.Stat(full); err2 != nil { + serve404(w, r, dir) + return + } + } else if err != nil { + serve404(w, r, dir) + return + } + + http.ServeFile(w, r, full) + }) +} + +func serve404(w http.ResponseWriter, r *http.Request, dir string) { + p := filepath.Join(dir, "404.html") + if _, err := os.Stat(p); err == nil { + w.WriteHeader(http.StatusNotFound) + http.ServeFile(w, r, p) + return + } + http.NotFound(w, r) +} diff --git a/back/internal/registry/registry.go b/back/internal/registry/registry.go new file mode 100644 index 0000000..27cf3ca --- /dev/null +++ b/back/internal/registry/registry.go @@ -0,0 +1,32 @@ +package registry + +import ( + "github.com/anotherhadi/iknowyou/internal/tools" + breachdirectory "github.com/anotherhadi/iknowyou/internal/tools/breachdirectory" + crtsh "github.com/anotherhadi/iknowyou/internal/tools/crtsh" + digtool "github.com/anotherhadi/iknowyou/internal/tools/dig" + githubrecon "github.com/anotherhadi/iknowyou/internal/tools/github-recon" + gravatarrecon "github.com/anotherhadi/iknowyou/internal/tools/gravatar-recon" + ipinfotool "github.com/anotherhadi/iknowyou/internal/tools/ipinfo" + leakcheck "github.com/anotherhadi/iknowyou/internal/tools/leakcheck" + maigret "github.com/anotherhadi/iknowyou/internal/tools/maigret" + userscanner "github.com/anotherhadi/iknowyou/internal/tools/user-scanner" + wappalyzer "github.com/anotherhadi/iknowyou/internal/tools/wappalyzer" + whoistool "github.com/anotherhadi/iknowyou/internal/tools/whois" + whoisfreaks "github.com/anotherhadi/iknowyou/internal/tools/whoisfreaks" +) + +var Factories = []func() tools.ToolRunner{ + userscanner.New, + githubrecon.New, + whoistool.New, + digtool.New, + ipinfotool.New, + gravatarrecon.New, + whoisfreaks.New, + maigret.New, + leakcheck.New, + crtsh.New, + breachdirectory.New, + wappalyzer.New, +} diff --git a/back/internal/respond/respond.go b/back/internal/respond/respond.go new file mode 100644 index 0000000..c1e5b6a --- /dev/null +++ b/back/internal/respond/respond.go @@ -0,0 +1,18 @@ +package respond + +import ( + "encoding/json" + "net/http" +) + +// JSON writes a JSON body with the given status code. +func JSON(w http.ResponseWriter, status int, payload any) { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(status) + _ = json.NewEncoder(w).Encode(payload) +} + +// Error writes a JSON error body: {"error": "message"}. +func Error(w http.ResponseWriter, status int, msg string) { + JSON(w, status, map[string]string{"error": msg}) +} diff --git a/back/internal/search/demo.go b/back/internal/search/demo.go new file mode 100644 index 0000000..65cbde1 --- /dev/null +++ b/back/internal/search/demo.go @@ -0,0 +1,114 @@ +package search + +import ( + "context" + "time" + + "github.com/google/uuid" + + "github.com/anotherhadi/iknowyou/internal/tools" +) + +func ptr(n int) *int { return &n } + +func (m *Manager) InjectDemoSearches() { + now := time.Now() + + _, cancel1 := context.WithCancel(context.Background()) + s1 := &Search{ + ID: uuid.NewString(), + Target: "john.doe@example.com", + InputType: tools.InputTypeEmail, + Profile: "default", + StartedAt: now.Add(-2 * time.Hour), + PlannedTools: []ToolStatus{ + {Name: "user-scanner", ResultCount: ptr(10)}, + {Name: "github-recon", ResultCount: ptr(3)}, + }, + cancelFn: cancel1, + status: StatusDone, + finishedAt: now.Add(-2*time.Hour + 18*time.Second), + } + s1.events = []tools.Event{ + {Tool: "user-scanner", Type: tools.EventTypeOutput, Payload: "\x1b[35m== ADULT SITES ==\x1b[0m\n" + + "\x1b[0m \x1b[32m[✔] Xvideos (john.doe@example.com): Registered\x1b[0m\n" + + "\x1b[0m \x1b[32m[✔] Pornhub (john.doe@example.com): Registered\x1b[0m\n" + + "\x1b[0m\n" + + "\x1b[35m== CREATOR SITES ==\x1b[0m\n" + + "\x1b[0m \x1b[32m[✔] Adobe (john.doe@example.com): Registered\x1b[0m\n" + + "\x1b[0m\n" + + "\x1b[35m== MUSIC SITES ==\x1b[0m\n" + + "\x1b[0m \x1b[32m[✔] Spotify (john.doe@example.com): Registered\x1b[0m\n" + + "\x1b[0m\n" + + "\x1b[35m== LEARNING SITES ==\x1b[0m\n" + + "\x1b[0m \x1b[32m[✔] Duolingo (john.doe@example.com): Registered\x1b[0m\n" + + "\x1b[0m \x1b[32m[✔] Vedantu (john.doe@example.com): Registered\n \x1b[36m└── Phone: +9112****07\x1b[0m\n" + + "\x1b[0m\n" + + "\x1b[35m== SOCIAL SITES ==\x1b[0m\n" + + "\x1b[0m \x1b[32m[✔] Pinterest (john.doe@example.com): Registered\x1b[0m\n" + + "\x1b[0m \x1b[32m[✔] Facebook (john.doe@example.com): Registered\x1b[0m\n" + + "\x1b[0m\n" + + "\x1b[35m== GAMING SITES ==\x1b[0m\n" + + "\x1b[0m \x1b[32m[✔] Chess.com (john.doe@example.com): Registered\x1b[0m\n" + + "\x1b[0m\n" + + "\x1b[35m== SHOPPING SITES ==\x1b[0m\n" + + "\x1b[0m \x1b[32m[✔] Amazon (john.doe@example.com): Registered\x1b[0m\n"}, + {Tool: "user-scanner", Type: tools.EventTypeDone}, + {Tool: "github-recon", Type: tools.EventTypeOutput, Payload: "\x1b[1;38;2;113;135;253m👤 Commits author\x1b[0m\n\n" + + " \x1b[38;2;125;125;125mName:\x1b[0m \x1b[38;2;166;227;161m\"fastHack2025\"\x1b[0m\n" + + " \x1b[38;2;125;125;125mEmail:\x1b[0m \x1b[38;2;166;227;161m\"john.doe@example.com\"\x1b[0m\n" + + " \x1b[38;2;125;125;125mUsername:\x1b[0m \x1b[38;2;166;227;161m\"Unknown\"\x1b[0m\n" + + " \x1b[38;2;125;125;125mOccurrences:\x1b[0m \x1b[38;2;166;227;161m36\x1b[0m\n\n" + + " \x1b[38;2;125;125;125mName:\x1b[0m \x1b[38;2;166;227;161m\"Anthony\"\x1b[0m\n" + + " \x1b[38;2;125;125;125mEmail:\x1b[0m \x1b[38;2;166;227;161m\"john.doe@example.com\"\x1b[0m\n" + + " \x1b[38;2;125;125;125mUsername:\x1b[0m \x1b[38;2;166;227;161m\"Unknown\"\x1b[0m\n" + + " \x1b[38;2;125;125;125mOccurrences:\x1b[0m \x1b[38;2;166;227;161m52\x1b[0m\n\n" + + " \x1b[38;2;125;125;125mName:\x1b[0m \x1b[38;2;166;227;161m\"Gill\"\x1b[0m\n" + + " \x1b[38;2;125;125;125mEmail:\x1b[0m \x1b[38;2;166;227;161m\"john.doe@example.com\"\x1b[0m\n" + + " \x1b[38;2;125;125;125mUsername:\x1b[0m \x1b[38;2;166;227;161m\"johndoe\"\x1b[0m\n" + + " \x1b[38;2;125;125;125mOccurrences:\x1b[0m \x1b[38;2;166;227;161m60\x1b[0m"}, + {Tool: "github-recon", Type: tools.EventTypeDone}, + } + + _, cancel2 := context.WithCancel(context.Background()) + s2 := &Search{ + ID: uuid.NewString(), + Target: "janedoe", + InputType: tools.InputTypeUsername, + Profile: "default", + StartedAt: now.Add(-30 * time.Minute), + PlannedTools: []ToolStatus{ + {Name: "user-scanner", ResultCount: ptr(10)}, + {Name: "github-recon", ResultCount: ptr(0)}, + }, + cancelFn: cancel2, + status: StatusDone, + finishedAt: now.Add(-30*time.Minute + 22*time.Second), + } + s2.events = []tools.Event{ + {Tool: "user-scanner", Type: tools.EventTypeOutput, Payload: "\x1b[35m== SOCIAL SITES ==\x1b[0m\n" + + "\x1b[0m \x1b[32m[✔] Reddit (janedoe): Found\x1b[0m\n" + + "\x1b[0m \x1b[32m[✔] Threads (janedoe): Found\x1b[0m\n" + + "\x1b[0m \x1b[32m[✔] X (twitter) (janedoe): Found\x1b[0m\n" + + "\x1b[0m \x1b[32m[✔] Youtube (janedoe): Found\x1b[0m\n" + + "\x1b[0m \x1b[32m[✔] Telegram (janedoe): Found\x1b[0m\n" + + "\x1b[0m \x1b[32m[✔] Tiktok (janedoe): Found\x1b[0m\n" + + "\x1b[0m \x1b[32m[✔] Instagram (janedoe): Found\x1b[0m\n" + + "\x1b[0m\n" + + "\x1b[35m== GAMING SITES ==\x1b[0m\n" + + "\x1b[0m \x1b[32m[✔] Chess.com (janedoe): Found\x1b[0m\n" + + "\x1b[0m \x1b[32m[✔] Roblox (janedoe): Found\x1b[0m\n" + + "\x1b[0m\n" + + "\x1b[35m== EMAIL SITES ==\x1b[0m\n" + + "\x1b[0m \x1b[32m[✔] Protonmail (janedoe): Found\x1b[0m"}, + {Tool: "user-scanner", Type: tools.EventTypeDone}, + {Tool: "github-recon", Type: tools.EventTypeOutput, Payload: "\x1b[1;38;2;113;135;253m👤 User informations\x1b[0m\n\n" + + " \x1b[38;2;125;125;125mNo data found\x1b[0m"}, + {Tool: "github-recon", Type: tools.EventTypeDone}, + } + + m.mu.Lock() + m.searches[s1.ID] = s1 + m.searches[s2.ID] = s2 + m.mu.Unlock() +} diff --git a/back/internal/search/manager.go b/back/internal/search/manager.go new file mode 100644 index 0000000..d39ded5 --- /dev/null +++ b/back/internal/search/manager.go @@ -0,0 +1,274 @@ +package search + +import ( + "context" + "fmt" + "reflect" + "sync" + "time" + + "github.com/google/uuid" + + "github.com/anotherhadi/iknowyou/config" + "github.com/anotherhadi/iknowyou/internal/tools" +) + +type Manager struct { + mu sync.RWMutex + searches map[string]*Search + + configPath string + factories []func() tools.ToolRunner + searchTTL time.Duration + cleanupInterval time.Duration + + done chan struct{} // closed by Stop() +} + +func NewManager(configPath string, factories []func() tools.ToolRunner, searchTTL, cleanupInterval time.Duration) *Manager { + m := &Manager{ + searches: make(map[string]*Search), + configPath: configPath, + factories: factories, + searchTTL: searchTTL, + cleanupInterval: cleanupInterval, + done: make(chan struct{}), + } + go m.cleanupLoop() + return m +} + +func (m *Manager) Stop() { + close(m.done) +} + +func (m *Manager) Start( + parentCtx context.Context, + target string, + inputType tools.InputType, + profileName string, +) (*Search, error) { + + // "default" is the canonical UI name for the no-filter profile. + if profileName == "default" { + profileName = "" + } + + cfg, err := config.Load(m.configPath) + if err != nil { + return nil, fmt.Errorf("manager: loading config: %w", err) + } + + activeTools, statuses, err := m.instantiate(cfg, inputType, profileName) + if err != nil { + return nil, err + } + + ctx, cancel := context.WithCancel(parentCtx) + + s := &Search{ + ID: uuid.NewString(), + Target: target, + InputType: inputType, + Profile: profileName, + StartedAt: time.Now(), + PlannedTools: statuses, + cancelFn: cancel, + status: StatusRunning, + } + + m.mu.Lock() + m.searches[s.ID] = s + m.mu.Unlock() + + go m.runAll(ctx, s, activeTools) + + return s, nil +} + +func (m *Manager) Get(id string) (*Search, error) { + return m.get(id) +} + +func (m *Manager) All() []*Search { + m.mu.RLock() + defer m.mu.RUnlock() + out := make([]*Search, 0, len(m.searches)) + for _, s := range m.searches { + out = append(out, s) + } + return out +} + +func (m *Manager) Delete(id string) error { + s, err := m.get(id) + if err != nil { + return err + } + s.Cancel() + + m.mu.Lock() + delete(m.searches, id) + m.mu.Unlock() + return nil +} + +func (m *Manager) cleanupLoop() { + ticker := time.NewTicker(m.cleanupInterval) + defer ticker.Stop() + for { + select { + case <-ticker.C: + m.purgeExpired() + case <-m.done: + return + } + } +} + +func (m *Manager) purgeExpired() { + now := time.Now() + m.mu.Lock() + defer m.mu.Unlock() + for id, s := range m.searches { + ft := s.FinishedAt() + if ft.IsZero() { + continue // still running + } + if now.Sub(ft) > m.searchTTL { + delete(m.searches, id) + } + } +} + +func (m *Manager) instantiate(cfg *config.Config, inputType tools.InputType, profileName string) ([]tools.ToolRunner, []ToolStatus, error) { + allNames := make([]string, len(m.factories)) + allInstances := make([]tools.ToolRunner, len(m.factories)) + for i, factory := range m.factories { + t := factory() + allNames[i] = t.Name() + allInstances[i] = t + } + + activeNames, err := cfg.ActiveTools(profileName, allNames) + if err != nil { + return nil, nil, err + } + activeSet := make(map[string]struct{}, len(activeNames)) + for _, n := range activeNames { + activeSet[n] = struct{}{} + } + + var runners []tools.ToolRunner + var statuses []ToolStatus + + for _, tool := range allInstances { + if _, ok := activeSet[tool.Name()]; !ok { + continue + } + if !acceptsInputType(tool, inputType) { + continue + } + + if a, ok := tool.(tools.AvailabilityChecker); ok { + if available, reason := a.Available(); !available { + statuses = append(statuses, ToolStatus{ + Name: tool.Name(), + Skipped: true, + Reason: reason, + }) + continue + } + } + + if c, ok := tool.(tools.Configurable); ok { + if err := cfg.DecodeEffective(tool.Name(), profileName, c.ConfigPtr()); err != nil { + return nil, nil, fmt.Errorf("manager: configuring tool %q: %w", tool.Name(), err) + } + + if d, ok := tool.(tools.ConfigDescriber); ok { + if missing, fieldName := missingRequiredField(d.ConfigFields()); missing { + statuses = append(statuses, ToolStatus{ + Name: tool.Name(), + Skipped: true, + Reason: fmt.Sprintf("missing required config field: %s", fieldName), + }) + continue + } + } + } + + statuses = append(statuses, ToolStatus{Name: tool.Name()}) + runners = append(runners, tool) + } + + return runners, statuses, nil +} + +func (m *Manager) runAll(ctx context.Context, s *Search, runners []tools.ToolRunner) { + var wg sync.WaitGroup + for _, tool := range runners { + wg.Add(1) + go func(t tools.ToolRunner) { + defer wg.Done() + m.runOne(ctx, s, t) + }(tool) + } + wg.Wait() + s.markDone() +} + +func (m *Manager) runOne(ctx context.Context, s *Search, tool tools.ToolRunner) { + out := make(chan tools.Event) + go func() { + _ = tool.Run(ctx, s.Target, s.InputType, out) + }() + + var count int + var hasCount bool + for e := range out { + if e.Type == tools.EventTypeCount { + if n, ok := e.Payload.(int); ok { + count += n + hasCount = true + } + continue + } + s.append(e) + } + + if hasCount { + s.setToolResultCount(tool.Name(), count) + } +} + +func (m *Manager) get(id string) (*Search, error) { + m.mu.RLock() + defer m.mu.RUnlock() + s, ok := m.searches[id] + if !ok { + return nil, fmt.Errorf("search %q not found", id) + } + return s, nil +} + +func acceptsInputType(tool tools.ToolRunner, inputType tools.InputType) bool { + for _, t := range tool.InputTypes() { + if t == inputType { + return true + } + } + return false +} + +func missingRequiredField(fields []tools.ConfigField) (missing bool, fieldName string) { + for _, f := range fields { + if !f.Required { + continue + } + if f.Value == nil || reflect.DeepEqual(f.Value, reflect.Zero(reflect.TypeOf(f.Value)).Interface()) { + return true, f.Name + } + } + return false, "" +} diff --git a/back/internal/search/search.go b/back/internal/search/search.go new file mode 100644 index 0000000..67679c9 --- /dev/null +++ b/back/internal/search/search.go @@ -0,0 +1,97 @@ +package search + +import ( + "context" + "sync" + "time" + + "github.com/anotherhadi/iknowyou/internal/tools" +) + +type Status string + +const ( + StatusRunning Status = "running" + StatusDone Status = "done" + StatusCancelled Status = "cancelled" +) + +type ToolStatus struct { + Name string `json:"name"` + Skipped bool `json:"skipped"` + Reason string `json:"reason,omitempty"` // non-empty only when Skipped is true + ResultCount *int `json:"result_count,omitempty"` // nil = pending, 0 = no results +} + +type Search struct { + ID string + Target string + InputType tools.InputType + Profile string + StartedAt time.Time + PlannedTools []ToolStatus + + cancelFn context.CancelFunc + + mu sync.RWMutex + events []tools.Event + status Status + finishedAt time.Time +} + +func (s *Search) Events() []tools.Event { + s.mu.RLock() + defer s.mu.RUnlock() + out := make([]tools.Event, len(s.events)) + copy(out, s.events) + return out +} + +func (s *Search) Status() Status { + s.mu.RLock() + defer s.mu.RUnlock() + return s.status +} + +func (s *Search) FinishedAt() time.Time { + s.mu.RLock() + defer s.mu.RUnlock() + return s.finishedAt +} + +func (s *Search) Cancel() { + s.mu.Lock() + if s.status == StatusRunning { + s.status = StatusCancelled + s.finishedAt = time.Now() + } + s.mu.Unlock() + + s.cancelFn() +} + +func (s *Search) setToolResultCount(toolName string, count int) { + s.mu.Lock() + defer s.mu.Unlock() + for i, t := range s.PlannedTools { + if t.Name == toolName { + s.PlannedTools[i].ResultCount = &count + return + } + } +} + +func (s *Search) append(e tools.Event) { + s.mu.Lock() + defer s.mu.Unlock() + s.events = append(s.events, e) +} + +func (s *Search) markDone() { + s.mu.Lock() + defer s.mu.Unlock() + if s.status == StatusRunning { + s.status = StatusDone + s.finishedAt = time.Now() + } +} diff --git a/back/internal/tools/breachdirectory/tool.go b/back/internal/tools/breachdirectory/tool.go new file mode 100644 index 0000000..3ed2cc5 --- /dev/null +++ b/back/internal/tools/breachdirectory/tool.go @@ -0,0 +1,162 @@ +package breachdirectory + +import ( + "context" + "encoding/json" + "fmt" + "io" + "net/http" + "strings" + + "github.com/anotherhadi/iknowyou/internal/tools" +) + +const ( + name = "breachdirectory" + description = "Data breach search via BreachDirectory — checks if an email, username, or phone appears in known data breaches and returns exposed passwords/hashes." + link = "https://breachdirectory.org" + icon = "" +) + +type Config struct { + APIKey string `yaml:"api_key" iky:"desc=RapidAPI key for BreachDirectory (required — get one at rapidapi.com/rohan-patra/api/breachdirectory);required=true"` +} + +type Runner struct { + cfg Config +} + +func New() tools.ToolRunner { + cfg := Config{} + tools.ApplyDefaults(&cfg) + return &Runner{cfg: cfg} +} + +func (r *Runner) Name() string { return name } +func (r *Runner) Description() string { return description } +func (r *Runner) Link() string { return link } +func (r *Runner) Icon() string { return icon } + +func (r *Runner) InputTypes() []tools.InputType { + return []tools.InputType{ + tools.InputTypeEmail, + tools.InputTypeUsername, + } +} + +func (r *Runner) ConfigPtr() interface{} { return &r.cfg } + +func (r *Runner) ConfigFields() []tools.ConfigField { + return tools.ReflectConfigFields(r.cfg) +} + +type bdResponse struct { + Success bool `json:"success"` + Found int `json:"found"` + Result json.RawMessage `json:"result"` +} + +type bdEntry struct { + Email string `json:"email"` + Password string `json:"password"` + Hash string `json:"hash"` + SHA1 string `json:"sha1"` + Sources string `json:"sources"` + HasPassword bool `json:"has_password"` +} + +func (r *Runner) Run(ctx context.Context, target string, _ tools.InputType, out chan<- tools.Event) error { + defer close(out) + + req, err := http.NewRequestWithContext(ctx, http.MethodGet, + "https://breachdirectory.p.rapidapi.com/?func=auto&term="+target, nil) + if err != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: err.Error()} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + req.Header.Set("X-RapidAPI-Key", r.cfg.APIKey) + req.Header.Set("X-RapidAPI-Host", "breachdirectory.p.rapidapi.com") + req.Header.Set("Accept", "application/json") + + resp, err := http.DefaultClient.Do(req) + if err != nil { + if ctx.Err() != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "scan cancelled"} + } else { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: err.Error()} + } + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + defer resp.Body.Close() + + body, err := io.ReadAll(resp.Body) + if err != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "failed to read response"} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + if resp.StatusCode == http.StatusUnauthorized || resp.StatusCode == http.StatusForbidden { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "invalid or exhausted API key"} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + if resp.StatusCode != http.StatusOK { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: fmt.Sprintf("API error %d: %s", resp.StatusCode, string(body))} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + var parsed bdResponse + if err := json.Unmarshal(body, &parsed); err != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "failed to parse response"} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + if !parsed.Success || parsed.Found == 0 { + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + var entries []bdEntry + if err := json.Unmarshal(parsed.Result, &entries); err != nil || len(entries) == 0 { + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + var sb strings.Builder + sb.WriteString(fmt.Sprintf("Found in %d breach record(s)\n\n", parsed.Found)) + + for _, entry := range entries { + if entry.Sources != "" { + sb.WriteString(fmt.Sprintf("Source: %s\n", entry.Sources)) + } + if entry.Password != "" { + sb.WriteString(fmt.Sprintf("Password: %s\n", entry.Password)) + } + if entry.Hash != "" { + sb.WriteString(fmt.Sprintf("Hash: %s\n", entry.Hash)) + } + if entry.SHA1 != "" { + sb.WriteString(fmt.Sprintf("SHA1: %s\n", entry.SHA1)) + } + sb.WriteString("\n") + } + + out <- tools.Event{Tool: name, Type: tools.EventTypeOutput, Payload: strings.TrimSpace(sb.String())} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: parsed.Found} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil +} diff --git a/back/internal/tools/config_reflect.go b/back/internal/tools/config_reflect.go new file mode 100644 index 0000000..2167d5c --- /dev/null +++ b/back/internal/tools/config_reflect.go @@ -0,0 +1,155 @@ +package tools + +import ( + "reflect" + "strconv" + "strings" +) + +// ReflectConfigFields builds []ConfigField from a struct using yaml/iky tags. +// iky tag format: iky:"desc=...;default=...;required=true;options=a|b|c" +func ReflectConfigFields(cfg any) []ConfigField { + v := reflect.ValueOf(cfg) + if v.Kind() == reflect.Ptr { + v = v.Elem() + } + t := v.Type() + + var fields []ConfigField + for i := range t.NumField() { + sf := t.Field(i) + fv := v.Field(i) + + yamlKey := sf.Tag.Get("yaml") + if yamlKey == "" || yamlKey == "-" { + continue + } + yamlKey = strings.SplitN(yamlKey, ",", 2)[0] + + meta := parseIkyTag(sf.Tag.Get("iky")) + + fieldType := goKindToString(sf.Type.Kind()) + if len(meta.options) > 0 { + fieldType = "enum" + } + + fields = append(fields, ConfigField{ + Name: yamlKey, + Type: fieldType, + Required: meta.required, + Description: meta.desc, + Default: parseTypedDefault(meta.rawDefault, sf.Type.Kind()), + Value: fv.Interface(), + Options: meta.options, + }) + } + return fields +} + +// ApplyDefaults sets each field to its iky default if the field is zero. +func ApplyDefaults(cfg any) { + v := reflect.ValueOf(cfg) + if v.Kind() == reflect.Ptr { + v = v.Elem() + } + t := v.Type() + + for i := range t.NumField() { + sf := t.Field(i) + fv := v.Field(i) + + if !fv.CanSet() { + continue + } + meta := parseIkyTag(sf.Tag.Get("iky")) + if meta.rawDefault == "" || !fv.IsZero() { + continue + } + applyDefault(fv, sf.Type.Kind(), meta.rawDefault) + } +} + +type ikyMeta struct { + desc string + rawDefault string + required bool + options []string +} + +func parseIkyTag(tag string) ikyMeta { + var m ikyMeta + for _, part := range strings.Split(tag, ";") { + k, v, ok := strings.Cut(strings.TrimSpace(part), "=") + if !ok { + continue + } + switch strings.TrimSpace(k) { + case "desc": + m.desc = strings.TrimSpace(v) + case "default": + m.rawDefault = strings.TrimSpace(v) + case "required": + m.required = strings.TrimSpace(v) == "true" + case "options": + for _, opt := range strings.Split(v, "|") { + if o := strings.TrimSpace(opt); o != "" { + m.options = append(m.options, o) + } + } + } + } + return m +} + +func goKindToString(k reflect.Kind) string { + switch k { + case reflect.String: + return "string" + case reflect.Bool: + return "bool" + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return "int" + case reflect.Float32, reflect.Float64: + return "float" + default: + return k.String() + } +} + +func parseTypedDefault(raw string, k reflect.Kind) any { + if raw == "" { + return nil + } + switch k { + case reflect.Bool: + b, _ := strconv.ParseBool(raw) + return b + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + n, _ := strconv.ParseInt(raw, 10, 64) + return int(n) + case reflect.Float32, reflect.Float64: + f, _ := strconv.ParseFloat(raw, 64) + return f + default: + return raw + } +} + +func applyDefault(fv reflect.Value, k reflect.Kind, raw string) { + switch k { + case reflect.String: + fv.SetString(raw) + case reflect.Bool: + if b, err := strconv.ParseBool(raw); err == nil { + fv.SetBool(b) + } + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + if n, err := strconv.ParseInt(raw, 10, 64); err == nil { + fv.SetInt(n) + } + case reflect.Float32, reflect.Float64: + if f, err := strconv.ParseFloat(raw, 64); err == nil { + fv.SetFloat(f) + } + } +} diff --git a/back/internal/tools/crtsh/tool.go b/back/internal/tools/crtsh/tool.go new file mode 100644 index 0000000..f7a80f0 --- /dev/null +++ b/back/internal/tools/crtsh/tool.go @@ -0,0 +1,137 @@ +package crtsh + +import ( + "context" + "encoding/json" + "fmt" + "io" + "net/http" + "net/url" + "sort" + "strings" + + "github.com/anotherhadi/iknowyou/internal/tools" +) + +const ( + name = "crt.sh" + description = "SSL/TLS certificate transparency log search via crt.sh — enumerates subdomains and certificates issued for a domain." + link = "https://crt.sh" + icon = "" +) + +type Runner struct{} + +func New() tools.ToolRunner { + return &Runner{} +} + +func (r *Runner) Name() string { return name } +func (r *Runner) Description() string { return description } +func (r *Runner) Link() string { return link } +func (r *Runner) Icon() string { return icon } + +func (r *Runner) InputTypes() []tools.InputType { + return []tools.InputType{tools.InputTypeDomain} +} + +type crtEntry struct { + IssuerName string `json:"issuer_name"` + CommonName string `json:"common_name"` + NameValue string `json:"name_value"` + NotBefore string `json:"not_before"` + NotAfter string `json:"not_after"` + EntryTimestamp string `json:"entry_timestamp"` +} + +func (r *Runner) Run(ctx context.Context, target string, _ tools.InputType, out chan<- tools.Event) error { + defer close(out) + + params := url.Values{} + params.Set("q", "%."+target) + params.Set("output", "json") + apiURL := "https://crt.sh/?" + params.Encode() + req, err := http.NewRequestWithContext(ctx, http.MethodGet, apiURL, nil) + if err != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: err.Error()} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + req.Header.Set("Accept", "application/json") + req.Header.Set("User-Agent", "Mozilla/5.0 (compatible; crtsh-scanner/1.0)") + + resp, err := http.DefaultClient.Do(req) + if err != nil { + if ctx.Err() != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "scan cancelled"} + } else { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: err.Error()} + } + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + defer resp.Body.Close() + + body, err := io.ReadAll(resp.Body) + if err != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "failed to read response"} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + if resp.StatusCode != http.StatusOK { + msg := fmt.Sprintf("API error %d", resp.StatusCode) + if resp.StatusCode == http.StatusBadGateway || resp.StatusCode == http.StatusServiceUnavailable || resp.StatusCode == http.StatusGatewayTimeout { + msg = fmt.Sprintf("crt.sh is temporarily unavailable (%d), try again later", resp.StatusCode) + } + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: msg} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + var entries []crtEntry + if err := json.Unmarshal(body, &entries); err != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "failed to parse response"} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + if len(entries) == 0 { + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + // Deduplicate subdomains from name_value fields + seen := make(map[string]struct{}) + for _, e := range entries { + for _, line := range strings.Split(e.NameValue, "\n") { + line = strings.TrimSpace(line) + if line != "" && !strings.HasPrefix(line, "*") { + seen[line] = struct{}{} + } + } + } + + subdomains := make([]string, 0, len(seen)) + for s := range seen { + subdomains = append(subdomains, s) + } + sort.Strings(subdomains) + + var sb strings.Builder + sb.WriteString(fmt.Sprintf("Found %d unique subdomains across %d certificate entries\n\n", len(subdomains), len(entries))) + for _, s := range subdomains { + sb.WriteString(s + "\n") + } + + out <- tools.Event{Tool: name, Type: tools.EventTypeOutput, Payload: strings.TrimSpace(sb.String())} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: len(subdomains)} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil +} diff --git a/back/internal/tools/dig/tool.go b/back/internal/tools/dig/tool.go new file mode 100644 index 0000000..0e5f135 --- /dev/null +++ b/back/internal/tools/dig/tool.go @@ -0,0 +1,90 @@ +package dig + +import ( + "context" + "fmt" + "os/exec" + "strings" + + "github.com/anotherhadi/iknowyou/internal/tools" +) + +const ( + name = "dig" + description = "DNS lookup querying A, AAAA, MX, NS, TXT, and SOA records for a domain, or reverse DNS (PTR) for an IP." + link = "https://linux.die.net/man/1/dig" + icon = "" +) + +var recordTypes = []string{"A", "AAAA", "MX", "NS", "TXT", "SOA"} + +type Runner struct{} + +func New() tools.ToolRunner { return &Runner{} } + +func (r *Runner) Name() string { return name } +func (r *Runner) Description() string { return description } +func (r *Runner) Link() string { return link } +func (r *Runner) Icon() string { return icon } + +func (r *Runner) InputTypes() []tools.InputType { + return []tools.InputType{tools.InputTypeDomain, tools.InputTypeIP} +} + +func (r *Runner) Available() (bool, string) { + if _, err := exec.LookPath("dig"); err != nil { + return false, "dig binary not found in PATH" + } + return true, "" +} + +func (r *Runner) Dependencies() []string { return []string{"dig"} } + +func (r *Runner) Run(ctx context.Context, target string, inputType tools.InputType, out chan<- tools.Event) error { + defer close(out) + + var sb strings.Builder + totalCount := 0 + + if inputType == tools.InputTypeIP { + cmd := exec.CommandContext(ctx, "dig", "-x", target, "+noall", "+answer") + output, err := cmd.Output() + if err != nil && ctx.Err() != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "scan cancelled"} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + result := strings.TrimSpace(string(output)) + if result != "" { + sb.WriteString("=== Reverse DNS (PTR) ===\n") + sb.WriteString(result) + totalCount += strings.Count(result, "\n") + 1 + } + } else { + for _, rtype := range recordTypes { + if ctx.Err() != nil { + break + } + cmd := exec.CommandContext(ctx, "dig", target, rtype, "+noall", "+answer") + output, _ := cmd.Output() + result := strings.TrimSpace(string(output)) + if result == "" { + continue + } + sb.WriteString(fmt.Sprintf("=== %s ===\n", rtype)) + sb.WriteString(result) + sb.WriteString("\n\n") + totalCount += strings.Count(result, "\n") + 1 + } + } + + if ctx.Err() != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "scan cancelled"} + } else if sb.Len() > 0 { + out <- tools.Event{Tool: name, Type: tools.EventTypeOutput, Payload: strings.TrimSpace(sb.String())} + } + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: totalCount} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil +} diff --git a/back/internal/tools/github-recon/tool.go b/back/internal/tools/github-recon/tool.go new file mode 100644 index 0000000..707954b --- /dev/null +++ b/back/internal/tools/github-recon/tool.go @@ -0,0 +1,91 @@ +package githubrecon + +import ( + "context" + "os/exec" + "strings" + + "github.com/anotherhadi/iknowyou/internal/tools" +) + +const ( + name = "github-recon" + description = "GitHub OSINT reconnaissance tool. Gathers profile info, social links, organisations, SSH/GPG keys, commits, and more from a GitHub username or email." + link = "https://github.com/anotherhadi/nur-osint" + icon = "github" +) + +type Config struct { + Token string `yaml:"token" iky:"desc=GitHub personal access token (enables higher rate limits and more data);required=false"` + Deepscan bool `yaml:"deepscan" iky:"desc=Enable deep scan (slower - scans all repositories for authors/emails);default=false"` + SpoofEmail bool `yaml:"spoof_email" iky:"desc=Include email spoofing check (email mode only, requires token);default=false"` +} + +type Runner struct { + cfg Config +} + +func New() tools.ToolRunner { + cfg := Config{} + tools.ApplyDefaults(&cfg) + return &Runner{cfg: cfg} +} + +func (r *Runner) Name() string { return name } +func (r *Runner) Description() string { return description } +func (r *Runner) Link() string { return link } +func (r *Runner) Icon() string { return icon } + +func (r *Runner) InputTypes() []tools.InputType { + return []tools.InputType{ + tools.InputTypeUsername, + tools.InputTypeEmail, + } +} + +func (r *Runner) ConfigPtr() interface{} { return &r.cfg } + +func (r *Runner) ConfigFields() []tools.ConfigField { + return tools.ReflectConfigFields(r.cfg) +} + +func (r *Runner) Available() (bool, string) { + if _, err := exec.LookPath("github-recon"); err != nil { + return false, "github-recon binary not found in PATH" + } + return true, "" +} + +func (r *Runner) Dependencies() []string { return []string{"github-recon"} } + +func (r *Runner) Run(ctx context.Context, target string, inputType tools.InputType, out chan<- tools.Event) error { + defer close(out) + + args := []string{target} + if r.cfg.Token != "" { + args = append(args, "--token", r.cfg.Token) + } + if r.cfg.Deepscan { + args = append(args, "--deepscan") + } + if r.cfg.SpoofEmail && inputType == tools.InputTypeEmail { + args = append(args, "--spoof-email") + } + + cmd := exec.CommandContext(ctx, "github-recon", args...) + output, err := tools.RunWithPTY(ctx, cmd) + + // Remove banner + output = tools.RemoveFirstLines(output, 10) + + count := 0 + if err != nil && ctx.Err() != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "scan cancelled"} + } else if output != "" { + out <- tools.Event{Tool: name, Type: tools.EventTypeOutput, Payload: output} + count = strings.Count(output, "Username:") + } + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: count} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil +} diff --git a/back/internal/tools/gravatar-recon/tool.go b/back/internal/tools/gravatar-recon/tool.go new file mode 100644 index 0000000..e1445f6 --- /dev/null +++ b/back/internal/tools/gravatar-recon/tool.go @@ -0,0 +1,55 @@ +package gravatarrecon + +import ( + "context" + "os/exec" + + "github.com/anotherhadi/iknowyou/internal/tools" +) + +const ( + name = "gravatar-recon" + description = "Gravatar OSINT tool. Extracts public profile data from a Gravatar account: name, bio, location, employment, social accounts, phone, and more." + link = "https://github.com/anotherhadi/gravatar-recon" + icon = "" +) + +type Runner struct{} + +func New() tools.ToolRunner { return &Runner{} } + +func (r *Runner) Name() string { return name } +func (r *Runner) Description() string { return description } +func (r *Runner) Link() string { return link } +func (r *Runner) Icon() string { return icon } + +func (r *Runner) InputTypes() []tools.InputType { + return []tools.InputType{tools.InputTypeEmail} +} + +func (r *Runner) Available() (bool, string) { + if _, err := exec.LookPath("gravatar-recon"); err != nil { + return false, "gravatar-recon binary not found in PATH" + } + return true, "" +} + +func (r *Runner) Dependencies() []string { return []string{"gravatar-recon"} } + +func (r *Runner) Run(ctx context.Context, target string, _ tools.InputType, out chan<- tools.Event) error { + defer close(out) + + cmd := exec.CommandContext(ctx, "gravatar-recon", "--silent", target) + output, err := tools.RunWithPTY(ctx, cmd) + + count := 0 + if err != nil && ctx.Err() != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "scan cancelled"} + } else if output != "" { + out <- tools.Event{Tool: name, Type: tools.EventTypeOutput, Payload: output} + count = 1 + } + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: count} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil +} diff --git a/back/internal/tools/ipinfo/tool.go b/back/internal/tools/ipinfo/tool.go new file mode 100644 index 0000000..ea8ad1f --- /dev/null +++ b/back/internal/tools/ipinfo/tool.go @@ -0,0 +1,133 @@ +package ipinfo + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "strings" + + "github.com/anotherhadi/iknowyou/internal/tools" +) + +const ( + name = "ipinfo" + description = "IP geolocation via ipinfo.io — returns city, region, country, coordinates, ASN/org, timezone, and hostname." + link = "https://ipinfo.io" + icon = "" +) + +type Config struct { + Token string `yaml:"token" iky:"desc=ipinfo.io API token (optional — free tier allows 50k req/month without one);required=false"` +} + +type Runner struct { + cfg Config +} + +func New() tools.ToolRunner { + cfg := Config{} + tools.ApplyDefaults(&cfg) + return &Runner{cfg: cfg} +} + +func (r *Runner) Name() string { return name } +func (r *Runner) Description() string { return description } +func (r *Runner) Link() string { return link } +func (r *Runner) Icon() string { return icon } + +func (r *Runner) InputTypes() []tools.InputType { + return []tools.InputType{tools.InputTypeIP} +} + +func (r *Runner) ConfigPtr() interface{} { return &r.cfg } + +func (r *Runner) ConfigFields() []tools.ConfigField { + return tools.ReflectConfigFields(r.cfg) +} + +type ipinfoResponse struct { + IP string `json:"ip"` + Hostname string `json:"hostname"` + City string `json:"city"` + Region string `json:"region"` + Country string `json:"country"` + Loc string `json:"loc"` + Org string `json:"org"` + Postal string `json:"postal"` + Timezone string `json:"timezone"` + Bogon bool `json:"bogon"` +} + +func (r *Runner) Run(ctx context.Context, target string, _ tools.InputType, out chan<- tools.Event) error { + defer close(out) + + url := fmt.Sprintf("https://ipinfo.io/%s/json", target) + if r.cfg.Token != "" { + url += "?token=" + r.cfg.Token + } + + req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) + if err != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: err.Error()} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + req.Header.Set("Accept", "application/json") + + resp, err := http.DefaultClient.Do(req) + if err != nil { + if ctx.Err() != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "scan cancelled"} + } else { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: err.Error()} + } + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + defer resp.Body.Close() + + var info ipinfoResponse + if err := json.NewDecoder(resp.Body).Decode(&info); err != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "failed to parse response"} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + if info.Bogon { + out <- tools.Event{Tool: name, Type: tools.EventTypeOutput, Payload: fmt.Sprintf("IP: %s\nType: Bogon/Private address", info.IP)} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 1} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + var sb strings.Builder + field := func(label, value string) { + if value != "" { + sb.WriteString(fmt.Sprintf("%-12s %s\n", label+":", value)) + } + } + + field("IP", info.IP) + field("Hostname", info.Hostname) + field("City", info.City) + field("Region", info.Region) + field("Country", info.Country) + field("Coordinates", info.Loc) + field("Postal", info.Postal) + field("Timezone", info.Timezone) + field("Org/ASN", info.Org) + + result := strings.TrimSpace(sb.String()) + count := 0 + if result != "" { + out <- tools.Event{Tool: name, Type: tools.EventTypeOutput, Payload: result} + count = 1 + } + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: count} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil +} diff --git a/back/internal/tools/leakcheck/tool.go b/back/internal/tools/leakcheck/tool.go new file mode 100644 index 0000000..09aefcc --- /dev/null +++ b/back/internal/tools/leakcheck/tool.go @@ -0,0 +1,178 @@ +package leakcheck + +import ( + "context" + "encoding/json" + "fmt" + "io" + "net/http" + "strings" + + "github.com/anotherhadi/iknowyou/internal/tools" +) + +const ( + name = "leakcheck" + description = "Data breach lookup via LeakCheck.io — searches 7B+ leaked records for email addresses, usernames, and phone numbers across hundreds of breaches." + link = "https://leakcheck.io" + icon = "" +) + +type Config struct { + APIKey string `yaml:"api_key" iky:"desc=LeakCheck API key (required — get one at leakcheck.io);required=true"` +} + +type Runner struct { + cfg Config +} + +func New() tools.ToolRunner { + cfg := Config{} + tools.ApplyDefaults(&cfg) + return &Runner{cfg: cfg} +} + +func (r *Runner) Name() string { return name } +func (r *Runner) Description() string { return description } +func (r *Runner) Link() string { return link } +func (r *Runner) Icon() string { return icon } + +func (r *Runner) InputTypes() []tools.InputType { + return []tools.InputType{ + tools.InputTypeEmail, + tools.InputTypeUsername, + tools.InputTypePhone, + } +} + +func (r *Runner) ConfigPtr() interface{} { return &r.cfg } + +func (r *Runner) ConfigFields() []tools.ConfigField { + return tools.ReflectConfigFields(r.cfg) +} + +type leakCheckResponse struct { + Success bool `json:"success"` + Found int `json:"found"` + Result []struct { + Email string `json:"email"` + Username string `json:"username"` + Phone string `json:"phone"` + Password string `json:"password"` + Hash string `json:"hash"` + Sources []string `json:"sources"` + Fields []string `json:"fields"` + } `json:"result"` + Error string `json:"error"` +} + +func (r *Runner) Run(ctx context.Context, target string, inputType tools.InputType, out chan<- tools.Event) error { + defer close(out) + + queryType := "auto" + switch inputType { + case tools.InputTypeEmail: + queryType = "email" + case tools.InputTypeUsername: + queryType = "login" + case tools.InputTypePhone: + queryType = "phone" + } + + url := fmt.Sprintf("https://leakcheck.io/api/v2/query/%s?type=%s", target, queryType) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) + if err != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: err.Error()} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + req.Header.Set("X-API-Key", r.cfg.APIKey) + req.Header.Set("Accept", "application/json") + + resp, err := http.DefaultClient.Do(req) + if err != nil { + if ctx.Err() != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "scan cancelled"} + } else { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: err.Error()} + } + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + defer resp.Body.Close() + + body, err := io.ReadAll(resp.Body) + if err != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "failed to read response"} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + if resp.StatusCode == http.StatusUnauthorized || resp.StatusCode == http.StatusForbidden { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "invalid or exhausted API key"} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + var result leakCheckResponse + if err := json.Unmarshal(body, &result); err != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "failed to parse response"} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + if !result.Success { + msg := result.Error + if msg == "" { + msg = "API returned failure" + } + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: msg} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + if result.Found == 0 || len(result.Result) == 0 { + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + var sb strings.Builder + sb.WriteString(fmt.Sprintf("Found in %d breach(es)\n\n", result.Found)) + + for _, entry := range result.Result { + if len(entry.Sources) > 0 { + sb.WriteString(fmt.Sprintf("Sources: %s\n", strings.Join(entry.Sources, ", "))) + } + if entry.Email != "" { + sb.WriteString(fmt.Sprintf(" Email: %s\n", entry.Email)) + } + if entry.Username != "" { + sb.WriteString(fmt.Sprintf(" Username: %s\n", entry.Username)) + } + if entry.Phone != "" { + sb.WriteString(fmt.Sprintf(" Phone: %s\n", entry.Phone)) + } + if entry.Password != "" { + sb.WriteString(fmt.Sprintf(" Password: %s\n", entry.Password)) + } + if entry.Hash != "" { + sb.WriteString(fmt.Sprintf(" Hash: %s\n", entry.Hash)) + } + if len(entry.Fields) > 0 { + sb.WriteString(fmt.Sprintf(" Fields: %s\n", strings.Join(entry.Fields, ", "))) + } + sb.WriteString("\n") + } + + out <- tools.Event{Tool: name, Type: tools.EventTypeOutput, Payload: strings.TrimSpace(sb.String())} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: result.Found} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil +} diff --git a/back/internal/tools/maigret/tool.go b/back/internal/tools/maigret/tool.go new file mode 100644 index 0000000..20fe4f3 --- /dev/null +++ b/back/internal/tools/maigret/tool.go @@ -0,0 +1,89 @@ +package maigret + +import ( + "context" + "os/exec" + "regexp" + "strconv" + "strings" + + "github.com/anotherhadi/iknowyou/internal/tools" +) + +const ( + name = "maigret" + description = "Username OSINT across 3000+ sites. Searches social networks, forums, and online platforms for an account matching the target username." + link = "https://github.com/soxoj/maigret" + icon = "" +) + +var accountsRe = regexp.MustCompile(`returned (\d+) accounts`) + +type Config struct { + AllSites bool `yaml:"all_sites" iky:"desc=Scan all sites in the database instead of just the top 500 (slower);default=false"` +} + +type Runner struct { + cfg Config +} + +func New() tools.ToolRunner { + cfg := Config{} + tools.ApplyDefaults(&cfg) + return &Runner{cfg: cfg} +} + +func (r *Runner) Name() string { return name } +func (r *Runner) Description() string { return description } +func (r *Runner) Link() string { return link } +func (r *Runner) Icon() string { return icon } + +func (r *Runner) InputTypes() []tools.InputType { + return []tools.InputType{tools.InputTypeUsername} +} + +func (r *Runner) ConfigPtr() interface{} { return &r.cfg } + +func (r *Runner) ConfigFields() []tools.ConfigField { + return tools.ReflectConfigFields(r.cfg) +} + +func (r *Runner) Available() (bool, string) { + if _, err := exec.LookPath("maigret"); err != nil { + return false, "maigret binary not found in PATH" + } + return true, "" +} + +func (r *Runner) Dependencies() []string { return []string{"maigret"} } + +func (r *Runner) Run(ctx context.Context, target string, _ tools.InputType, out chan<- tools.Event) error { + defer close(out) + + args := []string{"--no-progressbar", target} + if r.cfg.AllSites { + args = append(args, "-a") + } + + cmd := exec.CommandContext(ctx, "maigret", args...) + output, err := tools.RunWithPTY(ctx, cmd) + + // Crop at Python traceback (NixOS read-only store error — results are unaffected) + if idx := strings.Index(output, "Traceback (most recent call last)"); idx != -1 { + output = strings.TrimSpace(output[:idx]) + } + + count := 0 + if err != nil && ctx.Err() != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "scan cancelled"} + } else if output != "" { + // Parse count from summary line: "returned N accounts" + if m := accountsRe.FindStringSubmatch(output); len(m) == 2 { + count, _ = strconv.Atoi(m[1]) + } + out <- tools.Event{Tool: name, Type: tools.EventTypeOutput, Payload: output} + } + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: count} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil +} diff --git a/back/internal/tools/ptyrun.go b/back/internal/tools/ptyrun.go new file mode 100644 index 0000000..563fc60 --- /dev/null +++ b/back/internal/tools/ptyrun.go @@ -0,0 +1,28 @@ +package tools + +import ( + "context" + "io" + "os/exec" + "regexp" + + "github.com/creack/pty" +) + +// oscRe strips OSC terminal sequences emitted by the PTY (e.g. colour queries). +var oscRe = regexp.MustCompile(`\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)`) + +// RunWithPTY runs cmd under a pseudo-terminal (preserving ANSI colours) and +// returns the full output once the process exits. +func RunWithPTY(ctx context.Context, cmd *exec.Cmd) (string, error) { + ptmx, err := pty.StartWithSize(cmd, &pty.Winsize{Rows: 50, Cols: 220}) + if err != nil { + return "", err + } + defer func() { _ = ptmx.Close() }() + + output, _ := io.ReadAll(ptmx) + _ = cmd.Wait() + + return oscRe.ReplaceAllString(string(output), ""), ctx.Err() +} diff --git a/back/internal/tools/tools.go b/back/internal/tools/tools.go new file mode 100644 index 0000000..53a0cb8 --- /dev/null +++ b/back/internal/tools/tools.go @@ -0,0 +1,72 @@ +package tools + +import "context" + +type EventType string + +const ( + EventTypeOutput EventType = "output" // raw ANSI text, payload is a plain string + EventTypeError EventType = "error" + EventTypeCount EventType = "count" // payload is int, additive — emit once or multiple times from Run + EventTypeDone EventType = "done" +) + +type InputType string + +const ( + InputTypeEmail InputType = "email" + InputTypeUsername InputType = "username" + InputTypePhone InputType = "phone" + InputTypeIP InputType = "ip" + InputTypeDomain InputType = "domain" + InputTypePassword InputType = "password" + InputTypeName InputType = "name" +) + +type Event struct { + Tool string `json:"tool"` + Type EventType `json:"type"` + Payload interface{} `json:"payload,omitempty"` +} + +// ToolRunner is the core interface every tool must implement. +type ToolRunner interface { + Name() string + Description() string + Link() string // URL to source or documentation + Icon() string // Simple Icons slug, empty if none + + InputTypes() []InputType + + // Run executes the tool and sends Events to out. Must close out when done. + // inputType indicates what kind of value target is (email, username, ...). + Run(ctx context.Context, target string, inputType InputType, out chan<- Event) error +} + +type Configurable interface { + ConfigPtr() interface{} +} + +type ConfigField struct { + Name string `json:"name"` + Type string `json:"type"` // "string", "bool", "int", "float", "enum" + Required bool `json:"required"` + Default any `json:"default"` + Description string `json:"description"` + Value any `json:"value"` + Options []string `json:"options,omitempty"` // non-empty when Type == "enum" +} + +type ConfigDescriber interface { + ConfigFields() []ConfigField +} + +// AvailabilityChecker is implemented by tools that require an external binary. +type AvailabilityChecker interface { + Available() (ok bool, reason string) +} + +type DependencyLister interface { + Dependencies() []string +} + diff --git a/back/internal/tools/user-scanner/tool.go b/back/internal/tools/user-scanner/tool.go new file mode 100644 index 0000000..3be8766 --- /dev/null +++ b/back/internal/tools/user-scanner/tool.go @@ -0,0 +1,95 @@ +package userscanner + +import ( + "context" + "os/exec" + "strings" + + "github.com/anotherhadi/iknowyou/internal/tools" +) + +const ( + name = "user-scanner" + description = "🕵️‍♂️ (2-in-1) Email & Username OSINT suite. Analyzes 195+ scan vectors (95+ email / 100+ username) for security research, investigations, and digital footprinting." + link = "https://github.com/kaifcodec/user-scanner" + icon = "" +) + +type Config struct { + AllowLoud bool `yaml:"allow_loud" iky:"desc=Enable scanning sites that may send emails/notifications (password resets, etc.);default=false"` + OnlyFound bool `yaml:"only_found" iky:"desc=Only show sites where the username/email was found;default=true"` +} + +type Runner struct { + cfg Config +} + +func New() tools.ToolRunner { + cfg := Config{} + tools.ApplyDefaults(&cfg) + return &Runner{cfg: cfg} +} + +func (r *Runner) Name() string { return name } +func (r *Runner) Description() string { return description } +func (r *Runner) Link() string { return link } +func (r *Runner) Icon() string { return icon } + +func (r *Runner) InputTypes() []tools.InputType { + return []tools.InputType{ + tools.InputTypeEmail, + tools.InputTypeUsername, + } +} + +func (r *Runner) ConfigPtr() interface{} { return &r.cfg } + +func (r *Runner) ConfigFields() []tools.ConfigField { + return tools.ReflectConfigFields(r.cfg) +} + +func (r *Runner) Available() (bool, string) { + if _, err := exec.LookPath("user-scanner"); err != nil { + return false, "user-scanner binary not found in PATH" + } + return true, "" +} + +func (r *Runner) Dependencies() []string { return []string{"user-scanner"} } + +func (r *Runner) Run(ctx context.Context, target string, inputType tools.InputType, out chan<- tools.Event) error { + defer close(out) + + args := make([]string, 0, 6) + switch inputType { + case tools.InputTypeEmail: + args = append(args, "-e", target) + default: + args = append(args, "-u", target) + } + if r.cfg.AllowLoud { + args = append(args, "--allow-loud") + } + if r.cfg.OnlyFound { + args = append(args, "--only-found") + } + + cmd := exec.CommandContext(ctx, "user-scanner", args...) + output, err := tools.RunWithPTY(ctx, cmd) + + // Removing banner + output = tools.RemoveFirstLines(output, 8) + // count = + output = tools.CropAfterExclude(output, "[i] Scan complete.") + + count := 0 + if err != nil && ctx.Err() != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "scan cancelled"} + } else if output != "" { + out <- tools.Event{Tool: name, Type: tools.EventTypeOutput, Payload: output} + count = strings.Count(output, "[✔]") + } + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: count} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil +} diff --git a/back/internal/tools/utils.go b/back/internal/tools/utils.go new file mode 100644 index 0000000..6bdc0bd --- /dev/null +++ b/back/internal/tools/utils.go @@ -0,0 +1,61 @@ +package tools + +import "strings" + +// RemoveFirstLines removes the first n lines. Returns "" if n >= total lines. +func RemoveFirstLines(input string, n int) string { + lines := strings.Split(input, "\n") + if n >= len(lines) { + return "" + } + return strings.Join(lines[n:], "\n") +} + +// RemoveLastLines removes the last n lines. Returns "" if n >= total lines. +func RemoveLastLines(input string, n int) string { + lines := strings.Split(input, "\n") + if n >= len(lines) { + return "" + } + return strings.Join(lines[:len(lines)-n], "\n") +} + +// CropBefore removes everything before the first occurrence of y (inclusive of y). +// Returns input unchanged if y is not found. +func CropBefore(input string, y string) string { + idx := strings.Index(input, y) + if idx == -1 { + return input + } + return input[idx:] +} + +// CropAfter removes everything after the last occurrence of y (inclusive of y). +// Returns input unchanged if y is not found. +func CropAfter(input string, y string) string { + idx := strings.LastIndex(input, y) + if idx == -1 { + return input + } + return input[:idx+len(y)] +} + +// CropBeforeExclude removes everything before and including the first occurrence of y. +// Returns input unchanged if y is not found. +func CropBeforeExclude(input string, y string) string { + idx := strings.Index(input, y) + if idx == -1 { + return input + } + return input[idx+len(y):] +} + +// CropAfterExclude removes everything from the last occurrence of y onwards. +// Returns input unchanged if y is not found. +func CropAfterExclude(input string, y string) string { + idx := strings.LastIndex(input, y) + if idx == -1 { + return input + } + return input[:idx] +} diff --git a/back/internal/tools/wappalyzer/tool.go b/back/internal/tools/wappalyzer/tool.go new file mode 100644 index 0000000..966a3fa --- /dev/null +++ b/back/internal/tools/wappalyzer/tool.go @@ -0,0 +1,126 @@ +package wappalyzer + +import ( + "context" + "fmt" + "io" + "net/http" + "sort" + "strings" + + wappalyzergo "github.com/projectdiscovery/wappalyzergo" + + "github.com/anotherhadi/iknowyou/internal/tools" +) + +const ( + name = "wappalyzer" + description = "Web technology fingerprinting via wappalyzergo — detects CMS, frameworks, web servers, analytics, CDN, and 1500+ other technologies running on a domain." + link = "https://github.com/projectdiscovery/wappalyzergo" + icon = "wappalyzer" +) + +type Runner struct { + wappalyze *wappalyzergo.Wappalyze +} + +func New() tools.ToolRunner { + w, _ := wappalyzergo.New() + return &Runner{wappalyze: w} +} + +func (r *Runner) Name() string { return name } +func (r *Runner) Description() string { return description } +func (r *Runner) Link() string { return link } +func (r *Runner) Icon() string { return icon } + +func (r *Runner) InputTypes() []tools.InputType { + return []tools.InputType{tools.InputTypeDomain} +} + +func (r *Runner) Run(ctx context.Context, target string, _ tools.InputType, out chan<- tools.Event) error { + defer close(out) + + // Try HTTPS first, fall back to HTTP + var ( + resp *http.Response + body []byte + err error + ) + for _, scheme := range []string{"https", "http"} { + targetURL := fmt.Sprintf("%s://%s", scheme, target) + req, reqErr := http.NewRequestWithContext(ctx, http.MethodGet, targetURL, nil) + if reqErr != nil { + continue + } + req.Header.Set("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)") + + resp, err = http.DefaultClient.Do(req) + if err == nil { + defer resp.Body.Close() + body, err = io.ReadAll(resp.Body) + if err == nil { + break + } + } + if ctx.Err() != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "scan cancelled"} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + } + + if err != nil || resp == nil { + msg := "failed to connect to target" + if err != nil { + msg = err.Error() + } + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: msg} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + fingerprints := r.wappalyze.FingerprintWithInfo(resp.Header, body) + if len(fingerprints) == 0 { + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + // Group by category + byCategory := make(map[string][]string) + for tech, info := range fingerprints { + cats := info.Categories + if len(cats) == 0 { + cats = []string{"Other"} + } + for _, cat := range cats { + byCategory[cat] = append(byCategory[cat], tech) + } + } + + cats := make([]string, 0, len(byCategory)) + for c := range byCategory { + cats = append(cats, c) + } + sort.Strings(cats) + + var sb strings.Builder + sb.WriteString(fmt.Sprintf("Detected %d technologies\n\n", len(fingerprints))) + for _, cat := range cats { + techs := byCategory[cat] + sort.Strings(techs) + sb.WriteString(fmt.Sprintf("%s:\n", cat)) + for _, t := range techs { + sb.WriteString(fmt.Sprintf(" - %s\n", t)) + } + sb.WriteString("\n") + } + + out <- tools.Event{Tool: name, Type: tools.EventTypeOutput, Payload: strings.TrimSpace(sb.String())} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: len(fingerprints)} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil +} diff --git a/back/internal/tools/whois/tool.go b/back/internal/tools/whois/tool.go new file mode 100644 index 0000000..3131aaa --- /dev/null +++ b/back/internal/tools/whois/tool.go @@ -0,0 +1,62 @@ +package whois + +import ( + "context" + "os/exec" + "strings" + + "github.com/anotherhadi/iknowyou/internal/tools" +) + +const ( + name = "whois" + description = "WHOIS lookup for domain registration and IP ownership information." + link = "https://en.wikipedia.org/wiki/WHOIS" + icon = "" +) + +type Runner struct{} + +func New() tools.ToolRunner { return &Runner{} } + +func (r *Runner) Name() string { return name } +func (r *Runner) Description() string { return description } +func (r *Runner) Link() string { return link } +func (r *Runner) Icon() string { return icon } + +func (r *Runner) InputTypes() []tools.InputType { + return []tools.InputType{tools.InputTypeDomain, tools.InputTypeIP} +} + +func (r *Runner) Available() (bool, string) { + if _, err := exec.LookPath("whois"); err != nil { + return false, "whois binary not found in PATH" + } + return true, "" +} + +func (r *Runner) Dependencies() []string { return []string{"whois"} } + +func (r *Runner) Run(ctx context.Context, target string, _ tools.InputType, out chan<- tools.Event) error { + defer close(out) + + cmd := exec.CommandContext(ctx, "whois", target) + output, err := cmd.Output() + + if err != nil && ctx.Err() != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "scan cancelled"} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + result := strings.TrimSpace(string(output)) + count := 0 + if result != "" { + out <- tools.Event{Tool: name, Type: tools.EventTypeOutput, Payload: result} + count = 1 + } + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: count} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil +} diff --git a/back/internal/tools/whoisfreaks/tool.go b/back/internal/tools/whoisfreaks/tool.go new file mode 100644 index 0000000..29dfe84 --- /dev/null +++ b/back/internal/tools/whoisfreaks/tool.go @@ -0,0 +1,232 @@ +package whoisfreaks + +import ( + "context" + "fmt" + "io" + "net/http" + "net/url" + "strings" + "time" + + "github.com/anotherhadi/iknowyou/internal/tools" + "github.com/tidwall/gjson" +) + +const ( + name = "whoisfreaks" + description = "Reverse WHOIS lookup via WhoisFreaks — find all domains registered by an email, owner name, or keyword across 3.6B+ WHOIS records." + link = "https://whoisfreaks.com" + icon = "" +) + +type Config struct { + APIKey string `yaml:"api_key" iky:"desc=WhoisFreaks API key (required — free account at whoisfreaks.com);required=true"` +} + +type Runner struct { + cfg Config +} + +func New() tools.ToolRunner { + cfg := Config{} + tools.ApplyDefaults(&cfg) + return &Runner{cfg: cfg} +} + +func (r *Runner) Name() string { return name } +func (r *Runner) Description() string { return description } +func (r *Runner) Link() string { return link } +func (r *Runner) Icon() string { return icon } + +func (r *Runner) InputTypes() []tools.InputType { + return []tools.InputType{ + tools.InputTypeEmail, + tools.InputTypeName, + tools.InputTypeDomain, + } +} + +func (r *Runner) ConfigPtr() interface{} { return &r.cfg } + +func (r *Runner) ConfigFields() []tools.ConfigField { + return tools.ReflectConfigFields(r.cfg) +} + + +var skipKeys = map[string]bool{ + "num": true, "status": true, "query_time": true, "update_date": true, + "iana_id": true, "whois_server": true, "handle": true, + "zip_code": true, "country_code": true, "mailing_address": true, + "phone_number": true, "administrative_contact": true, "technical_contact": true, +} + +func prettyResult(r gjson.Result, depth int) string { + indent := strings.Repeat(" ", depth) + var sb strings.Builder + r.ForEach(func(key, val gjson.Result) bool { + k := key.String() + if skipKeys[k] { + return true + } + switch val.Type { + case gjson.JSON: + if val.IsArray() { + arr := val.Array() + if len(arr) == 0 { + return true + } + sb.WriteString(fmt.Sprintf("%s%s:\n", indent, k)) + for _, item := range arr { + if item.Type == gjson.JSON { + sb.WriteString(fmt.Sprintf("%s -\n", indent)) + sb.WriteString(prettyResult(item, depth+2)) + } else { + sb.WriteString(fmt.Sprintf("%s - %s\n", indent, item.String())) + } + } + } else { + sb.WriteString(fmt.Sprintf("%s%s:\n", indent, k)) + sb.WriteString(prettyResult(val, depth+1)) + } + default: + v := val.String() + if v == "" { + return true + } + sb.WriteString(fmt.Sprintf("%s%s: %s\n", indent, k, v)) + } + return true + }) + return sb.String() +} + +func doRequest(ctx context.Context, req *http.Request) ([]byte, *http.Response, error) { + for { + resp, err := http.DefaultClient.Do(req) + if err != nil { + return nil, nil, err + } + body, err := io.ReadAll(resp.Body) + resp.Body.Close() + if err != nil { + return nil, resp, err + } + if resp.StatusCode != http.StatusTooManyRequests { + return body, resp, nil + } + select { + case <-ctx.Done(): + return nil, resp, ctx.Err() + case <-time.After(60 * time.Second): + } + // Rebuild the request since the body was consumed + req2, err := http.NewRequestWithContext(ctx, req.Method, req.URL.String(), nil) + if err != nil { + return nil, resp, err + } + req2.Header = req.Header + req = req2 + } +} + +func (r *Runner) Run(ctx context.Context, target string, inputType tools.InputType, out chan<- tools.Event) error { + defer close(out) + + params := url.Values{} + params.Set("whois", "reverse") + params.Set("apiKey", r.cfg.APIKey) + + switch inputType { + case tools.InputTypeEmail: + params.Set("email", target) + case tools.InputTypeName: + params.Set("owner", target) + case tools.InputTypeDomain: + params.Set("keyword", target) + default: + params.Set("keyword", target) + } + + req, err := http.NewRequestWithContext(ctx, + http.MethodGet, + "https://api.whoisfreaks.com/v1.0/whois?"+params.Encode(), + nil, + ) + if err != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: err.Error()} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + req.Header.Set("Accept", "application/json") + + body, resp, err := doRequest(ctx, req) + if err != nil { + if ctx.Err() != nil { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "scan cancelled"} + } else { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: err.Error()} + } + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + if resp.StatusCode == http.StatusUnauthorized || resp.StatusCode == http.StatusForbidden { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "invalid or exhausted API key"} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + if resp.StatusCode == http.StatusNotFound { + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + if resp.StatusCode != http.StatusOK { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: fmt.Sprintf("API error %d: %s", resp.StatusCode, string(body))} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + j := gjson.ParseBytes(body) + + if !j.Get("whois_domains_historical").Exists() { + out <- tools.Event{Tool: name, Type: tools.EventTypeError, Payload: "unexpected response format"} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + domains := j.Get("whois_domains_historical").Array() + if len(domains) == 0 { + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: 0} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil + } + + total := j.Get("total_Result").Int() + totalPages := j.Get("total_Pages").Int() + currentPage := j.Get("current_Page").Int() + + var sb strings.Builder + sb.WriteString(fmt.Sprintf("Found %d domain(s)", total)) + if totalPages > 1 { + sb.WriteString(fmt.Sprintf(" across %d pages (showing page %d)", totalPages, currentPage)) + } + sb.WriteString("\n\n") + + for _, d := range domains { + sb.WriteString(prettyResult(d, 0)) + sb.WriteString("\n") + } + + out <- tools.Event{Tool: name, Type: tools.EventTypeOutput, Payload: strings.TrimSpace(sb.String())} + out <- tools.Event{Tool: name, Type: tools.EventTypeCount, Payload: int(total)} + out <- tools.Event{Tool: name, Type: tools.EventTypeDone} + return nil +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..17e2472 --- /dev/null +++ b/flake.lock @@ -0,0 +1,157 @@ +{ + "nodes": { + "bun2nix": { + "inputs": { + "flake-parts": "flake-parts", + "import-tree": "import-tree", + "nixpkgs": [ + "nixpkgs" + ], + "systems": "systems", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1770895533, + "narHash": "sha256-v3QaK9ugy9bN9RXDnjw0i2OifKmz2NnKM82agtqm/UY=", + "owner": "nix-community", + "repo": "bun2nix", + "rev": "c843f477b15f51151f8c6bcc886954699440a6e1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "bun2nix", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1769996383, + "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "import-tree": { + "locked": { + "lastModified": 1763762820, + "narHash": "sha256-ZvYKbFib3AEwiNMLsejb/CWs/OL/srFQ8AogkebEPF0=", + "owner": "vic", + "repo": "import-tree", + "rev": "3c23749d8013ec6daa1d7255057590e9ca726646", + "type": "github" + }, + "original": { + "owner": "vic", + "repo": "import-tree", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1775036866, + "narHash": "sha256-ZojAnPuCdy657PbTq5V0Y+AHKhZAIwSIT2cb8UgAz/U=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "6201e203d09599479a3b3450ed24fa81537ebc4e", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1769909678, + "narHash": "sha256-cBEymOf4/o3FD5AZnzC3J9hLbiZ+QDT/KDuyHXVJOpM=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "72716169fe93074c333e8d0173151350670b824c", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "nur-osint": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774035694, + "narHash": "sha256-PtORnAJ/SKeOwrPAjZ0LR00Pu8aDIzXO8H8v9CoM7zk=", + "owner": "anotherhadi", + "repo": "nur-osint", + "rev": "813351d47721d411441bb6221faf2c6163846946", + "type": "github" + }, + "original": { + "owner": "anotherhadi", + "repo": "nur-osint", + "type": "github" + } + }, + "root": { + "inputs": { + "bun2nix": "bun2nix", + "nixpkgs": "nixpkgs", + "nur-osint": "nur-osint" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "bun2nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1770228511, + "narHash": "sha256-wQ6NJSuFqAEmIg2VMnLdCnUc0b7vslUohqqGGD+Fyxk=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "337a4fe074be1042a35086f15481d763b8ddc0e7", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..72da7bd --- /dev/null +++ b/flake.nix @@ -0,0 +1,74 @@ +{ + description = "iknowyou: self-hosted OSINT aggregation platform"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + + bun2nix = { + url = "github:nix-community/bun2nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + nur-osint = { + url = "github:anotherhadi/nur-osint"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { + self, + nixpkgs, + bun2nix, + nur-osint, + }: let + system = "x86_64-linux"; + pkgs = import nixpkgs { + inherit system; + config.permittedInsecurePackages = ["python3.13-pypdf2-3.0.1"]; + }; + + backendPkg = import ./nix/backend.nix {inherit pkgs;}; + frontendPkg = import ./nix/frontend.nix {inherit pkgs bun2nix system;}; + + osintTools = with pkgs; [ + whois + dnsutils + maigret + nur-osint.packages.${system}.user-scanner + nur-osint.packages.${system}.github-recon + ]; + + ikyPkg = pkgs.symlinkJoin { + name = "iky"; + paths = [backendPkg] ++ osintTools; + nativeBuildInputs = [pkgs.makeWrapper]; + postBuild = '' + mkdir -p $out/share/iky + cp -r ${frontendPkg} $out/share/iky/frontend + wrapProgram $out/bin/server \ + --set-default IKY_FRONT_DIR $out/share/iky/frontend + ''; + }; + in { + nixosModules.default = import ./nix/module.nix; + + packages.${system} = { + backend = backendPkg; + frontend = frontendPkg; + default = ikyPkg; + }; + + devShells.${system}.default = pkgs.mkShell { + packages = with pkgs; + [ + bun2nix.packages.${system}.default + bun + go + air + just + ] + ++ osintTools; + IKY_CONFIG = "./config.yaml"; + }; + }; +} diff --git a/front/.gitignore b/front/.gitignore new file mode 100644 index 0000000..a91db0d --- /dev/null +++ b/front/.gitignore @@ -0,0 +1,27 @@ +# build output +dist/ +# generated types +.astro/ + +# dependencies +node_modules/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store + +result/ + +# code editors +.idea/ +.vscode/ diff --git a/front/astro.config.mjs b/front/astro.config.mjs new file mode 100644 index 0000000..223fec2 --- /dev/null +++ b/front/astro.config.mjs @@ -0,0 +1,52 @@ +// @ts-check +import { defineConfig } from "astro/config"; +import tailwindcss from "@tailwindcss/vite"; +import svelte from "@astrojs/svelte"; +import remarkGithubBlockquoteAlert from "remark-github-blockquote-alert"; +import { EventEmitter } from "events"; + +EventEmitter.defaultMaxListeners = 25; + +// https://astro.build/config +export default defineConfig({ + site: "https://iky.hadi.icu", + output: "static", + vite: { + resolve: { + noExternal: ["@lucide/svelte"], + }, + plugins: [ + tailwindcss(), + { + name: "shell-rewrite", + configureServer(server) { + server.middlewares.use((req, _res, next) => { + if (/^\/tools\/[^/]+\/?(\?.*)?$/.test(req.url)) req.url = "/tools/_"; + if (/^\/search\/[^/]+\/?(\?.*)?$/.test(req.url)) req.url = "/search/_"; + next(); + }); + }, + }, + ], + server: { + proxy: { + "/api": "http://localhost:8080", + }, + }, + }, + integrations: [svelte()], + markdown: { + remarkPlugins: [remarkGithubBlockquoteAlert], + shikiConfig: { + theme: "github-dark", + transformers: [ + { + name: "code-block-meta", + pre(node) { + node.properties["data-lang"] = this.options.lang || "text"; + }, + }, + ], + }, + }, +}); diff --git a/front/bun.lock b/front/bun.lock new file mode 100644 index 0000000..1882992 --- /dev/null +++ b/front/bun.lock @@ -0,0 +1,877 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "iknowyou", + "dependencies": { + "@astrojs/svelte": "8.0.4", + "@lucide/svelte": "^1.7.0", + "@tailwindcss/vite": "^4.2.1", + "ansi_up": "^6.0.6", + "astro": "6.1.2", + "dompurify": "^3.3.3", + "js-yaml": "^4.1.1", + "remark-github-blockquote-alert": "^2.1.0", + "svelte": "^5.53.12", + "tailwindcss": "^4.2.1", + "typescript": "^5.9.3", + }, + "devDependencies": { + "@tailwindcss/typography": "^0.5.19", + "@types/dompurify": "^3.2.0", + "@types/js-yaml": "^4.0.9", + "@types/node": "^25.5.0", + "concurrently": "^9.2.1", + "daisyui": "^5.5.19", + }, + }, + }, + "packages": { + "@astrojs/compiler": ["@astrojs/compiler@3.0.1", "", {}, "sha512-z97oYbdebO5aoWzuJ/8q5hLK232+17KcLZ7cJ8BCWk6+qNzVxn/gftC0KzMBUTD8WAaBkPpNSQK6PXLnNrZ0CA=="], + + "@astrojs/internal-helpers": ["@astrojs/internal-helpers@0.8.0", "", { "dependencies": { "picomatch": "^4.0.3" } }, "sha512-J56GrhEiV+4dmrGLPNOl2pZjpHXAndWVyiVDYGDuw6MWKpBSEMLdFxHzeM/6sqaknw9M+HFfHZAcvi3OfT3D/w=="], + + "@astrojs/markdown-remark": ["@astrojs/markdown-remark@7.1.0", "", { "dependencies": { "@astrojs/internal-helpers": "0.8.0", "@astrojs/prism": "4.0.1", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", "hast-util-to-text": "^4.0.2", "js-yaml": "^4.1.1", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", "rehype-stringify": "^10.0.1", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.2", "remark-smartypants": "^3.0.2", "retext-smartypants": "^6.2.0", "shiki": "^4.0.0", "smol-toml": "^1.6.0", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.1.0", "unist-util-visit-parents": "^6.0.2", "vfile": "^6.0.3" } }, "sha512-P+HnCsu2js3BoTc8kFmu+E9gOcFeMdPris75g+Zl4sY8+bBRbSQV6xzcBDbZ27eE7yBGEGQoqjpChx+KJYIPYQ=="], + + "@astrojs/prism": ["@astrojs/prism@4.0.1", "", { "dependencies": { "prismjs": "^1.30.0" } }, "sha512-nksZQVjlferuWzhPsBpQ1JE5XuKAf1id1/9Hj4a9KG4+ofrlzxUUwX4YGQF/SuDiuiGKEnzopGOt38F3AnVWsQ=="], + + "@astrojs/svelte": ["@astrojs/svelte@8.0.4", "", { "dependencies": { "@sveltejs/vite-plugin-svelte": "^6.2.4", "svelte2tsx": "^0.7.52", "vite": "^7.3.1" }, "peerDependencies": { "astro": "^6.0.0", "svelte": "^5.43.6", "typescript": "^5.3.3" } }, "sha512-c5m3chjtgxBE3BzsE/bZbCFBkLPhq041rm2WJFaTIKGwt/3xNm/5efYCj23reuAcBsl4iYS8n2UwkAHQJzhkZA=="], + + "@astrojs/telemetry": ["@astrojs/telemetry@3.3.0", "", { "dependencies": { "ci-info": "^4.2.0", "debug": "^4.4.0", "dlv": "^1.1.3", "dset": "^3.1.4", "is-docker": "^3.0.0", "is-wsl": "^3.1.0", "which-pm-runs": "^1.1.0" } }, "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ=="], + + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "@babel/parser": ["@babel/parser@7.29.2", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA=="], + + "@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + + "@capsizecss/unpack": ["@capsizecss/unpack@4.0.0", "", { "dependencies": { "fontkitten": "^1.0.0" } }, "sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA=="], + + "@clack/core": ["@clack/core@1.2.0", "", { "dependencies": { "fast-wrap-ansi": "^0.1.3", "sisteransi": "^1.0.5" } }, "sha512-qfxof/3T3t9DPU/Rj3OmcFyZInceqj/NVtO9rwIuJqCUgh32gwPjpFQQp/ben07qKlhpwq7GzfWpST4qdJ5Drg=="], + + "@clack/prompts": ["@clack/prompts@1.2.0", "", { "dependencies": { "@clack/core": "1.2.0", "fast-string-width": "^1.1.0", "fast-wrap-ansi": "^0.1.3", "sisteransi": "^1.0.5" } }, "sha512-4jmztR9fMqPMjz6H/UZXj0zEmE43ha1euENwkckKKel4XpSfokExPo5AiVStdHSAlHekz4d0CA/r45Ok1E4D3w=="], + + "@emnapi/runtime": ["@emnapi/runtime@1.9.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.4", "", { "os": "aix", "cpu": "ppc64" }, "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.27.4", "", { "os": "android", "cpu": "arm" }, "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.4", "", { "os": "android", "cpu": "arm64" }, "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.27.4", "", { "os": "android", "cpu": "x64" }, "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.4", "", { "os": "linux", "cpu": "arm" }, "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.4", "", { "os": "linux", "cpu": "ia32" }, "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.4", "", { "os": "linux", "cpu": "none" }, "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.4", "", { "os": "linux", "cpu": "none" }, "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.4", "", { "os": "linux", "cpu": "none" }, "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.4", "", { "os": "linux", "cpu": "x64" }, "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.4", "", { "os": "none", "cpu": "arm64" }, "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.4", "", { "os": "none", "cpu": "x64" }, "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.4", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.4", "", { "os": "openbsd", "cpu": "x64" }, "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ=="], + + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.4", "", { "os": "none", "cpu": "arm64" }, "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.4", "", { "os": "sunos", "cpu": "x64" }, "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.4", "", { "os": "win32", "cpu": "x64" }, "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg=="], + + "@img/colour": ["@img/colour@1.1.0", "", {}, "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ=="], + + "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.2.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w=="], + + "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.2.4" }, "os": "darwin", "cpu": "x64" }, "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw=="], + + "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.2.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g=="], + + "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.2.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg=="], + + "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.2.4", "", { "os": "linux", "cpu": "arm" }, "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A=="], + + "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw=="], + + "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.2.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA=="], + + "@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.2.4", "", { "os": "linux", "cpu": "none" }, "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA=="], + + "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.2.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ=="], + + "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw=="], + + "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw=="], + + "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg=="], + + "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.2.4" }, "os": "linux", "cpu": "arm" }, "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw=="], + + "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg=="], + + "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.2.4" }, "os": "linux", "cpu": "ppc64" }, "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA=="], + + "@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.2.4" }, "os": "linux", "cpu": "none" }, "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw=="], + + "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.2.4" }, "os": "linux", "cpu": "s390x" }, "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg=="], + + "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ=="], + + "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg=="], + + "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q=="], + + "@img/sharp-wasm32": ["@img/sharp-wasm32@0.34.5", "", { "dependencies": { "@emnapi/runtime": "^1.7.0" }, "cpu": "none" }, "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw=="], + + "@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.34.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g=="], + + "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.34.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg=="], + + "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.34.5", "", { "os": "win32", "cpu": "x64" }, "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@lucide/svelte": ["@lucide/svelte@1.7.0", "", { "peerDependencies": { "svelte": "^5" } }, "sha512-YytBKOUBGox7yWcykZnYxOkn5WpR5G1qYXLYXV/j1B79SOTTEKzB+s5yF5Rq9l9OkweDStNH2b4yTqfvhEhV8g=="], + + "@oslojs/encoding": ["@oslojs/encoding@1.1.0", "", {}, "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ=="], + + "@rollup/pluginutils": ["@rollup/pluginutils@5.3.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.60.1", "", { "os": "android", "cpu": "arm" }, "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.60.1", "", { "os": "android", "cpu": "arm64" }, "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.60.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.60.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.60.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.60.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.60.1", "", { "os": "linux", "cpu": "arm" }, "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.60.1", "", { "os": "linux", "cpu": "arm" }, "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.60.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.60.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA=="], + + "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.60.1", "", { "os": "linux", "cpu": "none" }, "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ=="], + + "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.60.1", "", { "os": "linux", "cpu": "none" }, "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw=="], + + "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.60.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw=="], + + "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.60.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.60.1", "", { "os": "linux", "cpu": "none" }, "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg=="], + + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.60.1", "", { "os": "linux", "cpu": "none" }, "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.60.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.60.1", "", { "os": "linux", "cpu": "x64" }, "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.60.1", "", { "os": "linux", "cpu": "x64" }, "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w=="], + + "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.60.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw=="], + + "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.60.1", "", { "os": "none", "cpu": "arm64" }, "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.60.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.60.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg=="], + + "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.60.1", "", { "os": "win32", "cpu": "x64" }, "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.60.1", "", { "os": "win32", "cpu": "x64" }, "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ=="], + + "@shikijs/core": ["@shikijs/core@4.0.2", "", { "dependencies": { "@shikijs/primitive": "4.0.2", "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw=="], + + "@shikijs/engine-javascript": ["@shikijs/engine-javascript@4.0.2", "", { "dependencies": { "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-7PW0Nm49DcoUIQEXlJhNNBHyoGMjalRETTCcjMqEaMoJRLljy1Bi/EGV3/qLBgLKQejdspiiYuHGQW6dX94Nag=="], + + "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@4.0.2", "", { "dependencies": { "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg=="], + + "@shikijs/langs": ["@shikijs/langs@4.0.2", "", { "dependencies": { "@shikijs/types": "4.0.2" } }, "sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg=="], + + "@shikijs/primitive": ["@shikijs/primitive@4.0.2", "", { "dependencies": { "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw=="], + + "@shikijs/themes": ["@shikijs/themes@4.0.2", "", { "dependencies": { "@shikijs/types": "4.0.2" } }, "sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA=="], + + "@shikijs/types": ["@shikijs/types@4.0.2", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg=="], + + "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], + + "@sveltejs/acorn-typescript": ["@sveltejs/acorn-typescript@1.0.9", "", { "peerDependencies": { "acorn": "^8.9.0" } }, "sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA=="], + + "@sveltejs/vite-plugin-svelte": ["@sveltejs/vite-plugin-svelte@6.2.4", "", { "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0", "deepmerge": "^4.3.1", "magic-string": "^0.30.21", "obug": "^2.1.0", "vitefu": "^1.1.1" }, "peerDependencies": { "svelte": "^5.0.0", "vite": "^6.3.0 || ^7.0.0" } }, "sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA=="], + + "@sveltejs/vite-plugin-svelte-inspector": ["@sveltejs/vite-plugin-svelte-inspector@5.0.2", "", { "dependencies": { "obug": "^2.1.0" }, "peerDependencies": { "@sveltejs/vite-plugin-svelte": "^6.0.0-next.0", "svelte": "^5.0.0", "vite": "^6.3.0 || ^7.0.0" } }, "sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig=="], + + "@tailwindcss/node": ["@tailwindcss/node@4.2.2", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.19.0", "jiti": "^2.6.1", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.2.2" } }, "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA=="], + + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.2.2", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.2.2", "@tailwindcss/oxide-darwin-arm64": "4.2.2", "@tailwindcss/oxide-darwin-x64": "4.2.2", "@tailwindcss/oxide-freebsd-x64": "4.2.2", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.2", "@tailwindcss/oxide-linux-arm64-gnu": "4.2.2", "@tailwindcss/oxide-linux-arm64-musl": "4.2.2", "@tailwindcss/oxide-linux-x64-gnu": "4.2.2", "@tailwindcss/oxide-linux-x64-musl": "4.2.2", "@tailwindcss/oxide-wasm32-wasi": "4.2.2", "@tailwindcss/oxide-win32-arm64-msvc": "4.2.2", "@tailwindcss/oxide-win32-x64-msvc": "4.2.2" } }, "sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg=="], + + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.2.2", "", { "os": "android", "cpu": "arm64" }, "sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg=="], + + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.2.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg=="], + + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.2.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw=="], + + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.2.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ=="], + + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2", "", { "os": "linux", "cpu": "arm" }, "sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ=="], + + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.2.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw=="], + + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.2.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag=="], + + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.2.2", "", { "os": "linux", "cpu": "x64" }, "sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg=="], + + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.2.2", "", { "os": "linux", "cpu": "x64" }, "sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ=="], + + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.2.2", "", { "dependencies": { "@emnapi/core": "^1.8.1", "@emnapi/runtime": "^1.8.1", "@emnapi/wasi-threads": "^1.1.0", "@napi-rs/wasm-runtime": "^1.1.1", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q=="], + + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.2.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ=="], + + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.2.2", "", { "os": "win32", "cpu": "x64" }, "sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA=="], + + "@tailwindcss/typography": ["@tailwindcss/typography@0.5.19", "", { "dependencies": { "postcss-selector-parser": "6.0.10" }, "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" } }, "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg=="], + + "@tailwindcss/vite": ["@tailwindcss/vite@4.2.2", "", { "dependencies": { "@tailwindcss/node": "4.2.2", "@tailwindcss/oxide": "4.2.2", "tailwindcss": "4.2.2" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7 || ^8" } }, "sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w=="], + + "@types/debug": ["@types/debug@4.1.13", "", { "dependencies": { "@types/ms": "*" } }, "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw=="], + + "@types/dompurify": ["@types/dompurify@3.2.0", "", { "dependencies": { "dompurify": "*" } }, "sha512-Fgg31wv9QbLDA0SpTOXO3MaxySc4DKGLi8sna4/Utjo4r3ZRPdCt4UQee8BWr+Q5z21yifghREPJGYaEOEIACg=="], + + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + + "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], + + "@types/js-yaml": ["@types/js-yaml@4.0.9", "", {}, "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg=="], + + "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], + + "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], + + "@types/nlcst": ["@types/nlcst@2.0.3", "", { "dependencies": { "@types/unist": "*" } }, "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA=="], + + "@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + + "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="], + + "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], + + "@typescript-eslint/types": ["@typescript-eslint/types@8.58.0", "", {}, "sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww=="], + + "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], + + "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], + + "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "ansi_up": ["ansi_up@6.0.6", "", {}, "sha512-yIa1x3Ecf8jWP4UWEunNjqNX6gzE4vg2gGz+xqRGY+TBSucnYp6RRdPV4brmtg6bQ1ljD48mZ5iGSEj7QEpRKA=="], + + "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + + "aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], + + "array-iterate": ["array-iterate@2.0.1", "", {}, "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg=="], + + "astro": ["astro@6.1.2", "", { "dependencies": { "@astrojs/compiler": "^3.0.1", "@astrojs/internal-helpers": "0.8.0", "@astrojs/markdown-remark": "7.1.0", "@astrojs/telemetry": "3.3.0", "@capsizecss/unpack": "^4.0.0", "@clack/prompts": "^1.1.0", "@oslojs/encoding": "^1.1.0", "@rollup/pluginutils": "^5.3.0", "aria-query": "^5.3.2", "axobject-query": "^4.1.0", "ci-info": "^4.4.0", "clsx": "^2.1.1", "common-ancestor-path": "^2.0.0", "cookie": "^1.1.1", "devalue": "^5.6.3", "diff": "^8.0.3", "dlv": "^1.1.3", "dset": "^3.1.4", "es-module-lexer": "^2.0.0", "esbuild": "^0.27.3", "flattie": "^1.1.1", "fontace": "~0.4.1", "github-slugger": "^2.0.0", "html-escaper": "3.0.3", "http-cache-semantics": "^4.2.0", "js-yaml": "^4.1.1", "magic-string": "^0.30.21", "magicast": "^0.5.2", "mrmime": "^2.0.1", "neotraverse": "^0.6.18", "obug": "^2.1.1", "p-limit": "^7.3.0", "p-queue": "^9.1.0", "package-manager-detector": "^1.6.0", "piccolore": "^0.1.3", "picomatch": "^4.0.3", "rehype": "^13.0.2", "semver": "^7.7.4", "shiki": "^4.0.2", "smol-toml": "^1.6.0", "svgo": "^4.0.1", "tinyclip": "^0.1.12", "tinyexec": "^1.0.4", "tinyglobby": "^0.2.15", "tsconfck": "^3.1.6", "ultrahtml": "^1.6.0", "unifont": "~0.7.4", "unist-util-visit": "^5.1.0", "unstorage": "^1.17.4", "vfile": "^6.0.3", "vite": "^7.3.1", "vitefu": "^1.1.2", "xxhash-wasm": "^1.1.0", "yargs-parser": "^22.0.0", "zod": "^4.3.6" }, "optionalDependencies": { "sharp": "^0.34.0" }, "bin": { "astro": "bin/astro.mjs" } }, "sha512-r3iIvmB6JvQxsdJLvapybKKq7Bojd1iQK6CCx5P55eRnXJIyUpHx/1UB/GdMm+em/lwaCUasxHCmIO0lCLV2uA=="], + + "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], + + "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], + + "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], + + "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], + + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="], + + "character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="], + + "character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="], + + "chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], + + "ci-info": ["ci-info@4.4.0", "", {}, "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg=="], + + "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], + + "commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], + + "common-ancestor-path": ["common-ancestor-path@2.0.0", "", {}, "sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng=="], + + "concurrently": ["concurrently@9.2.1", "", { "dependencies": { "chalk": "4.1.2", "rxjs": "7.8.2", "shell-quote": "1.8.3", "supports-color": "8.1.1", "tree-kill": "1.2.2", "yargs": "17.7.2" }, "bin": { "conc": "dist/bin/concurrently.js", "concurrently": "dist/bin/concurrently.js" } }, "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng=="], + + "cookie": ["cookie@1.1.1", "", {}, "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ=="], + + "cookie-es": ["cookie-es@1.2.3", "", {}, "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw=="], + + "crossws": ["crossws@0.3.5", "", { "dependencies": { "uncrypto": "^0.1.3" } }, "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA=="], + + "css-select": ["css-select@5.2.2", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw=="], + + "css-tree": ["css-tree@3.2.1", "", { "dependencies": { "mdn-data": "2.27.1", "source-map-js": "^1.2.1" } }, "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA=="], + + "css-what": ["css-what@6.2.2", "", {}, "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="], + + "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], + + "csso": ["csso@5.0.5", "", { "dependencies": { "css-tree": "~2.2.0" } }, "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ=="], + + "daisyui": ["daisyui@5.5.19", "", {}, "sha512-pbFAkl1VCEh/MPCeclKL61I/MqRIFFhNU7yiXoDDRapXN4/qNCoMxeCCswyxEEhqL5eiTTfwHvucFtOE71C9sA=="], + + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="], + + "dedent-js": ["dedent-js@1.0.1", "", {}, "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ=="], + + "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], + + "defu": ["defu@6.1.6", "", {}, "sha512-f8mefEW4WIVg4LckePx3mALjQSPQgFlg9U8yaPdlsbdYcHQyj9n2zL2LJEA52smeYxOvmd/nB7TpMtHGMTHcug=="], + + "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], + + "destr": ["destr@2.0.5", "", {}, "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="], + + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + + "devalue": ["devalue@5.6.4", "", {}, "sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA=="], + + "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], + + "diff": ["diff@8.0.4", "", {}, "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw=="], + + "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], + + "dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], + + "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], + + "domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], + + "dompurify": ["dompurify@3.3.3", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA=="], + + "domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], + + "dset": ["dset@3.1.4", "", {}, "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA=="], + + "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "enhanced-resolve": ["enhanced-resolve@5.20.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.0" } }, "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA=="], + + "entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], + + "es-module-lexer": ["es-module-lexer@2.0.0", "", {}, "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw=="], + + "esbuild": ["esbuild@0.27.4", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.4", "@esbuild/android-arm": "0.27.4", "@esbuild/android-arm64": "0.27.4", "@esbuild/android-x64": "0.27.4", "@esbuild/darwin-arm64": "0.27.4", "@esbuild/darwin-x64": "0.27.4", "@esbuild/freebsd-arm64": "0.27.4", "@esbuild/freebsd-x64": "0.27.4", "@esbuild/linux-arm": "0.27.4", "@esbuild/linux-arm64": "0.27.4", "@esbuild/linux-ia32": "0.27.4", "@esbuild/linux-loong64": "0.27.4", "@esbuild/linux-mips64el": "0.27.4", "@esbuild/linux-ppc64": "0.27.4", "@esbuild/linux-riscv64": "0.27.4", "@esbuild/linux-s390x": "0.27.4", "@esbuild/linux-x64": "0.27.4", "@esbuild/netbsd-arm64": "0.27.4", "@esbuild/netbsd-x64": "0.27.4", "@esbuild/openbsd-arm64": "0.27.4", "@esbuild/openbsd-x64": "0.27.4", "@esbuild/openharmony-arm64": "0.27.4", "@esbuild/sunos-x64": "0.27.4", "@esbuild/win32-arm64": "0.27.4", "@esbuild/win32-ia32": "0.27.4", "@esbuild/win32-x64": "0.27.4" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ=="], + + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], + + "esm-env": ["esm-env@1.2.2", "", {}, "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA=="], + + "esrap": ["esrap@2.2.4", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15", "@typescript-eslint/types": "^8.2.0" } }, "sha512-suICpxAmZ9A8bzJjEl/+rLJiDKC0X4gYWUxT6URAWBLvlXmtbZd5ySMu/N2ZGEtMCAmflUDPSehrP9BQcsGcSg=="], + + "estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + + "eventemitter3": ["eventemitter3@5.0.4", "", {}, "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw=="], + + "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], + + "fast-string-truncated-width": ["fast-string-truncated-width@1.2.1", "", {}, "sha512-Q9acT/+Uu3GwGj+5w/zsGuQjh9O1TyywhIwAxHudtWrgF09nHOPrvTLhQevPbttcxjr/SNN7mJmfOw/B1bXgow=="], + + "fast-string-width": ["fast-string-width@1.1.0", "", { "dependencies": { "fast-string-truncated-width": "^1.2.0" } }, "sha512-O3fwIVIH5gKB38QNbdg+3760ZmGz0SZMgvwJbA1b2TGXceKE6A2cOlfogh1iw8lr049zPyd7YADHy+B7U4W9bQ=="], + + "fast-wrap-ansi": ["fast-wrap-ansi@0.1.6", "", { "dependencies": { "fast-string-width": "^1.1.0" } }, "sha512-HlUwET7a5gqjURj70D5jl7aC3Zmy4weA1SHUfM0JFI0Ptq987NH2TwbBFLoERhfwk+E+eaq4EK3jXoT+R3yp3w=="], + + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + + "flattie": ["flattie@1.1.1", "", {}, "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ=="], + + "fontace": ["fontace@0.4.1", "", { "dependencies": { "fontkitten": "^1.0.2" } }, "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw=="], + + "fontkitten": ["fontkitten@1.0.3", "", { "dependencies": { "tiny-inflate": "^1.0.3" } }, "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], + + "github-slugger": ["github-slugger@2.0.0", "", {}, "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="], + + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + + "h3": ["h3@1.15.11", "", { "dependencies": { "cookie-es": "^1.2.3", "crossws": "^0.3.5", "defu": "^6.1.6", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", "node-mock-http": "^1.0.4", "radix3": "^1.1.2", "ufo": "^1.6.3", "uncrypto": "^0.1.3" } }, "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg=="], + + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "hast-util-from-html": ["hast-util-from-html@2.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "devlop": "^1.1.0", "hast-util-from-parse5": "^8.0.0", "parse5": "^7.0.0", "vfile": "^6.0.0", "vfile-message": "^4.0.0" } }, "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw=="], + + "hast-util-from-parse5": ["hast-util-from-parse5@8.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "hastscript": "^9.0.0", "property-information": "^7.0.0", "vfile": "^6.0.0", "vfile-location": "^5.0.0", "web-namespaces": "^2.0.0" } }, "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg=="], + + "hast-util-is-element": ["hast-util-is-element@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g=="], + + "hast-util-parse-selector": ["hast-util-parse-selector@4.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A=="], + + "hast-util-raw": ["hast-util-raw@9.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "@ungap/structured-clone": "^1.0.0", "hast-util-from-parse5": "^8.0.0", "hast-util-to-parse5": "^8.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "parse5": "^7.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0", "web-namespaces": "^2.0.0", "zwitch": "^2.0.0" } }, "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw=="], + + "hast-util-to-html": ["hast-util-to-html@9.0.5", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" } }, "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="], + + "hast-util-to-parse5": ["hast-util-to-parse5@8.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "web-namespaces": "^2.0.0", "zwitch": "^2.0.0" } }, "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA=="], + + "hast-util-to-text": ["hast-util-to-text@4.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "hast-util-is-element": "^3.0.0", "unist-util-find-after": "^5.0.0" } }, "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A=="], + + "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], + + "hastscript": ["hastscript@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w=="], + + "html-escaper": ["html-escaper@3.0.3", "", {}, "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ=="], + + "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], + + "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="], + + "iron-webcrypto": ["iron-webcrypto@1.2.1", "", {}, "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg=="], + + "is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], + + "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], + + "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], + + "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], + + "is-reference": ["is-reference@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.6" } }, "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw=="], + + "is-wsl": ["is-wsl@3.1.1", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw=="], + + "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], + + "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], + + "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], + + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="], + + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="], + + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="], + + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="], + + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="], + + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="], + + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="], + + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="], + + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="], + + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="], + + "locate-character": ["locate-character@3.0.0", "", {}, "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA=="], + + "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], + + "lru-cache": ["lru-cache@11.2.7", "", {}, "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA=="], + + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + + "magicast": ["magicast@0.5.2", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "source-map-js": "^1.2.1" } }, "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ=="], + + "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], + + "mdast-util-definitions": ["mdast-util-definitions@6.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ=="], + + "mdast-util-find-and-replace": ["mdast-util-find-and-replace@3.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "escape-string-regexp": "^5.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg=="], + + "mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.3", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q=="], + + "mdast-util-gfm": ["mdast-util-gfm@3.1.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-gfm-autolink-literal": "^2.0.0", "mdast-util-gfm-footnote": "^2.0.0", "mdast-util-gfm-strikethrough": "^2.0.0", "mdast-util-gfm-table": "^2.0.0", "mdast-util-gfm-task-list-item": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ=="], + + "mdast-util-gfm-autolink-literal": ["mdast-util-gfm-autolink-literal@2.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "ccount": "^2.0.0", "devlop": "^1.0.0", "mdast-util-find-and-replace": "^3.0.0", "micromark-util-character": "^2.0.0" } }, "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ=="], + + "mdast-util-gfm-footnote": ["mdast-util-gfm-footnote@2.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0" } }, "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ=="], + + "mdast-util-gfm-strikethrough": ["mdast-util-gfm-strikethrough@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg=="], + + "mdast-util-gfm-table": ["mdast-util-gfm-table@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "markdown-table": "^3.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg=="], + + "mdast-util-gfm-task-list-item": ["mdast-util-gfm-task-list-item@2.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ=="], + + "mdast-util-phrasing": ["mdast-util-phrasing@4.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "unist-util-is": "^6.0.0" } }, "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w=="], + + "mdast-util-to-hast": ["mdast-util-to-hast@13.2.1", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA=="], + + "mdast-util-to-markdown": ["mdast-util-to-markdown@2.1.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA=="], + + "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="], + + "mdn-data": ["mdn-data@2.27.1", "", {}, "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ=="], + + "micromark": ["micromark@4.0.2", "", { "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA=="], + + "micromark-core-commonmark": ["micromark-core-commonmark@2.0.3", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-destination": "^2.0.0", "micromark-factory-label": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-title": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-html-tag-name": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg=="], + + "micromark-extension-gfm": ["micromark-extension-gfm@3.0.0", "", { "dependencies": { "micromark-extension-gfm-autolink-literal": "^2.0.0", "micromark-extension-gfm-footnote": "^2.0.0", "micromark-extension-gfm-strikethrough": "^2.0.0", "micromark-extension-gfm-table": "^2.0.0", "micromark-extension-gfm-tagfilter": "^2.0.0", "micromark-extension-gfm-task-list-item": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w=="], + + "micromark-extension-gfm-autolink-literal": ["micromark-extension-gfm-autolink-literal@2.1.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw=="], + + "micromark-extension-gfm-footnote": ["micromark-extension-gfm-footnote@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw=="], + + "micromark-extension-gfm-strikethrough": ["micromark-extension-gfm-strikethrough@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw=="], + + "micromark-extension-gfm-table": ["micromark-extension-gfm-table@2.1.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg=="], + + "micromark-extension-gfm-tagfilter": ["micromark-extension-gfm-tagfilter@2.0.0", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg=="], + + "micromark-extension-gfm-task-list-item": ["micromark-extension-gfm-task-list-item@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw=="], + + "micromark-factory-destination": ["micromark-factory-destination@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA=="], + + "micromark-factory-label": ["micromark-factory-label@2.0.1", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg=="], + + "micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], + + "micromark-factory-title": ["micromark-factory-title@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw=="], + + "micromark-factory-whitespace": ["micromark-factory-whitespace@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ=="], + + "micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + + "micromark-util-chunked": ["micromark-util-chunked@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA=="], + + "micromark-util-classify-character": ["micromark-util-classify-character@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q=="], + + "micromark-util-combine-extensions": ["micromark-util-combine-extensions@2.0.1", "", { "dependencies": { "micromark-util-chunked": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg=="], + + "micromark-util-decode-numeric-character-reference": ["micromark-util-decode-numeric-character-reference@2.0.2", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw=="], + + "micromark-util-decode-string": ["micromark-util-decode-string@2.0.1", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-util-character": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ=="], + + "micromark-util-encode": ["micromark-util-encode@2.0.1", "", {}, "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="], + + "micromark-util-html-tag-name": ["micromark-util-html-tag-name@2.0.1", "", {}, "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA=="], + + "micromark-util-normalize-identifier": ["micromark-util-normalize-identifier@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q=="], + + "micromark-util-resolve-all": ["micromark-util-resolve-all@2.0.1", "", { "dependencies": { "micromark-util-types": "^2.0.0" } }, "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg=="], + + "micromark-util-sanitize-uri": ["micromark-util-sanitize-uri@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ=="], + + "micromark-util-subtokenize": ["micromark-util-subtokenize@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA=="], + + "micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + + "micromark-util-types": ["micromark-util-types@2.0.2", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="], + + "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "neotraverse": ["neotraverse@0.6.18", "", {}, "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA=="], + + "nlcst-to-string": ["nlcst-to-string@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0" } }, "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA=="], + + "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="], + + "node-mock-http": ["node-mock-http@1.0.4", "", {}, "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ=="], + + "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + + "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], + + "obug": ["obug@2.1.1", "", {}, "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ=="], + + "ofetch": ["ofetch@1.5.1", "", { "dependencies": { "destr": "^2.0.5", "node-fetch-native": "^1.6.7", "ufo": "^1.6.1" } }, "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA=="], + + "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], + + "oniguruma-parser": ["oniguruma-parser@0.12.1", "", {}, "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w=="], + + "oniguruma-to-es": ["oniguruma-to-es@4.3.5", "", { "dependencies": { "oniguruma-parser": "^0.12.1", "regex": "^6.1.0", "regex-recursion": "^6.0.2" } }, "sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ=="], + + "p-limit": ["p-limit@7.3.0", "", { "dependencies": { "yocto-queue": "^1.2.1" } }, "sha512-7cIXg/Z0M5WZRblrsOla88S4wAK+zOQQWeBYfV3qJuJXMr+LnbYjaadrFaS0JILfEDPVqHyKnZ1Z/1d6J9VVUw=="], + + "p-queue": ["p-queue@9.1.1", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^7.0.0" } }, "sha512-yQS1vV2V7Q14MQrgD8jMNY5owPuGgVHVdSK8NqmKpOVajnjbaeMa6uLOzTALPtvJ7Vo4bw0BGsw7qfUT8z24Ig=="], + + "p-timeout": ["p-timeout@7.0.1", "", {}, "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg=="], + + "package-manager-detector": ["package-manager-detector@1.6.0", "", {}, "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA=="], + + "parse-latin": ["parse-latin@7.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "@types/unist": "^3.0.0", "nlcst-to-string": "^4.0.0", "unist-util-modify-children": "^4.0.0", "unist-util-visit-children": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ=="], + + "parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], + + "piccolore": ["piccolore@0.1.3", "", {}, "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], + + "postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="], + + "postcss-selector-parser": ["postcss-selector-parser@6.0.10", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w=="], + + "prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="], + + "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], + + "radix3": ["radix3@1.1.2", "", {}, "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA=="], + + "readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="], + + "regex": ["regex@6.1.0", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg=="], + + "regex-recursion": ["regex-recursion@6.0.2", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg=="], + + "regex-utilities": ["regex-utilities@2.3.0", "", {}, "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="], + + "rehype": ["rehype@13.0.2", "", { "dependencies": { "@types/hast": "^3.0.0", "rehype-parse": "^9.0.0", "rehype-stringify": "^10.0.0", "unified": "^11.0.0" } }, "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A=="], + + "rehype-parse": ["rehype-parse@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-from-html": "^2.0.0", "unified": "^11.0.0" } }, "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag=="], + + "rehype-raw": ["rehype-raw@7.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-raw": "^9.0.0", "vfile": "^6.0.0" } }, "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww=="], + + "rehype-stringify": ["rehype-stringify@10.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-to-html": "^9.0.0", "unified": "^11.0.0" } }, "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA=="], + + "remark-gfm": ["remark-gfm@4.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-gfm": "^3.0.0", "micromark-extension-gfm": "^3.0.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "unified": "^11.0.0" } }, "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg=="], + + "remark-github-blockquote-alert": ["remark-github-blockquote-alert@2.1.0", "", { "dependencies": { "unist-util-visit": "^5.0.0" } }, "sha512-J392jmIP684d7iGsENN0uguL10IGbRdc8bTUSrd/jOLzdWkwg721Fj3JPQGN8tF6fTIrE5HHOIA3nBuwuaeuPQ=="], + + "remark-parse": ["remark-parse@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "micromark-util-types": "^2.0.0", "unified": "^11.0.0" } }, "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA=="], + + "remark-rehype": ["remark-rehype@11.1.2", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "mdast-util-to-hast": "^13.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw=="], + + "remark-smartypants": ["remark-smartypants@3.0.2", "", { "dependencies": { "retext": "^9.0.0", "retext-smartypants": "^6.0.0", "unified": "^11.0.4", "unist-util-visit": "^5.0.0" } }, "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA=="], + + "remark-stringify": ["remark-stringify@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-to-markdown": "^2.0.0", "unified": "^11.0.0" } }, "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw=="], + + "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], + + "retext": ["retext@9.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "retext-latin": "^4.0.0", "retext-stringify": "^4.0.0", "unified": "^11.0.0" } }, "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA=="], + + "retext-latin": ["retext-latin@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "parse-latin": "^7.0.0", "unified": "^11.0.0" } }, "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA=="], + + "retext-smartypants": ["retext-smartypants@6.2.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "nlcst-to-string": "^4.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ=="], + + "retext-stringify": ["retext-stringify@4.0.0", "", { "dependencies": { "@types/nlcst": "^2.0.0", "nlcst-to-string": "^4.0.0", "unified": "^11.0.0" } }, "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA=="], + + "rollup": ["rollup@4.60.1", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.60.1", "@rollup/rollup-android-arm64": "4.60.1", "@rollup/rollup-darwin-arm64": "4.60.1", "@rollup/rollup-darwin-x64": "4.60.1", "@rollup/rollup-freebsd-arm64": "4.60.1", "@rollup/rollup-freebsd-x64": "4.60.1", "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", "@rollup/rollup-linux-arm-musleabihf": "4.60.1", "@rollup/rollup-linux-arm64-gnu": "4.60.1", "@rollup/rollup-linux-arm64-musl": "4.60.1", "@rollup/rollup-linux-loong64-gnu": "4.60.1", "@rollup/rollup-linux-loong64-musl": "4.60.1", "@rollup/rollup-linux-ppc64-gnu": "4.60.1", "@rollup/rollup-linux-ppc64-musl": "4.60.1", "@rollup/rollup-linux-riscv64-gnu": "4.60.1", "@rollup/rollup-linux-riscv64-musl": "4.60.1", "@rollup/rollup-linux-s390x-gnu": "4.60.1", "@rollup/rollup-linux-x64-gnu": "4.60.1", "@rollup/rollup-linux-x64-musl": "4.60.1", "@rollup/rollup-openbsd-x64": "4.60.1", "@rollup/rollup-openharmony-arm64": "4.60.1", "@rollup/rollup-win32-arm64-msvc": "4.60.1", "@rollup/rollup-win32-ia32-msvc": "4.60.1", "@rollup/rollup-win32-x64-gnu": "4.60.1", "@rollup/rollup-win32-x64-msvc": "4.60.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w=="], + + "rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="], + + "sax": ["sax@1.6.0", "", {}, "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA=="], + + "scule": ["scule@1.3.0", "", {}, "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g=="], + + "semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], + + "sharp": ["sharp@0.34.5", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.2", "semver": "^7.7.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.5", "@img/sharp-darwin-x64": "0.34.5", "@img/sharp-libvips-darwin-arm64": "1.2.4", "@img/sharp-libvips-darwin-x64": "1.2.4", "@img/sharp-libvips-linux-arm": "1.2.4", "@img/sharp-libvips-linux-arm64": "1.2.4", "@img/sharp-libvips-linux-ppc64": "1.2.4", "@img/sharp-libvips-linux-riscv64": "1.2.4", "@img/sharp-libvips-linux-s390x": "1.2.4", "@img/sharp-libvips-linux-x64": "1.2.4", "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", "@img/sharp-libvips-linuxmusl-x64": "1.2.4", "@img/sharp-linux-arm": "0.34.5", "@img/sharp-linux-arm64": "0.34.5", "@img/sharp-linux-ppc64": "0.34.5", "@img/sharp-linux-riscv64": "0.34.5", "@img/sharp-linux-s390x": "0.34.5", "@img/sharp-linux-x64": "0.34.5", "@img/sharp-linuxmusl-arm64": "0.34.5", "@img/sharp-linuxmusl-x64": "0.34.5", "@img/sharp-wasm32": "0.34.5", "@img/sharp-win32-arm64": "0.34.5", "@img/sharp-win32-ia32": "0.34.5", "@img/sharp-win32-x64": "0.34.5" } }, "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg=="], + + "shell-quote": ["shell-quote@1.8.3", "", {}, "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw=="], + + "shiki": ["shiki@4.0.2", "", { "dependencies": { "@shikijs/core": "4.0.2", "@shikijs/engine-javascript": "4.0.2", "@shikijs/engine-oniguruma": "4.0.2", "@shikijs/langs": "4.0.2", "@shikijs/themes": "4.0.2", "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ=="], + + "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], + + "smol-toml": ["smol-toml@1.6.1", "", {}, "sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], + + "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], + + "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + + "svelte": ["svelte@5.55.1", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", "@types/trusted-types": "^2.0.7", "acorn": "^8.12.1", "aria-query": "5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "devalue": "^5.6.4", "esm-env": "^1.2.1", "esrap": "^2.2.4", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-QjvU7EFemf6mRzdMGlAFttMWtAAVXrax61SZYHdkD6yoVGQ89VeyKfZD4H1JrV1WLmJBxWhFch9H6ig/87VGjw=="], + + "svelte2tsx": ["svelte2tsx@0.7.53", "", { "dependencies": { "dedent-js": "^1.0.1", "scule": "^1.3.0" }, "peerDependencies": { "svelte": "^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0", "typescript": "^4.9.4 || ^5.0.0" } }, "sha512-ljVSwmnYRDHRm8+7ICP6QoAN7U7vgOFfPBLN6T745YWNYqRRSzHxlrzUVqMjYls2Un8MzJissfziy/38e6Deeg=="], + + "svgo": ["svgo@4.0.1", "", { "dependencies": { "commander": "^11.1.0", "css-select": "^5.1.0", "css-tree": "^3.0.1", "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.1.1", "sax": "^1.5.0" }, "bin": "./bin/svgo.js" }, "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w=="], + + "tailwindcss": ["tailwindcss@4.2.2", "", {}, "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q=="], + + "tapable": ["tapable@2.3.2", "", {}, "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA=="], + + "tiny-inflate": ["tiny-inflate@1.0.3", "", {}, "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="], + + "tinyclip": ["tinyclip@0.1.12", "", {}, "sha512-Ae3OVUqifDw0wBriIBS7yVaW44Dp6eSHQcyq4Igc7eN2TJH/2YsicswaW+J/OuMvhpDPOKEgpAZCjkb4hpoyeA=="], + + "tinyexec": ["tinyexec@1.0.4", "", {}, "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw=="], + + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + + "tree-kill": ["tree-kill@1.2.2", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="], + + "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], + + "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="], + + "tsconfck": ["tsconfck@3.1.6", "", { "peerDependencies": { "typescript": "^5.0.0" }, "optionalPeers": ["typescript"], "bin": { "tsconfck": "bin/tsconfck.js" } }, "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + + "ultrahtml": ["ultrahtml@1.6.0", "", {}, "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw=="], + + "uncrypto": ["uncrypto@0.1.3", "", {}, "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="], + + "undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + + "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], + + "unifont": ["unifont@0.7.4", "", { "dependencies": { "css-tree": "^3.1.0", "ofetch": "^1.5.1", "ohash": "^2.0.11" } }, "sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg=="], + + "unist-util-find-after": ["unist-util-find-after@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ=="], + + "unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], + + "unist-util-modify-children": ["unist-util-modify-children@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "array-iterate": "^2.0.0" } }, "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw=="], + + "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="], + + "unist-util-remove-position": ["unist-util-remove-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q=="], + + "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="], + + "unist-util-visit": ["unist-util-visit@5.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="], + + "unist-util-visit-children": ["unist-util-visit-children@3.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA=="], + + "unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], + + "unstorage": ["unstorage@1.17.5", "", { "dependencies": { "anymatch": "^3.1.3", "chokidar": "^5.0.0", "destr": "^2.0.5", "h3": "^1.15.10", "lru-cache": "^11.2.7", "node-fetch-native": "^1.6.7", "ofetch": "^1.5.1", "ufo": "^1.6.3" }, "peerDependencies": { "@azure/app-configuration": "^1.8.0", "@azure/cosmos": "^4.2.0", "@azure/data-tables": "^13.3.0", "@azure/identity": "^4.6.0", "@azure/keyvault-secrets": "^4.9.0", "@azure/storage-blob": "^12.26.0", "@capacitor/preferences": "^6 || ^7 || ^8", "@deno/kv": ">=0.9.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.34.3", "@vercel/blob": ">=0.27.1", "@vercel/functions": "^2.2.12 || ^3.0.0", "@vercel/kv": "^1 || ^2 || ^3", "aws4fetch": "^1.0.20", "db0": ">=0.2.1", "idb-keyval": "^6.2.1", "ioredis": "^5.4.2", "uploadthing": "^7.4.4" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/functions", "@vercel/kv", "aws4fetch", "db0", "idb-keyval", "ioredis", "uploadthing"] }, "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], + + "vfile-location": ["vfile-location@5.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg=="], + + "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], + + "vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], + + "vitefu": ["vitefu@1.1.3", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["vite"] }, "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg=="], + + "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], + + "which-pm-runs": ["which-pm-runs@1.1.0", "", {}, "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA=="], + + "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "xxhash-wasm": ["xxhash-wasm@1.1.0", "", {}, "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA=="], + + "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], + + "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + + "yargs-parser": ["yargs-parser@22.0.0", "", {}, "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw=="], + + "yocto-queue": ["yocto-queue@1.2.2", "", {}, "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ=="], + + "zimmerframe": ["zimmerframe@1.1.4", "", {}, "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ=="], + + "zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], + + "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.9.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.9.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg=="], + + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.2", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" }, "bundled": true }, "sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw=="], + + "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + + "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "anymatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], + + "chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="], + + "dom-serializer/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + + "svelte/aria-query": ["aria-query@5.3.1", "", {}, "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g=="], + + "yargs/yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], + + "csso/css-tree/mdn-data": ["mdn-data@2.0.28", "", {}, "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="], + } +} diff --git a/front/bun.nix b/front/bun.nix new file mode 100644 index 0000000..5fe15b7 --- /dev/null +++ b/front/bun.nix @@ -0,0 +1,1700 @@ +# Autogenerated by `bun2nix`, editing manually is not recommended +# +# Set of Bun packages to install +# +# Consume this with `fetchBunDeps` (recommended) +# or `pkgs.callPackage` if you wish to handle +# it manually. +{ + copyPathToStore, + fetchFromGitHub, + fetchgit, + fetchurl, + ... +}: +{ + "@astrojs/compiler@3.0.1" = fetchurl { + url = "https://registry.npmjs.org/@astrojs/compiler/-/compiler-3.0.1.tgz"; + hash = "sha512-z97oYbdebO5aoWzuJ/8q5hLK232+17KcLZ7cJ8BCWk6+qNzVxn/gftC0KzMBUTD8WAaBkPpNSQK6PXLnNrZ0CA=="; + }; + "@astrojs/internal-helpers@0.8.0" = fetchurl { + url = "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.8.0.tgz"; + hash = "sha512-J56GrhEiV+4dmrGLPNOl2pZjpHXAndWVyiVDYGDuw6MWKpBSEMLdFxHzeM/6sqaknw9M+HFfHZAcvi3OfT3D/w=="; + }; + "@astrojs/markdown-remark@7.1.0" = fetchurl { + url = "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-7.1.0.tgz"; + hash = "sha512-P+HnCsu2js3BoTc8kFmu+E9gOcFeMdPris75g+Zl4sY8+bBRbSQV6xzcBDbZ27eE7yBGEGQoqjpChx+KJYIPYQ=="; + }; + "@astrojs/prism@4.0.1" = fetchurl { + url = "https://registry.npmjs.org/@astrojs/prism/-/prism-4.0.1.tgz"; + hash = "sha512-nksZQVjlferuWzhPsBpQ1JE5XuKAf1id1/9Hj4a9KG4+ofrlzxUUwX4YGQF/SuDiuiGKEnzopGOt38F3AnVWsQ=="; + }; + "@astrojs/svelte@8.0.4" = fetchurl { + url = "https://registry.npmjs.org/@astrojs/svelte/-/svelte-8.0.4.tgz"; + hash = "sha512-c5m3chjtgxBE3BzsE/bZbCFBkLPhq041rm2WJFaTIKGwt/3xNm/5efYCj23reuAcBsl4iYS8n2UwkAHQJzhkZA=="; + }; + "@astrojs/telemetry@3.3.0" = fetchurl { + url = "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz"; + hash = "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ=="; + }; + "@babel/helper-string-parser@7.27.1" = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz"; + hash = "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="; + }; + "@babel/helper-validator-identifier@7.28.5" = fetchurl { + url = "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz"; + hash = "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="; + }; + "@babel/parser@7.29.2" = fetchurl { + url = "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz"; + hash = "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA=="; + }; + "@babel/types@7.29.0" = fetchurl { + url = "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz"; + hash = "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="; + }; + "@capsizecss/unpack@4.0.0" = fetchurl { + url = "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.0.tgz"; + hash = "sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA=="; + }; + "@clack/core@1.2.0" = fetchurl { + url = "https://registry.npmjs.org/@clack/core/-/core-1.2.0.tgz"; + hash = "sha512-qfxof/3T3t9DPU/Rj3OmcFyZInceqj/NVtO9rwIuJqCUgh32gwPjpFQQp/ben07qKlhpwq7GzfWpST4qdJ5Drg=="; + }; + "@clack/prompts@1.2.0" = fetchurl { + url = "https://registry.npmjs.org/@clack/prompts/-/prompts-1.2.0.tgz"; + hash = "sha512-4jmztR9fMqPMjz6H/UZXj0zEmE43ha1euENwkckKKel4XpSfokExPo5AiVStdHSAlHekz4d0CA/r45Ok1E4D3w=="; + }; + "@emnapi/core@1.9.1" = fetchurl { + url = "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz"; + hash = "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA=="; + }; + "@emnapi/runtime@1.9.1" = fetchurl { + url = "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz"; + hash = "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA=="; + }; + "@emnapi/wasi-threads@1.2.0" = fetchurl { + url = "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz"; + hash = "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg=="; + }; + "@esbuild/aix-ppc64@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz"; + hash = "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q=="; + }; + "@esbuild/android-arm64@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz"; + hash = "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw=="; + }; + "@esbuild/android-arm@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.4.tgz"; + hash = "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ=="; + }; + "@esbuild/android-x64@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.4.tgz"; + hash = "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw=="; + }; + "@esbuild/darwin-arm64@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz"; + hash = "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ=="; + }; + "@esbuild/darwin-x64@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz"; + hash = "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw=="; + }; + "@esbuild/freebsd-arm64@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz"; + hash = "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw=="; + }; + "@esbuild/freebsd-x64@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz"; + hash = "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ=="; + }; + "@esbuild/linux-arm64@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz"; + hash = "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA=="; + }; + "@esbuild/linux-arm@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz"; + hash = "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg=="; + }; + "@esbuild/linux-ia32@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz"; + hash = "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA=="; + }; + "@esbuild/linux-loong64@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz"; + hash = "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA=="; + }; + "@esbuild/linux-mips64el@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz"; + hash = "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw=="; + }; + "@esbuild/linux-ppc64@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz"; + hash = "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA=="; + }; + "@esbuild/linux-riscv64@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz"; + hash = "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw=="; + }; + "@esbuild/linux-s390x@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz"; + hash = "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA=="; + }; + "@esbuild/linux-x64@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz"; + hash = "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA=="; + }; + "@esbuild/netbsd-arm64@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.4.tgz"; + hash = "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q=="; + }; + "@esbuild/netbsd-x64@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz"; + hash = "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg=="; + }; + "@esbuild/openbsd-arm64@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz"; + hash = "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow=="; + }; + "@esbuild/openbsd-x64@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz"; + hash = "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ=="; + }; + "@esbuild/openharmony-arm64@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz"; + hash = "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg=="; + }; + "@esbuild/sunos-x64@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz"; + hash = "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g=="; + }; + "@esbuild/win32-arm64@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz"; + hash = "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg=="; + }; + "@esbuild/win32-ia32@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz"; + hash = "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw=="; + }; + "@esbuild/win32-x64@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz"; + hash = "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg=="; + }; + "@img/colour@1.1.0" = fetchurl { + url = "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz"; + hash = "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ=="; + }; + "@img/sharp-darwin-arm64@0.34.5" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz"; + hash = "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w=="; + }; + "@img/sharp-darwin-x64@0.34.5" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz"; + hash = "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw=="; + }; + "@img/sharp-libvips-darwin-arm64@1.2.4" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz"; + hash = "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g=="; + }; + "@img/sharp-libvips-darwin-x64@1.2.4" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz"; + hash = "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg=="; + }; + "@img/sharp-libvips-linux-arm64@1.2.4" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz"; + hash = "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw=="; + }; + "@img/sharp-libvips-linux-arm@1.2.4" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz"; + hash = "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A=="; + }; + "@img/sharp-libvips-linux-ppc64@1.2.4" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz"; + hash = "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA=="; + }; + "@img/sharp-libvips-linux-riscv64@1.2.4" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz"; + hash = "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA=="; + }; + "@img/sharp-libvips-linux-s390x@1.2.4" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz"; + hash = "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ=="; + }; + "@img/sharp-libvips-linux-x64@1.2.4" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz"; + hash = "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw=="; + }; + "@img/sharp-libvips-linuxmusl-arm64@1.2.4" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz"; + hash = "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw=="; + }; + "@img/sharp-libvips-linuxmusl-x64@1.2.4" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz"; + hash = "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg=="; + }; + "@img/sharp-linux-arm64@0.34.5" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz"; + hash = "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg=="; + }; + "@img/sharp-linux-arm@0.34.5" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz"; + hash = "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw=="; + }; + "@img/sharp-linux-ppc64@0.34.5" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz"; + hash = "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA=="; + }; + "@img/sharp-linux-riscv64@0.34.5" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz"; + hash = "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw=="; + }; + "@img/sharp-linux-s390x@0.34.5" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz"; + hash = "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg=="; + }; + "@img/sharp-linux-x64@0.34.5" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz"; + hash = "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ=="; + }; + "@img/sharp-linuxmusl-arm64@0.34.5" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz"; + hash = "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg=="; + }; + "@img/sharp-linuxmusl-x64@0.34.5" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz"; + hash = "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q=="; + }; + "@img/sharp-wasm32@0.34.5" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz"; + hash = "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw=="; + }; + "@img/sharp-win32-arm64@0.34.5" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz"; + hash = "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g=="; + }; + "@img/sharp-win32-ia32@0.34.5" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz"; + hash = "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg=="; + }; + "@img/sharp-win32-x64@0.34.5" = fetchurl { + url = "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz"; + hash = "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw=="; + }; + "@jridgewell/gen-mapping@0.3.13" = fetchurl { + url = "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz"; + hash = "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="; + }; + "@jridgewell/remapping@2.3.5" = fetchurl { + url = "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz"; + hash = "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="; + }; + "@jridgewell/resolve-uri@3.1.2" = fetchurl { + url = "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz"; + hash = "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="; + }; + "@jridgewell/sourcemap-codec@1.5.5" = fetchurl { + url = "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz"; + hash = "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="; + }; + "@jridgewell/trace-mapping@0.3.31" = fetchurl { + url = "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz"; + hash = "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="; + }; + "@lucide/svelte@1.7.0" = fetchurl { + url = "https://registry.npmjs.org/@lucide/svelte/-/svelte-1.7.0.tgz"; + hash = "sha512-YytBKOUBGox7yWcykZnYxOkn5WpR5G1qYXLYXV/j1B79SOTTEKzB+s5yF5Rq9l9OkweDStNH2b4yTqfvhEhV8g=="; + }; + "@napi-rs/wasm-runtime@1.1.2" = fetchurl { + url = "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.2.tgz"; + hash = "sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw=="; + }; + "@oslojs/encoding@1.1.0" = fetchurl { + url = "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz"; + hash = "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ=="; + }; + "@rollup/pluginutils@5.3.0" = fetchurl { + url = "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz"; + hash = "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q=="; + }; + "@rollup/rollup-android-arm-eabi@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz"; + hash = "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA=="; + }; + "@rollup/rollup-android-arm64@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz"; + hash = "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA=="; + }; + "@rollup/rollup-darwin-arm64@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz"; + hash = "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw=="; + }; + "@rollup/rollup-darwin-x64@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz"; + hash = "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew=="; + }; + "@rollup/rollup-freebsd-arm64@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz"; + hash = "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w=="; + }; + "@rollup/rollup-freebsd-x64@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz"; + hash = "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g=="; + }; + "@rollup/rollup-linux-arm-gnueabihf@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz"; + hash = "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g=="; + }; + "@rollup/rollup-linux-arm-musleabihf@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz"; + hash = "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg=="; + }; + "@rollup/rollup-linux-arm64-gnu@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz"; + hash = "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ=="; + }; + "@rollup/rollup-linux-arm64-musl@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz"; + hash = "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA=="; + }; + "@rollup/rollup-linux-loong64-gnu@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz"; + hash = "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ=="; + }; + "@rollup/rollup-linux-loong64-musl@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz"; + hash = "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw=="; + }; + "@rollup/rollup-linux-ppc64-gnu@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz"; + hash = "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw=="; + }; + "@rollup/rollup-linux-ppc64-musl@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz"; + hash = "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg=="; + }; + "@rollup/rollup-linux-riscv64-gnu@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz"; + hash = "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg=="; + }; + "@rollup/rollup-linux-riscv64-musl@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz"; + hash = "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg=="; + }; + "@rollup/rollup-linux-s390x-gnu@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz"; + hash = "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ=="; + }; + "@rollup/rollup-linux-x64-gnu@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz"; + hash = "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg=="; + }; + "@rollup/rollup-linux-x64-musl@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz"; + hash = "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w=="; + }; + "@rollup/rollup-openbsd-x64@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz"; + hash = "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw=="; + }; + "@rollup/rollup-openharmony-arm64@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz"; + hash = "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA=="; + }; + "@rollup/rollup-win32-arm64-msvc@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz"; + hash = "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g=="; + }; + "@rollup/rollup-win32-ia32-msvc@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz"; + hash = "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg=="; + }; + "@rollup/rollup-win32-x64-gnu@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz"; + hash = "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg=="; + }; + "@rollup/rollup-win32-x64-msvc@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz"; + hash = "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ=="; + }; + "@shikijs/core@4.0.2" = fetchurl { + url = "https://registry.npmjs.org/@shikijs/core/-/core-4.0.2.tgz"; + hash = "sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw=="; + }; + "@shikijs/engine-javascript@4.0.2" = fetchurl { + url = "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.0.2.tgz"; + hash = "sha512-7PW0Nm49DcoUIQEXlJhNNBHyoGMjalRETTCcjMqEaMoJRLljy1Bi/EGV3/qLBgLKQejdspiiYuHGQW6dX94Nag=="; + }; + "@shikijs/engine-oniguruma@4.0.2" = fetchurl { + url = "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.0.2.tgz"; + hash = "sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg=="; + }; + "@shikijs/langs@4.0.2" = fetchurl { + url = "https://registry.npmjs.org/@shikijs/langs/-/langs-4.0.2.tgz"; + hash = "sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg=="; + }; + "@shikijs/primitive@4.0.2" = fetchurl { + url = "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.0.2.tgz"; + hash = "sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw=="; + }; + "@shikijs/themes@4.0.2" = fetchurl { + url = "https://registry.npmjs.org/@shikijs/themes/-/themes-4.0.2.tgz"; + hash = "sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA=="; + }; + "@shikijs/types@4.0.2" = fetchurl { + url = "https://registry.npmjs.org/@shikijs/types/-/types-4.0.2.tgz"; + hash = "sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg=="; + }; + "@shikijs/vscode-textmate@10.0.2" = fetchurl { + url = "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz"; + hash = "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="; + }; + "@sveltejs/acorn-typescript@1.0.9" = fetchurl { + url = "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.9.tgz"; + hash = "sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA=="; + }; + "@sveltejs/vite-plugin-svelte-inspector@5.0.2" = fetchurl { + url = "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-5.0.2.tgz"; + hash = "sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig=="; + }; + "@sveltejs/vite-plugin-svelte@6.2.4" = fetchurl { + url = "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.2.4.tgz"; + hash = "sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA=="; + }; + "@tailwindcss/node@4.2.2" = fetchurl { + url = "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.2.tgz"; + hash = "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA=="; + }; + "@tailwindcss/oxide-android-arm64@4.2.2" = fetchurl { + url = "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.2.tgz"; + hash = "sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg=="; + }; + "@tailwindcss/oxide-darwin-arm64@4.2.2" = fetchurl { + url = "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.2.tgz"; + hash = "sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg=="; + }; + "@tailwindcss/oxide-darwin-x64@4.2.2" = fetchurl { + url = "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.2.tgz"; + hash = "sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw=="; + }; + "@tailwindcss/oxide-freebsd-x64@4.2.2" = fetchurl { + url = "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.2.tgz"; + hash = "sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ=="; + }; + "@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2" = fetchurl { + url = "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.2.tgz"; + hash = "sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ=="; + }; + "@tailwindcss/oxide-linux-arm64-gnu@4.2.2" = fetchurl { + url = "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.2.tgz"; + hash = "sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw=="; + }; + "@tailwindcss/oxide-linux-arm64-musl@4.2.2" = fetchurl { + url = "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.2.tgz"; + hash = "sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag=="; + }; + "@tailwindcss/oxide-linux-x64-gnu@4.2.2" = fetchurl { + url = "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.2.tgz"; + hash = "sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg=="; + }; + "@tailwindcss/oxide-linux-x64-musl@4.2.2" = fetchurl { + url = "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.2.tgz"; + hash = "sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ=="; + }; + "@tailwindcss/oxide-wasm32-wasi@4.2.2" = fetchurl { + url = "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.2.tgz"; + hash = "sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q=="; + }; + "@tailwindcss/oxide-win32-arm64-msvc@4.2.2" = fetchurl { + url = "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.2.tgz"; + hash = "sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ=="; + }; + "@tailwindcss/oxide-win32-x64-msvc@4.2.2" = fetchurl { + url = "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.2.tgz"; + hash = "sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA=="; + }; + "@tailwindcss/oxide@4.2.2" = fetchurl { + url = "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.2.tgz"; + hash = "sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg=="; + }; + "@tailwindcss/typography@0.5.19" = fetchurl { + url = "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.19.tgz"; + hash = "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg=="; + }; + "@tailwindcss/vite@4.2.2" = fetchurl { + url = "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.2.tgz"; + hash = "sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w=="; + }; + "@tybys/wasm-util@0.10.1" = fetchurl { + url = "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz"; + hash = "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="; + }; + "@types/debug@4.1.13" = fetchurl { + url = "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz"; + hash = "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw=="; + }; + "@types/dompurify@3.2.0" = fetchurl { + url = "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.2.0.tgz"; + hash = "sha512-Fgg31wv9QbLDA0SpTOXO3MaxySc4DKGLi8sna4/Utjo4r3ZRPdCt4UQee8BWr+Q5z21yifghREPJGYaEOEIACg=="; + }; + "@types/estree@1.0.8" = fetchurl { + url = "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz"; + hash = "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="; + }; + "@types/hast@3.0.4" = fetchurl { + url = "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz"; + hash = "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="; + }; + "@types/js-yaml@4.0.9" = fetchurl { + url = "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz"; + hash = "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg=="; + }; + "@types/mdast@4.0.4" = fetchurl { + url = "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz"; + hash = "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="; + }; + "@types/ms@2.1.0" = fetchurl { + url = "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz"; + hash = "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="; + }; + "@types/nlcst@2.0.3" = fetchurl { + url = "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz"; + hash = "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA=="; + }; + "@types/node@25.5.0" = fetchurl { + url = "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz"; + hash = "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="; + }; + "@types/trusted-types@2.0.7" = fetchurl { + url = "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz"; + hash = "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="; + }; + "@types/unist@3.0.3" = fetchurl { + url = "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz"; + hash = "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="; + }; + "@typescript-eslint/types@8.58.0" = fetchurl { + url = "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.58.0.tgz"; + hash = "sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww=="; + }; + "@ungap/structured-clone@1.3.0" = fetchurl { + url = "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz"; + hash = "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="; + }; + "acorn@8.16.0" = fetchurl { + url = "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz"; + hash = "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="; + }; + "ansi-regex@5.0.1" = fetchurl { + url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"; + hash = "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="; + }; + "ansi-styles@4.3.0" = fetchurl { + url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"; + hash = "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="; + }; + "ansi_up@6.0.6" = fetchurl { + url = "https://registry.npmjs.org/ansi_up/-/ansi_up-6.0.6.tgz"; + hash = "sha512-yIa1x3Ecf8jWP4UWEunNjqNX6gzE4vg2gGz+xqRGY+TBSucnYp6RRdPV4brmtg6bQ1ljD48mZ5iGSEj7QEpRKA=="; + }; + "anymatch@3.1.3" = fetchurl { + url = "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz"; + hash = "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="; + }; + "argparse@2.0.1" = fetchurl { + url = "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz"; + hash = "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="; + }; + "aria-query@5.3.1" = fetchurl { + url = "https://registry.npmjs.org/aria-query/-/aria-query-5.3.1.tgz"; + hash = "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g=="; + }; + "aria-query@5.3.2" = fetchurl { + url = "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz"; + hash = "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="; + }; + "array-iterate@2.0.1" = fetchurl { + url = "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz"; + hash = "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg=="; + }; + "astro@6.1.2" = fetchurl { + url = "https://registry.npmjs.org/astro/-/astro-6.1.2.tgz"; + hash = "sha512-r3iIvmB6JvQxsdJLvapybKKq7Bojd1iQK6CCx5P55eRnXJIyUpHx/1UB/GdMm+em/lwaCUasxHCmIO0lCLV2uA=="; + }; + "axobject-query@4.1.0" = fetchurl { + url = "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz"; + hash = "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="; + }; + "bail@2.0.2" = fetchurl { + url = "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz"; + hash = "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="; + }; + "boolbase@1.0.0" = fetchurl { + url = "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz"; + hash = "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="; + }; + "ccount@2.0.1" = fetchurl { + url = "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz"; + hash = "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="; + }; + "chalk@4.1.2" = fetchurl { + url = "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"; + hash = "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="; + }; + "character-entities-html4@2.1.0" = fetchurl { + url = "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz"; + hash = "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="; + }; + "character-entities-legacy@3.0.0" = fetchurl { + url = "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz"; + hash = "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="; + }; + "character-entities@2.0.2" = fetchurl { + url = "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz"; + hash = "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="; + }; + "chokidar@5.0.0" = fetchurl { + url = "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz"; + hash = "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="; + }; + "ci-info@4.4.0" = fetchurl { + url = "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz"; + hash = "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg=="; + }; + "cliui@8.0.1" = fetchurl { + url = "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz"; + hash = "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="; + }; + "clsx@2.1.1" = fetchurl { + url = "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz"; + hash = "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="; + }; + "color-convert@2.0.1" = fetchurl { + url = "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"; + hash = "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="; + }; + "color-name@1.1.4" = fetchurl { + url = "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"; + hash = "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="; + }; + "comma-separated-tokens@2.0.3" = fetchurl { + url = "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz"; + hash = "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="; + }; + "commander@11.1.0" = fetchurl { + url = "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz"; + hash = "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="; + }; + "common-ancestor-path@2.0.0" = fetchurl { + url = "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-2.0.0.tgz"; + hash = "sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng=="; + }; + "concurrently@9.2.1" = fetchurl { + url = "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz"; + hash = "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng=="; + }; + "cookie-es@1.2.3" = fetchurl { + url = "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.3.tgz"; + hash = "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw=="; + }; + "cookie@1.1.1" = fetchurl { + url = "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz"; + hash = "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ=="; + }; + "crossws@0.3.5" = fetchurl { + url = "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz"; + hash = "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA=="; + }; + "css-select@5.2.2" = fetchurl { + url = "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz"; + hash = "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw=="; + }; + "css-tree@2.2.1" = fetchurl { + url = "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz"; + hash = "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="; + }; + "css-tree@3.2.1" = fetchurl { + url = "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz"; + hash = "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA=="; + }; + "css-what@6.2.2" = fetchurl { + url = "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz"; + hash = "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="; + }; + "cssesc@3.0.0" = fetchurl { + url = "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz"; + hash = "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="; + }; + "csso@5.0.5" = fetchurl { + url = "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz"; + hash = "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ=="; + }; + "daisyui@5.5.19" = fetchurl { + url = "https://registry.npmjs.org/daisyui/-/daisyui-5.5.19.tgz"; + hash = "sha512-pbFAkl1VCEh/MPCeclKL61I/MqRIFFhNU7yiXoDDRapXN4/qNCoMxeCCswyxEEhqL5eiTTfwHvucFtOE71C9sA=="; + }; + "debug@4.4.3" = fetchurl { + url = "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz"; + hash = "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="; + }; + "decode-named-character-reference@1.3.0" = fetchurl { + url = "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz"; + hash = "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="; + }; + "dedent-js@1.0.1" = fetchurl { + url = "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz"; + hash = "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ=="; + }; + "deepmerge@4.3.1" = fetchurl { + url = "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz"; + hash = "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="; + }; + "defu@6.1.6" = fetchurl { + url = "https://registry.npmjs.org/defu/-/defu-6.1.6.tgz"; + hash = "sha512-f8mefEW4WIVg4LckePx3mALjQSPQgFlg9U8yaPdlsbdYcHQyj9n2zL2LJEA52smeYxOvmd/nB7TpMtHGMTHcug=="; + }; + "dequal@2.0.3" = fetchurl { + url = "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz"; + hash = "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="; + }; + "destr@2.0.5" = fetchurl { + url = "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz"; + hash = "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="; + }; + "detect-libc@2.1.2" = fetchurl { + url = "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz"; + hash = "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="; + }; + "devalue@5.6.4" = fetchurl { + url = "https://registry.npmjs.org/devalue/-/devalue-5.6.4.tgz"; + hash = "sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA=="; + }; + "devlop@1.1.0" = fetchurl { + url = "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz"; + hash = "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="; + }; + "diff@8.0.4" = fetchurl { + url = "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz"; + hash = "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw=="; + }; + "dlv@1.1.3" = fetchurl { + url = "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz"; + hash = "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="; + }; + "dom-serializer@2.0.0" = fetchurl { + url = "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz"; + hash = "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="; + }; + "domelementtype@2.3.0" = fetchurl { + url = "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz"; + hash = "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="; + }; + "domhandler@5.0.3" = fetchurl { + url = "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz"; + hash = "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="; + }; + "dompurify@3.3.3" = fetchurl { + url = "https://registry.npmjs.org/dompurify/-/dompurify-3.3.3.tgz"; + hash = "sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA=="; + }; + "domutils@3.2.2" = fetchurl { + url = "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz"; + hash = "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="; + }; + "dset@3.1.4" = fetchurl { + url = "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz"; + hash = "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA=="; + }; + "emoji-regex@8.0.0" = fetchurl { + url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz"; + hash = "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="; + }; + "enhanced-resolve@5.20.1" = fetchurl { + url = "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz"; + hash = "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA=="; + }; + "entities@4.5.0" = fetchurl { + url = "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz"; + hash = "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="; + }; + "entities@6.0.1" = fetchurl { + url = "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz"; + hash = "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="; + }; + "es-module-lexer@2.0.0" = fetchurl { + url = "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz"; + hash = "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw=="; + }; + "esbuild@0.27.4" = fetchurl { + url = "https://registry.npmjs.org/esbuild/-/esbuild-0.27.4.tgz"; + hash = "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ=="; + }; + "escalade@3.2.0" = fetchurl { + url = "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz"; + hash = "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="; + }; + "escape-string-regexp@5.0.0" = fetchurl { + url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz"; + hash = "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="; + }; + "esm-env@1.2.2" = fetchurl { + url = "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz"; + hash = "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA=="; + }; + "esrap@2.2.4" = fetchurl { + url = "https://registry.npmjs.org/esrap/-/esrap-2.2.4.tgz"; + hash = "sha512-suICpxAmZ9A8bzJjEl/+rLJiDKC0X4gYWUxT6URAWBLvlXmtbZd5ySMu/N2ZGEtMCAmflUDPSehrP9BQcsGcSg=="; + }; + "estree-walker@2.0.2" = fetchurl { + url = "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz"; + hash = "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="; + }; + "eventemitter3@5.0.4" = fetchurl { + url = "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz"; + hash = "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw=="; + }; + "extend@3.0.2" = fetchurl { + url = "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz"; + hash = "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="; + }; + "fast-string-truncated-width@1.2.1" = fetchurl { + url = "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-1.2.1.tgz"; + hash = "sha512-Q9acT/+Uu3GwGj+5w/zsGuQjh9O1TyywhIwAxHudtWrgF09nHOPrvTLhQevPbttcxjr/SNN7mJmfOw/B1bXgow=="; + }; + "fast-string-width@1.1.0" = fetchurl { + url = "https://registry.npmjs.org/fast-string-width/-/fast-string-width-1.1.0.tgz"; + hash = "sha512-O3fwIVIH5gKB38QNbdg+3760ZmGz0SZMgvwJbA1b2TGXceKE6A2cOlfogh1iw8lr049zPyd7YADHy+B7U4W9bQ=="; + }; + "fast-wrap-ansi@0.1.6" = fetchurl { + url = "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.1.6.tgz"; + hash = "sha512-HlUwET7a5gqjURj70D5jl7aC3Zmy4weA1SHUfM0JFI0Ptq987NH2TwbBFLoERhfwk+E+eaq4EK3jXoT+R3yp3w=="; + }; + "fdir@6.5.0" = fetchurl { + url = "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz"; + hash = "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="; + }; + "flattie@1.1.1" = fetchurl { + url = "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz"; + hash = "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ=="; + }; + "fontace@0.4.1" = fetchurl { + url = "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz"; + hash = "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw=="; + }; + "fontkitten@1.0.3" = fetchurl { + url = "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.3.tgz"; + hash = "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw=="; + }; + "fsevents@2.3.3" = fetchurl { + url = "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz"; + hash = "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="; + }; + "get-caller-file@2.0.5" = fetchurl { + url = "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz"; + hash = "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="; + }; + "github-slugger@2.0.0" = fetchurl { + url = "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz"; + hash = "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="; + }; + "graceful-fs@4.2.11" = fetchurl { + url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz"; + hash = "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="; + }; + "h3@1.15.11" = fetchurl { + url = "https://registry.npmjs.org/h3/-/h3-1.15.11.tgz"; + hash = "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg=="; + }; + "has-flag@4.0.0" = fetchurl { + url = "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"; + hash = "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="; + }; + "hast-util-from-html@2.0.3" = fetchurl { + url = "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz"; + hash = "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw=="; + }; + "hast-util-from-parse5@8.0.3" = fetchurl { + url = "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz"; + hash = "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg=="; + }; + "hast-util-is-element@3.0.0" = fetchurl { + url = "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz"; + hash = "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g=="; + }; + "hast-util-parse-selector@4.0.0" = fetchurl { + url = "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz"; + hash = "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A=="; + }; + "hast-util-raw@9.1.0" = fetchurl { + url = "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz"; + hash = "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw=="; + }; + "hast-util-to-html@9.0.5" = fetchurl { + url = "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz"; + hash = "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="; + }; + "hast-util-to-parse5@8.0.1" = fetchurl { + url = "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz"; + hash = "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA=="; + }; + "hast-util-to-text@4.0.2" = fetchurl { + url = "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz"; + hash = "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A=="; + }; + "hast-util-whitespace@3.0.0" = fetchurl { + url = "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz"; + hash = "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="; + }; + "hastscript@9.0.1" = fetchurl { + url = "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz"; + hash = "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w=="; + }; + "html-escaper@3.0.3" = fetchurl { + url = "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz"; + hash = "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ=="; + }; + "html-void-elements@3.0.0" = fetchurl { + url = "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz"; + hash = "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="; + }; + "http-cache-semantics@4.2.0" = fetchurl { + url = "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz"; + hash = "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="; + }; + "iron-webcrypto@1.2.1" = fetchurl { + url = "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz"; + hash = "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg=="; + }; + "is-docker@3.0.0" = fetchurl { + url = "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz"; + hash = "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="; + }; + "is-fullwidth-code-point@3.0.0" = fetchurl { + url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz"; + hash = "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="; + }; + "is-inside-container@1.0.0" = fetchurl { + url = "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz"; + hash = "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="; + }; + "is-plain-obj@4.1.0" = fetchurl { + url = "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz"; + hash = "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="; + }; + "is-reference@3.0.3" = fetchurl { + url = "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz"; + hash = "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw=="; + }; + "is-wsl@3.1.1" = fetchurl { + url = "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz"; + hash = "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw=="; + }; + "jiti@2.6.1" = fetchurl { + url = "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz"; + hash = "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="; + }; + "js-yaml@4.1.1" = fetchurl { + url = "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz"; + hash = "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="; + }; + "lightningcss-android-arm64@1.32.0" = fetchurl { + url = "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz"; + hash = "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="; + }; + "lightningcss-darwin-arm64@1.32.0" = fetchurl { + url = "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz"; + hash = "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="; + }; + "lightningcss-darwin-x64@1.32.0" = fetchurl { + url = "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz"; + hash = "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="; + }; + "lightningcss-freebsd-x64@1.32.0" = fetchurl { + url = "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz"; + hash = "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="; + }; + "lightningcss-linux-arm-gnueabihf@1.32.0" = fetchurl { + url = "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz"; + hash = "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="; + }; + "lightningcss-linux-arm64-gnu@1.32.0" = fetchurl { + url = "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz"; + hash = "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="; + }; + "lightningcss-linux-arm64-musl@1.32.0" = fetchurl { + url = "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz"; + hash = "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="; + }; + "lightningcss-linux-x64-gnu@1.32.0" = fetchurl { + url = "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz"; + hash = "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="; + }; + "lightningcss-linux-x64-musl@1.32.0" = fetchurl { + url = "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz"; + hash = "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="; + }; + "lightningcss-win32-arm64-msvc@1.32.0" = fetchurl { + url = "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz"; + hash = "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="; + }; + "lightningcss-win32-x64-msvc@1.32.0" = fetchurl { + url = "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz"; + hash = "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="; + }; + "lightningcss@1.32.0" = fetchurl { + url = "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz"; + hash = "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="; + }; + "locate-character@3.0.0" = fetchurl { + url = "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz"; + hash = "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA=="; + }; + "longest-streak@3.1.0" = fetchurl { + url = "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz"; + hash = "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="; + }; + "lru-cache@11.2.7" = fetchurl { + url = "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz"; + hash = "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA=="; + }; + "magic-string@0.30.21" = fetchurl { + url = "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz"; + hash = "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="; + }; + "magicast@0.5.2" = fetchurl { + url = "https://registry.npmjs.org/magicast/-/magicast-0.5.2.tgz"; + hash = "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ=="; + }; + "markdown-table@3.0.4" = fetchurl { + url = "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz"; + hash = "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="; + }; + "mdast-util-definitions@6.0.0" = fetchurl { + url = "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz"; + hash = "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ=="; + }; + "mdast-util-find-and-replace@3.0.2" = fetchurl { + url = "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz"; + hash = "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg=="; + }; + "mdast-util-from-markdown@2.0.3" = fetchurl { + url = "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz"; + hash = "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q=="; + }; + "mdast-util-gfm-autolink-literal@2.0.1" = fetchurl { + url = "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz"; + hash = "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ=="; + }; + "mdast-util-gfm-footnote@2.1.0" = fetchurl { + url = "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz"; + hash = "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ=="; + }; + "mdast-util-gfm-strikethrough@2.0.0" = fetchurl { + url = "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz"; + hash = "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg=="; + }; + "mdast-util-gfm-table@2.0.0" = fetchurl { + url = "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz"; + hash = "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg=="; + }; + "mdast-util-gfm-task-list-item@2.0.0" = fetchurl { + url = "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz"; + hash = "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ=="; + }; + "mdast-util-gfm@3.1.0" = fetchurl { + url = "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz"; + hash = "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ=="; + }; + "mdast-util-phrasing@4.1.0" = fetchurl { + url = "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz"; + hash = "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w=="; + }; + "mdast-util-to-hast@13.2.1" = fetchurl { + url = "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz"; + hash = "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA=="; + }; + "mdast-util-to-markdown@2.1.2" = fetchurl { + url = "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz"; + hash = "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA=="; + }; + "mdast-util-to-string@4.0.0" = fetchurl { + url = "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz"; + hash = "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="; + }; + "mdn-data@2.0.28" = fetchurl { + url = "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz"; + hash = "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="; + }; + "mdn-data@2.27.1" = fetchurl { + url = "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz"; + hash = "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ=="; + }; + "micromark-core-commonmark@2.0.3" = fetchurl { + url = "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz"; + hash = "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg=="; + }; + "micromark-extension-gfm-autolink-literal@2.1.0" = fetchurl { + url = "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz"; + hash = "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw=="; + }; + "micromark-extension-gfm-footnote@2.1.0" = fetchurl { + url = "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz"; + hash = "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw=="; + }; + "micromark-extension-gfm-strikethrough@2.1.0" = fetchurl { + url = "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz"; + hash = "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw=="; + }; + "micromark-extension-gfm-table@2.1.1" = fetchurl { + url = "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz"; + hash = "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg=="; + }; + "micromark-extension-gfm-tagfilter@2.0.0" = fetchurl { + url = "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz"; + hash = "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg=="; + }; + "micromark-extension-gfm-task-list-item@2.1.0" = fetchurl { + url = "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz"; + hash = "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw=="; + }; + "micromark-extension-gfm@3.0.0" = fetchurl { + url = "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz"; + hash = "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w=="; + }; + "micromark-factory-destination@2.0.1" = fetchurl { + url = "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz"; + hash = "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA=="; + }; + "micromark-factory-label@2.0.1" = fetchurl { + url = "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz"; + hash = "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg=="; + }; + "micromark-factory-space@2.0.1" = fetchurl { + url = "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz"; + hash = "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="; + }; + "micromark-factory-title@2.0.1" = fetchurl { + url = "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz"; + hash = "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw=="; + }; + "micromark-factory-whitespace@2.0.1" = fetchurl { + url = "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz"; + hash = "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ=="; + }; + "micromark-util-character@2.1.1" = fetchurl { + url = "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz"; + hash = "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="; + }; + "micromark-util-chunked@2.0.1" = fetchurl { + url = "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz"; + hash = "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA=="; + }; + "micromark-util-classify-character@2.0.1" = fetchurl { + url = "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz"; + hash = "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q=="; + }; + "micromark-util-combine-extensions@2.0.1" = fetchurl { + url = "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz"; + hash = "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg=="; + }; + "micromark-util-decode-numeric-character-reference@2.0.2" = fetchurl { + url = "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz"; + hash = "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw=="; + }; + "micromark-util-decode-string@2.0.1" = fetchurl { + url = "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz"; + hash = "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ=="; + }; + "micromark-util-encode@2.0.1" = fetchurl { + url = "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz"; + hash = "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="; + }; + "micromark-util-html-tag-name@2.0.1" = fetchurl { + url = "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz"; + hash = "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA=="; + }; + "micromark-util-normalize-identifier@2.0.1" = fetchurl { + url = "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz"; + hash = "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q=="; + }; + "micromark-util-resolve-all@2.0.1" = fetchurl { + url = "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz"; + hash = "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg=="; + }; + "micromark-util-sanitize-uri@2.0.1" = fetchurl { + url = "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz"; + hash = "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ=="; + }; + "micromark-util-subtokenize@2.1.0" = fetchurl { + url = "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz"; + hash = "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA=="; + }; + "micromark-util-symbol@2.0.1" = fetchurl { + url = "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz"; + hash = "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="; + }; + "micromark-util-types@2.0.2" = fetchurl { + url = "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz"; + hash = "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="; + }; + "micromark@4.0.2" = fetchurl { + url = "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz"; + hash = "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA=="; + }; + "mrmime@2.0.1" = fetchurl { + url = "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz"; + hash = "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="; + }; + "ms@2.1.3" = fetchurl { + url = "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"; + hash = "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="; + }; + "nanoid@3.3.11" = fetchurl { + url = "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz"; + hash = "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="; + }; + "neotraverse@0.6.18" = fetchurl { + url = "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz"; + hash = "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA=="; + }; + "nlcst-to-string@4.0.0" = fetchurl { + url = "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz"; + hash = "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA=="; + }; + "node-fetch-native@1.6.7" = fetchurl { + url = "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz"; + hash = "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="; + }; + "node-mock-http@1.0.4" = fetchurl { + url = "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz"; + hash = "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ=="; + }; + "normalize-path@3.0.0" = fetchurl { + url = "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz"; + hash = "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="; + }; + "nth-check@2.1.1" = fetchurl { + url = "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz"; + hash = "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="; + }; + "obug@2.1.1" = fetchurl { + url = "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz"; + hash = "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ=="; + }; + "ofetch@1.5.1" = fetchurl { + url = "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz"; + hash = "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA=="; + }; + "ohash@2.0.11" = fetchurl { + url = "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz"; + hash = "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="; + }; + "oniguruma-parser@0.12.1" = fetchurl { + url = "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz"; + hash = "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w=="; + }; + "oniguruma-to-es@4.3.5" = fetchurl { + url = "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.5.tgz"; + hash = "sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ=="; + }; + "p-limit@7.3.0" = fetchurl { + url = "https://registry.npmjs.org/p-limit/-/p-limit-7.3.0.tgz"; + hash = "sha512-7cIXg/Z0M5WZRblrsOla88S4wAK+zOQQWeBYfV3qJuJXMr+LnbYjaadrFaS0JILfEDPVqHyKnZ1Z/1d6J9VVUw=="; + }; + "p-queue@9.1.1" = fetchurl { + url = "https://registry.npmjs.org/p-queue/-/p-queue-9.1.1.tgz"; + hash = "sha512-yQS1vV2V7Q14MQrgD8jMNY5owPuGgVHVdSK8NqmKpOVajnjbaeMa6uLOzTALPtvJ7Vo4bw0BGsw7qfUT8z24Ig=="; + }; + "p-timeout@7.0.1" = fetchurl { + url = "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz"; + hash = "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg=="; + }; + "package-manager-detector@1.6.0" = fetchurl { + url = "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz"; + hash = "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA=="; + }; + "parse-latin@7.0.0" = fetchurl { + url = "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz"; + hash = "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ=="; + }; + "parse5@7.3.0" = fetchurl { + url = "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz"; + hash = "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="; + }; + "piccolore@0.1.3" = fetchurl { + url = "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz"; + hash = "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw=="; + }; + "picocolors@1.1.1" = fetchurl { + url = "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz"; + hash = "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="; + }; + "picomatch@2.3.2" = fetchurl { + url = "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz"; + hash = "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="; + }; + "picomatch@4.0.4" = fetchurl { + url = "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz"; + hash = "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="; + }; + "postcss-selector-parser@6.0.10" = fetchurl { + url = "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz"; + hash = "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w=="; + }; + "postcss@8.5.8" = fetchurl { + url = "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz"; + hash = "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="; + }; + "prismjs@1.30.0" = fetchurl { + url = "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz"; + hash = "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="; + }; + "property-information@7.1.0" = fetchurl { + url = "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz"; + hash = "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="; + }; + "radix3@1.1.2" = fetchurl { + url = "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz"; + hash = "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA=="; + }; + "readdirp@5.0.0" = fetchurl { + url = "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz"; + hash = "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="; + }; + "regex-recursion@6.0.2" = fetchurl { + url = "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz"; + hash = "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg=="; + }; + "regex-utilities@2.3.0" = fetchurl { + url = "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz"; + hash = "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="; + }; + "regex@6.1.0" = fetchurl { + url = "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz"; + hash = "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg=="; + }; + "rehype-parse@9.0.1" = fetchurl { + url = "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz"; + hash = "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag=="; + }; + "rehype-raw@7.0.0" = fetchurl { + url = "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz"; + hash = "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww=="; + }; + "rehype-stringify@10.0.1" = fetchurl { + url = "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz"; + hash = "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA=="; + }; + "rehype@13.0.2" = fetchurl { + url = "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz"; + hash = "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A=="; + }; + "remark-gfm@4.0.1" = fetchurl { + url = "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz"; + hash = "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg=="; + }; + "remark-github-blockquote-alert@2.1.0" = fetchurl { + url = "https://registry.npmjs.org/remark-github-blockquote-alert/-/remark-github-blockquote-alert-2.1.0.tgz"; + hash = "sha512-J392jmIP684d7iGsENN0uguL10IGbRdc8bTUSrd/jOLzdWkwg721Fj3JPQGN8tF6fTIrE5HHOIA3nBuwuaeuPQ=="; + }; + "remark-parse@11.0.0" = fetchurl { + url = "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz"; + hash = "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA=="; + }; + "remark-rehype@11.1.2" = fetchurl { + url = "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz"; + hash = "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw=="; + }; + "remark-smartypants@3.0.2" = fetchurl { + url = "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz"; + hash = "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA=="; + }; + "remark-stringify@11.0.0" = fetchurl { + url = "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz"; + hash = "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw=="; + }; + "require-directory@2.1.1" = fetchurl { + url = "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz"; + hash = "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="; + }; + "retext-latin@4.0.0" = fetchurl { + url = "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz"; + hash = "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA=="; + }; + "retext-smartypants@6.2.0" = fetchurl { + url = "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz"; + hash = "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ=="; + }; + "retext-stringify@4.0.0" = fetchurl { + url = "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz"; + hash = "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA=="; + }; + "retext@9.0.0" = fetchurl { + url = "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz"; + hash = "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA=="; + }; + "rollup@4.60.1" = fetchurl { + url = "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz"; + hash = "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w=="; + }; + "rxjs@7.8.2" = fetchurl { + url = "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz"; + hash = "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="; + }; + "sax@1.6.0" = fetchurl { + url = "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz"; + hash = "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA=="; + }; + "scule@1.3.0" = fetchurl { + url = "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz"; + hash = "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g=="; + }; + "semver@7.7.4" = fetchurl { + url = "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz"; + hash = "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="; + }; + "sharp@0.34.5" = fetchurl { + url = "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz"; + hash = "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg=="; + }; + "shell-quote@1.8.3" = fetchurl { + url = "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz"; + hash = "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw=="; + }; + "shiki@4.0.2" = fetchurl { + url = "https://registry.npmjs.org/shiki/-/shiki-4.0.2.tgz"; + hash = "sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ=="; + }; + "sisteransi@1.0.5" = fetchurl { + url = "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz"; + hash = "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="; + }; + "smol-toml@1.6.1" = fetchurl { + url = "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.1.tgz"; + hash = "sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg=="; + }; + "source-map-js@1.2.1" = fetchurl { + url = "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz"; + hash = "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="; + }; + "space-separated-tokens@2.0.2" = fetchurl { + url = "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz"; + hash = "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="; + }; + "string-width@4.2.3" = fetchurl { + url = "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"; + hash = "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="; + }; + "stringify-entities@4.0.4" = fetchurl { + url = "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz"; + hash = "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="; + }; + "strip-ansi@6.0.1" = fetchurl { + url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"; + hash = "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="; + }; + "supports-color@7.2.0" = fetchurl { + url = "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"; + hash = "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="; + }; + "supports-color@8.1.1" = fetchurl { + url = "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz"; + hash = "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="; + }; + "svelte2tsx@0.7.53" = fetchurl { + url = "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.53.tgz"; + hash = "sha512-ljVSwmnYRDHRm8+7ICP6QoAN7U7vgOFfPBLN6T745YWNYqRRSzHxlrzUVqMjYls2Un8MzJissfziy/38e6Deeg=="; + }; + "svelte@5.55.1" = fetchurl { + url = "https://registry.npmjs.org/svelte/-/svelte-5.55.1.tgz"; + hash = "sha512-QjvU7EFemf6mRzdMGlAFttMWtAAVXrax61SZYHdkD6yoVGQ89VeyKfZD4H1JrV1WLmJBxWhFch9H6ig/87VGjw=="; + }; + "svgo@4.0.1" = fetchurl { + url = "https://registry.npmjs.org/svgo/-/svgo-4.0.1.tgz"; + hash = "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w=="; + }; + "tailwindcss@4.2.2" = fetchurl { + url = "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.2.tgz"; + hash = "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q=="; + }; + "tapable@2.3.2" = fetchurl { + url = "https://registry.npmjs.org/tapable/-/tapable-2.3.2.tgz"; + hash = "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA=="; + }; + "tiny-inflate@1.0.3" = fetchurl { + url = "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz"; + hash = "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="; + }; + "tinyclip@0.1.12" = fetchurl { + url = "https://registry.npmjs.org/tinyclip/-/tinyclip-0.1.12.tgz"; + hash = "sha512-Ae3OVUqifDw0wBriIBS7yVaW44Dp6eSHQcyq4Igc7eN2TJH/2YsicswaW+J/OuMvhpDPOKEgpAZCjkb4hpoyeA=="; + }; + "tinyexec@1.0.4" = fetchurl { + url = "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.4.tgz"; + hash = "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw=="; + }; + "tinyglobby@0.2.15" = fetchurl { + url = "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz"; + hash = "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="; + }; + "tree-kill@1.2.2" = fetchurl { + url = "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz"; + hash = "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="; + }; + "trim-lines@3.0.1" = fetchurl { + url = "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz"; + hash = "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="; + }; + "trough@2.2.0" = fetchurl { + url = "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz"; + hash = "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="; + }; + "tsconfck@3.1.6" = fetchurl { + url = "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz"; + hash = "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w=="; + }; + "tslib@2.8.1" = fetchurl { + url = "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz"; + hash = "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="; + }; + "typescript@5.9.3" = fetchurl { + url = "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz"; + hash = "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="; + }; + "ufo@1.6.3" = fetchurl { + url = "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz"; + hash = "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="; + }; + "ultrahtml@1.6.0" = fetchurl { + url = "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz"; + hash = "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw=="; + }; + "uncrypto@0.1.3" = fetchurl { + url = "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz"; + hash = "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="; + }; + "undici-types@7.18.2" = fetchurl { + url = "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz"; + hash = "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="; + }; + "unified@11.0.5" = fetchurl { + url = "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz"; + hash = "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="; + }; + "unifont@0.7.4" = fetchurl { + url = "https://registry.npmjs.org/unifont/-/unifont-0.7.4.tgz"; + hash = "sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg=="; + }; + "unist-util-find-after@5.0.0" = fetchurl { + url = "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz"; + hash = "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ=="; + }; + "unist-util-is@6.0.1" = fetchurl { + url = "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz"; + hash = "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="; + }; + "unist-util-modify-children@4.0.0" = fetchurl { + url = "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz"; + hash = "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw=="; + }; + "unist-util-position@5.0.0" = fetchurl { + url = "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz"; + hash = "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="; + }; + "unist-util-remove-position@5.0.0" = fetchurl { + url = "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz"; + hash = "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q=="; + }; + "unist-util-stringify-position@4.0.0" = fetchurl { + url = "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz"; + hash = "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="; + }; + "unist-util-visit-children@3.0.0" = fetchurl { + url = "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz"; + hash = "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA=="; + }; + "unist-util-visit-parents@6.0.2" = fetchurl { + url = "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz"; + hash = "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="; + }; + "unist-util-visit@5.1.0" = fetchurl { + url = "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz"; + hash = "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="; + }; + "unstorage@1.17.5" = fetchurl { + url = "https://registry.npmjs.org/unstorage/-/unstorage-1.17.5.tgz"; + hash = "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg=="; + }; + "util-deprecate@1.0.2" = fetchurl { + url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"; + hash = "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="; + }; + "vfile-location@5.0.3" = fetchurl { + url = "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz"; + hash = "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg=="; + }; + "vfile-message@4.0.3" = fetchurl { + url = "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz"; + hash = "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="; + }; + "vfile@6.0.3" = fetchurl { + url = "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz"; + hash = "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="; + }; + "vite@7.3.1" = fetchurl { + url = "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz"; + hash = "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="; + }; + "vitefu@1.1.3" = fetchurl { + url = "https://registry.npmjs.org/vitefu/-/vitefu-1.1.3.tgz"; + hash = "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg=="; + }; + "web-namespaces@2.0.1" = fetchurl { + url = "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz"; + hash = "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="; + }; + "which-pm-runs@1.1.0" = fetchurl { + url = "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz"; + hash = "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA=="; + }; + "wrap-ansi@7.0.0" = fetchurl { + url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz"; + hash = "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="; + }; + "xxhash-wasm@1.1.0" = fetchurl { + url = "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz"; + hash = "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA=="; + }; + "y18n@5.0.8" = fetchurl { + url = "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz"; + hash = "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="; + }; + "yargs-parser@21.1.1" = fetchurl { + url = "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz"; + hash = "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="; + }; + "yargs-parser@22.0.0" = fetchurl { + url = "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz"; + hash = "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw=="; + }; + "yargs@17.7.2" = fetchurl { + url = "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz"; + hash = "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="; + }; + "yocto-queue@1.2.2" = fetchurl { + url = "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz"; + hash = "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ=="; + }; + "zimmerframe@1.1.4" = fetchurl { + url = "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz"; + hash = "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ=="; + }; + "zod@4.3.6" = fetchurl { + url = "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz"; + hash = "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="; + }; + "zwitch@2.0.4" = fetchurl { + url = "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz"; + hash = "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="; + }; +} diff --git a/front/package.json b/front/package.json new file mode 100644 index 0000000..d01d83b --- /dev/null +++ b/front/package.json @@ -0,0 +1,34 @@ +{ + "name": "iknowyou", + "type": "module", + "version": "1.0.0", + "scripts": { + "dev:frontend": "astro dev", + "dev:backend": "cd ../back/ && air", + "dev": "concurrently \"bun dev:frontend\" \"bun dev:backend\"", + "build": "astro build", + "preview": "astro preview", + "astro": "astro" + }, + "dependencies": { + "@astrojs/svelte": "8.0.4", + "@lucide/svelte": "^1.7.0", + "@tailwindcss/vite": "^4.2.1", + "ansi_up": "^6.0.6", + "astro": "6.1.2", + "dompurify": "^3.3.3", + "js-yaml": "^4.1.1", + "remark-github-blockquote-alert": "^2.1.0", + "svelte": "^5.53.12", + "tailwindcss": "^4.2.1", + "typescript": "^5.9.3" + }, + "devDependencies": { + "@tailwindcss/typography": "^0.5.19", + "@types/dompurify": "^3.2.0", + "@types/js-yaml": "^4.0.9", + "@types/node": "^25.5.0", + "concurrently": "^9.2.1", + "daisyui": "^5.5.19" + } +} diff --git a/front/public/.well-known/security.txt b/front/public/.well-known/security.txt new file mode 100644 index 0000000..99a2956 --- /dev/null +++ b/front/public/.well-known/security.txt @@ -0,0 +1,5 @@ +Contact: mailto:anotherhadi.clapped234[at]passmail.net +Expires: 2028-12-31T23:00:00.000Z +Encryption: /anotherhadi.asc +Preferred-Languages: en, fr +Canonical: /.well-known/security.txt diff --git a/front/public/Wrench.svg b/front/public/Wrench.svg new file mode 100644 index 0000000..980159b --- /dev/null +++ b/front/public/Wrench.svg @@ -0,0 +1 @@ + diff --git a/front/public/anotherhadi.asc b/front/public/anotherhadi.asc new file mode 100644 index 0000000..174ea26 --- /dev/null +++ b/front/public/anotherhadi.asc @@ -0,0 +1,52 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +/jkWmwL9 +=4VM7 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/front/public/favicon.svg b/front/public/favicon.svg new file mode 100644 index 0000000..0882396 --- /dev/null +++ b/front/public/favicon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/front/public/fonts/unbounded-black.ttf b/front/public/fonts/unbounded-black.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8e28e351f0e2604e47464c58db7526e49d3d8928 GIT binary patch literal 417616 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
    DMqYSZ`uru-;+4kAXoSJURe2 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
  1. ?obdlK>W?cFIG2^QLj~Q40f6Tb%|6|6r{~t51 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 {~@cnDzd@1kaUQgXbeatJ*-VgrCfg;1!8? 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 diff --git a/front/src/components/DemoBanner.svelte b/front/src/components/DemoBanner.svelte new file mode 100644 index 0000000..40e3080 --- /dev/null +++ b/front/src/components/DemoBanner.svelte @@ -0,0 +1,24 @@ + + +{#if demo} +
    + + Demo mode — searches and configuration changes are disabled +
    +{/if} diff --git a/front/src/components/HomePage.svelte b/front/src/components/HomePage.svelte new file mode 100644 index 0000000..4fd77ae --- /dev/null +++ b/front/src/components/HomePage.svelte @@ -0,0 +1,98 @@ + + +
    + +
    + {#if redirecting} +
    + +

    + Searching {redirectTarget}... +

    +
    + {:else} + + {/if} +
    + +
    +
    +

    Recent searches

    + +
    + + {#if loadError} +
    {loadError}
    + {:else} + + {/if} +
    + +
    diff --git a/front/src/components/Nav.svelte b/front/src/components/Nav.svelte new file mode 100644 index 0000000..ff59528 --- /dev/null +++ b/front/src/components/Nav.svelte @@ -0,0 +1,136 @@ + + +
    + +
    diff --git a/front/src/components/ProfileSettings.svelte b/front/src/components/ProfileSettings.svelte new file mode 100644 index 0000000..a012756 --- /dev/null +++ b/front/src/components/ProfileSettings.svelte @@ -0,0 +1,571 @@ + + +{#if loading} +
    + +
    +{:else if error} +
    {error}
    +{:else} +
    + +
    +
    + Profiles + {#if !configReadonly} + + {/if} +
    + + {#if showNewProfile && !configReadonly} +
    + e.key === "Enter" && createProfile()} + /> + {#if newProfileError} +

    {newProfileError}

    + {/if} + +
    + {/if} + + {#each profiles as p} +
    + + {#if !p.readonly} + + {/if} +
    + {/each} + + {#if profiles.length === 0} +

    No profiles yet.

    + {/if} +
    + +
    + {#if configReadonly} +
    + + Config is managed externally and is read-only. +
    + {/if} + {#if !selectedProfile} +

    Select a profile to view it.

    + {:else if profileLoading} +
    + +
    + {:else if profileDetail} +
    + +
    +

    + {#if isReadonly}{/if} + {selectedProfile} +

    + {#if isReadonly} + + {/if} + {#if profileDetail.active_tools?.length > 0} + + {profileDetail.active_tools.length} active tool{profileDetail.active_tools.length !== 1 ? "s" : ""} + + {/if} +
    + + {#if isReadonly} + {#if profileDetail.notes} +

    {profileDetail.notes}

    + {/if} + {:else} +
    + Notes + +
    + {/if} + +
    +
    +
    +

    Rules

    + {#if !isReadonly && rulesMsg} + {rulesMsg.text} + {/if} +
    + +
    + + Enabled + + +
    + {#if isReadonly} + {#each (profileDetail.enabled ?? []) as toolName} + {toolName} + {/each} + {#if (profileDetail.enabled ?? []).length === 0} + All tools + {/if} + {:else} + {#each enabledEdit as toolName} + + {toolName} + + + {/each} + !disabledEdit.includes(n))} + placeholder="add tool" + size="xs" + onselect={(val) => (disabledEdit = [...disabledEdit, val])} + /> + {/if} +
    +
    + + {#if !isReadonly} + + {/if} +
    +
    + + {#if !isReadonly} +
    +
    +
    +

    Tool overrides

    + {#if availableForOverride.length > 0} + + + {overrideEdits[toolName][field.name] ? "enabled" : "disabled"} + + + {:else if field.type === "int"} + + {:else if field.type === "float"} + + {:else if field.type === "enum"} + + {:else} + + {/if} +
    + {/each} +
    + + {:else} +

    This tool has no configurable fields.

    + {/if} +
    + {/each} +
    + {/if} +
    +
    + {/if} + + + {/if} + + +{/if} diff --git a/front/src/components/SearchBar.svelte b/front/src/components/SearchBar.svelte new file mode 100644 index 0000000..3e0e665 --- /dev/null +++ b/front/src/components/SearchBar.svelte @@ -0,0 +1,232 @@ + + +
    + {#if error} +
    {error}
    + {/if} + + {#if showRevert} +
    + Switched to {inputType} + +
    + {/if} + + +
    +
    + e.key === "Enter" && submit()} + disabled={demo} + /> +
    +
    +
    + type + { profile = v; }} + /> +
    + +
    +
    + + + + {/if} + +
    +{/if} diff --git a/front/src/components/ToolList.svelte b/front/src/components/ToolList.svelte new file mode 100644 index 0000000..1167152 --- /dev/null +++ b/front/src/components/ToolList.svelte @@ -0,0 +1,346 @@ + + +{#snippet toolCard(tool, missing)} +
    +
    +
    + +
    + +
    +
    + {tool.name} + {#if tool.unavailable} + + unavailable + + {:else if missing} + + config required + + {/if} +
    + {#if tool.unavailable && tool.unavailable_reason} +

    + {tool.unavailable_reason} +

    + {:else if tool.description} +

    + {tool.description} +

    + {/if} +
    + {#each tool.input_types as t} + {t} + {/each} +
    +
    +
    +
    +{/snippet} + +{#if loading} +
    + +
    +{:else if error} +
    {error}
    +{:else} +
    +
    + Profile + (selectedInputType = val)} + /> +
    +
    + + {#if tools.length === 0} +

    + No tools registered. +

    + {:else} +
    + {#if active.length > 0} +
    +
    + + Active + {active.length} +
    +
    + {#each active as tool} + + {@render toolCard(tool, false)} + + {/each} +
    +
    + {/if} + + {#if activeMissing.length > 0} +
    +
    + + Active - required config missing + {activeMissing.length} +
    +
    + {#each activeMissing as tool} + + {@render toolCard(tool, true)} + + {/each} +
    +
    + {/if} + + {#if activeUnavail.length > 0} +
    +
    + + Active - unavailable + {activeUnavail.length} +
    +
    + {#each activeUnavail as tool} + + {@render toolCard(tool, false)} + + {/each} +
    +
    + {/if} + + {#if active.length + activeMissing.length + activeUnavail.length > 0 && inactive.length + inactiveMissing.length + inactiveUnavail.length > 0} +
    + {/if} + + {#if inactive.length > 0} +
    +
    + + Disabled + {inactive.length} +
    +
    + {#each inactive as tool} + + {@render toolCard(tool, false)} + + {/each} +
    +
    + {/if} + + {#if inactiveMissing.length > 0} +
    +
    + + Disabled - required config missing + {inactiveMissing.length} +
    +
    + {#each inactiveMissing as tool} + + {@render toolCard(tool, true)} + + {/each} +
    +
    + {/if} + + {#if inactiveUnavail.length > 0} +
    +
    + + Disabled - unavailable + {inactiveUnavail.length} +
    +
    + {#each inactiveUnavail as tool} + + {@render toolCard(tool, false)} + + {/each} +
    +
    + {/if} +
    + {/if} +{/if} diff --git a/front/src/components/comps/Badge.svelte b/front/src/components/comps/Badge.svelte new file mode 100644 index 0000000..15c46e7 --- /dev/null +++ b/front/src/components/comps/Badge.svelte @@ -0,0 +1,29 @@ + + + + {#if loading} + + {:else if IconComponent} + + {/if} + {text} + diff --git a/front/src/components/comps/InfoTip.svelte b/front/src/components/comps/InfoTip.svelte new file mode 100644 index 0000000..ac6ef40 --- /dev/null +++ b/front/src/components/comps/InfoTip.svelte @@ -0,0 +1,13 @@ + + +
    + +
    diff --git a/front/src/components/comps/Select.svelte b/front/src/components/comps/Select.svelte new file mode 100644 index 0000000..ccf5112 --- /dev/null +++ b/front/src/components/comps/Select.svelte @@ -0,0 +1,84 @@ + + + { + if (container && !container.contains(e.target)) { + open = false; + query = ""; + } +}} /> + +
    + + + {#if open} +
    +
    + { if (e.key === "Escape") { open = false; query = ""; } }} + /> +
    +
      + {#if filtered.length === 0} +
    • No results
    • + {:else} + {#each filtered as option} +
    • + +
    • + {/each} + {/if} +
    +
    + {/if} +
    diff --git a/front/src/components/comps/ToolIcon.svelte b/front/src/components/comps/ToolIcon.svelte new file mode 100644 index 0000000..2ecdc6f --- /dev/null +++ b/front/src/components/comps/ToolIcon.svelte @@ -0,0 +1,29 @@ + + +{#if iconName} + {iconName { + const target = e.currentTarget as HTMLImageElement; + target.src = genericFallbackUrl; + }} + /> +{:else} + {"Tool +{/if} diff --git a/front/src/components/comps/TtyOutput.svelte b/front/src/components/comps/TtyOutput.svelte new file mode 100644 index 0000000..de8e136 --- /dev/null +++ b/front/src/components/comps/TtyOutput.svelte @@ -0,0 +1,63 @@ + + +{#if html} +
    {@html html}
    +{/if} + + diff --git a/front/src/content.config.ts b/front/src/content.config.ts new file mode 100644 index 0000000..984afa4 --- /dev/null +++ b/front/src/content.config.ts @@ -0,0 +1,14 @@ +import { defineCollection, z } from "astro:content"; +import { glob } from "astro/loaders"; + +const cheatsheets = defineCollection({ + loader: glob({ pattern: "**/*.md", base: "./src/content/cheatsheets" }), + schema: z.object({ + title: z.string(), + description: z.string().optional(), + order: z.number().optional(), + tags: z.array(z.string()).optional(), + }), +}); + +export const collections = { cheatsheets }; diff --git a/front/src/content/cheatsheets/github-osint.md b/front/src/content/cheatsheets/github-osint.md new file mode 100644 index 0000000..35d968e --- /dev/null +++ b/front/src/content/cheatsheets/github-osint.md @@ -0,0 +1,134 @@ +--- +title: "Unmasking Github Users: How to Identify the Person Behind Any Github Profile" +description: "Ever wondered who is behind a specific Github username? This guide covers advanced OSINT techniques to deanonymize users, find hidden email addresses, and link Github accounts to real-world identities." +tags: [github, social] +--- + +In the world of Open-Source Intelligence (OSINT), we often focus on social media platforms like Twitter or LinkedIn. However, developers frequently leave behind much more detailed personal information on **Github**. + +Whether you are a recruiter, a security researcher, or a digital investigator, Github is a goldmine. Why? Because while a user might choose a cryptic handle like `anotherhadi`, their Git configuration often reveals their real name and email address. + +## Level 1: The Low-Hanging Fruit + +Before diving into technical exploits, start with the obvious. Many users forget how much they have shared in their profile settings. + +- **The Bio & Location**: Even a vague location like "Montpellier, France," combined with a niche tech stack (e.g., "COBOL expert"), significantly narrows down the search. +- **External Links**: Check the personal website or blog link. Run a WHOIS lookup on that domain to find registration details. Use other OSINT tools and techniques on those websites to pivot further. +- **The Profile Picture**: Right-click the avatar and use Google Reverse Image Search, Yandex, or other reverse image engines. Developers often use the same professional headshot on Github as they do on LinkedIn. + +## Level 2: Digging into Commits + +This is the **most effective OSINT** method. While Github masks author names and emails in the web view, this information is permanently embedded in the commit metadata. + +### The `.patch` Method + +Find a repository where the target has contributed. Open any commit they made, and simply add `.patch` to the end of the URL. + +- **URL**: `https://github.com/{username}/{repo}/commit/{commit_hash}.patch` +- Look at the `From:` line. It should look like this: `From: John Doe ` + +For example, check: [github.com/anotherhadi/nixy/commit/e6873e8caae491073d8ab7daad9d2e50a04490ce.patch](https://github.com/anotherhadi/nixy/commit/e6873e8caae491073d8ab7daad9d2e50a04490ce.patch) + +### The API Events Method + +If you cannot find a recent commit, check their **public activity** stream via the Github API. + +- **Go to**: `https://api.github.com/users/{target_username}/events/public` +- Search (Ctrl+F) for the word `email`. You will often find the **email address** associated with their `PushEvent` headers, even if they have "Keep my email addresses private" enabled in their current settings. + +## The Verification Loop: Linking Email to Account + +If you have found an email address and want to be 100% sure it belongs to a specific Github profile, you can use Github’s own attribution engine against itself. + +### The Email Spoofing Method + +While the previous methods help you find an email _from_ a profile, this technique does the opposite: it identifies which Github account is linked to a specific email address. + +**How it works:** +Github attributes commits based on the email address found in the Git metadata. If you push a commit using a specific email, Github will automatically link that commit to the account associated with that address as its **primary email**. + +**The Process:** + +1. **Initialize a local repo:** `git init investigation` +2. **Configure the target email:** `git config user.email "target@example.com"` and `git config user.name "A Username"` +3. **Create a dummy commit:** `echo "test" > probe.txt && git add . && git commit -m "Probe"` +4. **Push to a repo you own:** Create a new empty repository on your Github account and push the code there. +5. **Observe the result:** Go to the commit history on the Github web interface. The avatar and username of the account linked to that email will appear as the author of the commit. + +> **Note:** This method only works if the target email is set as the **Primary Email** on the user's account. It is a foolproof way to confirm if an email address you found elsewhere belongs to a specific Github user. + +### The Search Index: Finding Hidden Contributions + +Even if an email address is not listed on a user's profile, it may still be indexed within Github's global search. +Github allows you to filter search results by the metadata fields of a commit. +This is particularly useful if the target has **contributed to public repositories** using their real email. + +You can use these specific qualifiers in the **Github search bar** (select the "Commits" tab): + +- `author-email:target@example.com`: Finds commits where the target is the original author. +- `committer-email:target@example.com`: Finds commits where the target was the one who committed the code (sometimes different from the author). + +## Level 3: Technical Metadata + +If the email is masked or missing, we can look at the **cryptographic keys** the user uses to communicate with Github. + +### SSH Keys + +Every user’s public **SSH keys are public**. + +- **URL**: `https://github.com/{username}.keys` +- **The Pivot**: You can take the key string and search for it on platforms like **Censys** or **Shodan**. If that same key is authorized on a specific server IP, you have successfully located the user’s infrastructure. + +### GPG Keys + +If a user signs their commits, their **GPG key** is available at: + +- **URL**: `https://github.com/{username}.gpg` +- **The Reveal**: Import this key into your local GPG tool (`gpg --import`). It will often reveal the **Verified Identity** and the primary email address linked to the encryption key. + +## Level 4: Connecting the Dots + +Once you have a **name**, an **email**, or a **unique username**, it’s time to _pivot_. + +- **Username Pivoting**: Use tools like [Sherlock](https://github.com/sherlock-project/sherlock) or [Maigret](https://github.com/soxoj/maigret/) to search for the same username across hundreds of other platforms. Developers are creatures of habit; they likely use the same handle on Stack Overflow, Reddit, or even old gaming forums. +- **Email Pivoting**: Use tools like [holehe](https://github.com/megadose/holehe) to find other accounts registered with the email addresses you just uncovered. + +## Automating the Hunt: Github-Recon + +If you want to move from manual investigation to automated intelligence, check out [Github-Recon](https://github.com/anotherhadi/github-recon). +Written in Go, this powerful CLI tool aggregates public OSINT data by automating the techniques mentioned above and more. Whether you start with a username or a single email address, it can retrieve SSH/GPG keys, enumerate social accounts, and find "close friends" based on interactions. +Its standout features include a **Deep Scan** mode-which clones repositories to perform regex searches and TruffleHog secret detection—and an automated **Email Spoofing** engine that instantly identifies the account linked to any primary email address. + + + +

    anotherhadi/github-recon

    +

    GitHub OSINT reconnaissance tool. Gathers profile info, social links, organisations, SSH/GPG keys, commits, and more from a GitHub username or email.

    +
    +
    + +## Conclusion and Protection: How to Stay Anonymous + +If you are a developer reading this, you might be feeling exposed. +Understanding what information about you is publicly visible is the **first step to managing your online presence**. This guide and tools like [github-recon](https://github.com/anotherhadi/github-recon) can help you identify your own publicly available data on Github. Here’s how you can take steps to protect your privacy and security: + +- **Review your public profile**: Regularly check your Github profile and + repositories to ensure that you are not unintentionally exposing sensitive + information. +- **Manage email exposure**: Use Github's settings to control which email + addresses are visible on your profile and in commit history. You can also **use + a no-reply email** address for commits, and an + [alias email](https://proton.me/support/addresses-and-aliases) for your + account. Delete/modify any sensitive information in your commit history. +- **Be Mindful of Repository Content**: **Avoid including sensitive information** in + your repositories, such as API keys, passwords, emails or personal data. Use + `.gitignore` to exclude files that contain sensitive information. + +You can also use a tool like [TruffleHog](github.com/trufflesecurity/trufflehog) +to scan your repositories specifically for exposed secrets and tokens. + +**Useful links:** + +- [Blocking command line pushes that expose your personal email address](https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/blocking-command-line-pushes-that-expose-your-personal-email-address) +- [No-reply email address](https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/setting-your-commit-email-address) + +In OSINT, the best hidden secrets are the ones we forget we ever shared. Happy hunting! diff --git a/front/src/content/cheatsheets/google-dorks.md b/front/src/content/cheatsheets/google-dorks.md new file mode 100644 index 0000000..08ef7f8 --- /dev/null +++ b/front/src/content/cheatsheets/google-dorks.md @@ -0,0 +1,100 @@ +--- +title: "Google Dorks" +description: "Essential cheatsheet for Google Dorking, using advanced search operators to perform Open Source Intelligence (OSINT) and identify publicly exposed information or misconfigurations on target websites." +tags: [google, dorks] +--- + +[Google](https://google.com) hacking, also named Google dorking, is a hacker technique that uses Google Search and other Google applications to find security holes in the configuration and computer code that websites are using. +Dorks also works on [Startpage](https://startpage.com) or [Duckduckgo](https://duckduckgo.com). + +## Basics + +- `-` excludes a term +- `OR` searches for either term +- `""` searches for an exact phrase +- `*` acts as a wildcard +- `site:` restricts the search to a specific domain +- `inurl:` restricts the search to a specific URL +- `intitle:` restricts the search to a specific title +- `intext:` restricts the search to a specific text +- `allintext:` restricts the search to all text +- `filetype:` restricts the search to a specific file type + +## Information gathering + +Replace "{target}" with a name or other identifiers used online. Always remember +to use these queries solely for legal and ethical purposes on information you +own or have permission to check. + +- **File Types:** + - `"{target}" filetype:pdf` + - `"{target}" filetype:doc OR filetype:docx OR filetype:xls OR filetype:ppt` + - Config files: + `site:{target}+filetype:xml+|+filetype:conf+|+filetype:cnf+|+filetype:reg+|+filetype:inf+|+filetype:rdp+|+filetype:cfg+|+filetype:txt+|+filetype:ora+|+filetype:ini` + - Database files: `site:{target}+filetype:sql+|+filetype:dbf+|+filetype:mdb` + - Data files: `site:{target} ext:csv OR ext:xls OR ext:log` or `site:{target} "@gmail.com" ext:csv` + - Log files: `site:{target}+filetype:log+|filetype:txt` - Backup files: + `site:{target}+filetype:bkf+|+filetype:bkp+|+filetype:bak+|+filetype:old+|+filetype:backup` + - Setup files: + `site:{target}+inurl:readme+|+inurl:license+|+inurl:install+|+inurl:setup+|+inurl:config` + - Private files: + `site:{target} "internal use only" ( you can replace with "classified", "private", "unauthorised" )` + - Sensitive docs: + `ext:txt | ext:pdf | ext:xml | ext:xls | ext:xlsx | ext:ppt | ext:pptx | ext:doc | ext:docx intext:“confidential” | intext:“Not for Public Release” | intext:”internal use only” | intext:“do not distribute” site:{target}` + - Code leaks: Check for code snippets, secrets, configs + ```txt + site:pastebin.com "{target}" + site:jsfiddle.net "{target}" + site:codebeautify.org "{target}" + site:codepen.io "{target}"` + ``` + - Cloud File Shares: Find exposed files linked to your target + ```txt + site:http://drive.google.com "{target}" + site:http://docs.google.com inurl:"/d/" "{target}" + site:http://dropbox.com/s "{target}" + ``` + - Other: `site:{target}+filetype:pdf+|+filetype:xlsx+|+filetype:docx` + +- **Social Media & Professional Networks:** + - `site:linkedin.com/in "{target}"` + - `site:facebook.com "{target}"` + - `site:twitter.com "{target}"` + - `site:instagram.com "{target}"` + +- **Profile & Resume Searches:** + - `inurl:"profile" "{target}"` + - `intitle:"{target}" "profile"` + - `"{target}" intext:"resume"` + - `intitle:"Curriculum Vitae" OR intitle:"CV" "{target}"` + +- **Email and Contact Information:** + - `"{target}" intext:"@gmail.com"` + - `"{target}" intext:"email"` + - `"{target}" AND "contact"` + +- **Forums and Public Repositories:** + - `site:pastebin.com "{target}"` + - `site:github.com "{target}"` + - `site:forums "{target}"` + +- **Directory Listings and Miscellaneous:** + - `site:{target}+intitle:index.of`, + +- **Exclusion Searches:** + - `"{target}" -site:facebook.com` + - `"{target}" -site:twitter.com` + +## Advanced Google Operators + +- `related:site` finds websites similar to the specified URL +- `define:term` shows a word or phrase definition directly in the results +- `inanchor:word` filters pages where the anchor text includes the specified + word +- `around(n)` restricts results to pages where two words appear within _n_ words + of each other + +## Ressources + +- [TakSec's google dorks](https://github.com/TakSec/google-dorks-bug-bounty/) +- [Exploit-db Google hacking database](https://www.exploit-db.com/google-hacking-database) diff --git a/front/src/content/cheatsheets/sock-puppets.md b/front/src/content/cheatsheets/sock-puppets.md new file mode 100644 index 0000000..1638923 --- /dev/null +++ b/front/src/content/cheatsheets/sock-puppets.md @@ -0,0 +1,61 @@ +--- +title: "Sock Puppets" +description: "Essential cheatsheet on creating and managing Sock Puppets (fake identities) for ethical security research and Open Source Intelligence (OSINT), focusing on maintaining separation from personal data and bypassing common verification." +tags: [sock-puppets] +--- + +Sock puppets are fake identities use to gather information from a target. +The sock puppet should have no link between your personal information and the fakes ones. (No ip address, mail, follow, etc..) + +## Information generation + + + +

    Faker

    +

    Generate massive amounts of fake data

    +
    +
    + + + +

    Fake Name

    +

    Personal informations

    +
    +
    + + + +

    This Person Does Not Exist

    +

    Generate fake image

    +
    +
    + +## Bypass phone verification + + + +

    SMSPool

    +

    Cheapest and Fastest Online SMS verification

    +
    +
    + + + +

    Online Sim

    +

    SMS verification with free tier

    +
    +
    + + + +

    Sms 4 Sats

    +

    Paid SMS verification

    +
    +
    + + + +

    Sms 4 Sats (Onion)

    +

    Paid SMS verification. Tor version

    +
    +
    diff --git a/front/src/content/cheatsheets/tips.md b/front/src/content/cheatsheets/tips.md new file mode 100644 index 0000000..c9ec7ab --- /dev/null +++ b/front/src/content/cheatsheets/tips.md @@ -0,0 +1,23 @@ +--- +title: "Tips" +description: "A cheatsheet of practical tips and unconventional methods for Open Source Intelligence (OSINT), focusing on advanced data visualization, information leakage detection, and utilizing web archives for historical data." +--- + +## Visualisation + +Use [OSINTracker](https://app.osintracker.com/) to visualise your findings. +It allows you to create a graph of your findings, which can help you see connections and relationships between different pieces of information. + +## Forgotten passwords + +To find email addresses and phone numbers associated with an account, you can click on "Forgot password?" on the login page of a website. Be careful, though, this creates notifications and can be detected by the target, and often gives your information away. + +## Archive Search + +- [Wayback Machine](https://web.archive.org) stores over 618 billion web captures +- [Archive.today](https://archive.ph) creates on-demand snapshots, including for JS-heavy sites, with both a functional page and screenshot version + +## Bookmarklets + +- [K2SOsint/Bookmarklets](https://github.com/K2SOsint/Bookmarklets) +- [MyOsint.training](https://tools.myosint.training/) diff --git a/front/src/content/cheatsheets/x-twitter-osint.md b/front/src/content/cheatsheets/x-twitter-osint.md new file mode 100644 index 0000000..f3766ea --- /dev/null +++ b/front/src/content/cheatsheets/x-twitter-osint.md @@ -0,0 +1,88 @@ +--- +title: "Twitter/X OSINT" +description: "Essential cheatsheet for Open Source Intelligence (OSINT) on Twitter/X, detailing advanced search operators, engagement filters, and temporal/geographic capabilities for effective data collection." +tags: [social] +--- + +## Banner last update time + +The banner URL includes a Unix timestamp indicating when the banner was last +updated. + +For example: +`https://pbs.twimg.com/profile_banners/1564326938851921921/1750897704/600x200` + +In this case, `1750897704` is the timestamp. You can convert it using +[unixtimestamp.com](https://www.unixtimestamp.com/) or any other Unix time converter. + +## Basic Search Operators + +Twitter's advanced search functionality provides powerful filtering capabilities +for OSINT investigations: + +- **Keywords**: `word1 word2` (tweets containing both words) +- **Exact phrases**: `"exact phrase"` (tweets with this exact sequence) +- **Exclusion**: `-word` (excludes tweets containing this word) +- **Either/or**: `word1 OR word2` (tweets containing either term) +- **Hashtags**: `#hashtag` (tweets with specific hashtag) +- **Accounts**: `from:username` (tweets sent by specific account) +- **Mentions**: `to:username` (tweets in reply to an account) +- **Mentions in any context**: `@username` (tweets mentioning an account) + +## Advanced Filters + + + +

    Twitter/X Search advanced GUI

    +

    Graphical User Interface (GUI) for the twitter search advanced functionality

    +
    +
    + +### Engagement Filters + +- **Minimum retweets**: `min_retweets:number` +- **Minimum likes**: `min_faves:number` +- **Minimum replies**: `min_replies:number` +- **Filter for links**: `filter:links` +- **Filter for media**: `filter:media` +- **Filter for images**: `filter:images` +- **Filter for videos**: `filter:videos` + +### Temporal and Geographic Filters + +- **Date range**: `since:YYYY-MM-DD until:YYYY-MM-DD` +- **Geolocation**: `geocode:latitude,longitude,radius` (e.g., + `geocode:40.7128,-74.0060,5km`) +- **Language**: `lang:code` (e.g., `lang:en` for English) + +### Tweet Characteristics + +- **Positive attitude**: `🙂 OR :) OR filter:positive` +- **Negative attitude**: `🙁 OR :( OR filter:negative` +- **Questions**: `?` or `filter:questions` +- **Retweets only**: `filter:retweets` +- **Native retweets only**: `filter:nativeretweets` +- **Twitter Blue subscribers**: `filter:verified` (note: since 2023, "verified" means Twitter Blue subscriber, not a traditionally verified account) +- **Safe content**: `filter:safe` + +## Practical Search Combinations + +- **Content from a user within a date range**: + `from:username since:2023-01-01 until:2023-12-31` + +- **High-engagement tweets about a topic**: + `"artificial intelligence" min_retweets:100 lang:en -filter:retweets` + +- **Media shared by a specific user**: + `from:username filter:media -filter:retweets` + +- **Conversations between specific users**: + `from:username1 to:username2 OR from:username2 to:username1` + +- **Link sharing on a topic by verified users**: + `"climate change" filter:links filter:verified since:2023-01-01` + +## Disclaimer + +Remember that all Twitter searches should comply with Twitter's Terms of Service +and appropriate legal frameworks for your jurisdiction. diff --git a/front/src/layouts/Layout.astro b/front/src/layouts/Layout.astro new file mode 100644 index 0000000..a2554e4 --- /dev/null +++ b/front/src/layouts/Layout.astro @@ -0,0 +1,92 @@ +--- +import "@src/styles/global.css"; +import "@src/styles/gfm.css"; +import "@src/styles/markdown.css"; +import Navbar from "@src/components/Nav.svelte"; +import DemoBanner from "@src/components/DemoBanner.svelte"; +import { Coffee } from "@lucide/svelte"; + +interface Props { + title?: string; + description?: string; +} + +const { + title = "iknowyou", + description = "Self-hosted OSINT aggregation. Run multiple recon tools against a target in parallel and get results in one place.", +} = Astro.props; + +const pageTitle = title === "iknowyou" ? title : `${title} — iky`; +const canonicalURL = new URL(Astro.url.pathname, Astro.site ?? Astro.url.origin); +--- + + + + + + + + {pageTitle} + + + + + + + + + + + Support me + +
    + +
    + + + diff --git a/front/src/lib/utils.ts b/front/src/lib/utils.ts new file mode 100644 index 0000000..2a385e2 --- /dev/null +++ b/front/src/lib/utils.ts @@ -0,0 +1,17 @@ +export function cleanUserInput(query: string | undefined | null): string { + if (!query) return ""; + return query.replace(/[^a-zA-Z0-9\s.\-_/]/g, "").trim(); +} + +export function getRandomEmoji(): string { + const emojis = [ + "(·.·)", + "(>_<)", + "¯\\_(ツ)_/¯", + "(╯_╰)", + "(-_-)", + "┐(‘~`;)┌", + "(X_X)", + ]; + return emojis[Math.floor(Math.random() * emojis.length)]; +} diff --git a/front/src/lib/vars.ts b/front/src/lib/vars.ts new file mode 100644 index 0000000..664aacb --- /dev/null +++ b/front/src/lib/vars.ts @@ -0,0 +1,16 @@ +import { Mail, User, Phone, Globe, Server, KeyRound, Contact } from "@lucide/svelte"; + +export const INPUT_TYPES = [ + "email", "username", "name", "phone", "ip", + "domain", "password", +]; + +export const INPUT_TYPE_ICON = { + email: Mail, + username: User, + name: Contact, + phone: Phone, + domain: Globe, + ip: Server, + password: KeyRound, +}; diff --git a/front/src/pages/403.astro b/front/src/pages/403.astro new file mode 100644 index 0000000..d2aa066 --- /dev/null +++ b/front/src/pages/403.astro @@ -0,0 +1,30 @@ +--- +import Layout from "@src/layouts/Layout.astro"; +import { ShieldAlert, Home } from "@lucide/svelte"; +--- + + +
    +
    + +

    403

    +
    + +
    +

    Access Denied

    +

    + You don't have the necessary clearance to access this sector of the app. +

    +
    + +
    + ERROR_CODE: INSUFFICIENT_PERMISSIONS +
    + + + Return to Surface + +
    +
    diff --git a/front/src/pages/404.astro b/front/src/pages/404.astro new file mode 100644 index 0000000..9e5e361 --- /dev/null +++ b/front/src/pages/404.astro @@ -0,0 +1,26 @@ +--- +import Layout from "@src/layouts/Layout.astro"; +import { Ghost, Home } from "@lucide/svelte"; +--- + + +
    +
    + +

    404

    +
    + +
    +

    Lost?

    +

    + The page you are looking for doesn't exist or has been moved. +

    +
    + + + Back to Home + +
    +
    diff --git a/front/src/pages/500.astro b/front/src/pages/500.astro new file mode 100644 index 0000000..48925a6 --- /dev/null +++ b/front/src/pages/500.astro @@ -0,0 +1,32 @@ +--- +import Layout from "@src/layouts/Layout.astro"; +import { AlertTriangle, RefreshCw } from "@lucide/svelte"; +--- + + +
    +
    + +

    500

    +
    + +
    +

    System Failure

    +

    + The server encountered an unexpected error. +

    +
    + +
    + + Go Home +
    +
    +
    diff --git a/front/src/pages/cheatsheets/[slug].astro b/front/src/pages/cheatsheets/[slug].astro new file mode 100644 index 0000000..26de50b --- /dev/null +++ b/front/src/pages/cheatsheets/[slug].astro @@ -0,0 +1,126 @@ +--- +import Layout from "@src/layouts/Layout.astro"; +import { getCollection, render } from "astro:content"; + +export async function getStaticPaths() { + const sheets = await getCollection("cheatsheets"); + return sheets.map((sheet) => ({ + params: { slug: sheet.id }, + props: { sheet }, + })); +} + +const { sheet } = Astro.props; +const { Content, headings } = await render(sheet); + +const toc = headings.filter((h) => h.depth === 2 || h.depth === 3); +--- + + +
    + + + +
    +

    {sheet.data.title}

    + {sheet.data.description && ( +

    {sheet.data.description}

    + )} + {sheet.data.tags && sheet.data.tags.length > 0 && ( +
    + {sheet.data.tags.map((tag) => ( + {tag} + ))} +
    + )} +
    + + {toc.length > 0 && ( +
    + + On this page + + + +
    + )} + +
    +
    + +
    + + {toc.length > 0 && ( + + )} +
    + +
    +
    + + + + diff --git a/front/src/pages/cheatsheets/index.astro b/front/src/pages/cheatsheets/index.astro new file mode 100644 index 0000000..50e60de --- /dev/null +++ b/front/src/pages/cheatsheets/index.astro @@ -0,0 +1,33 @@ +--- +import Layout from "@src/layouts/Layout.astro"; +import { getCollection } from "astro:content"; +import CheatsheetList from "@src/components/CheatsheetList.svelte"; + +const sheets = (await getCollection("cheatsheets")) + .sort((a, b) => (a.data.order ?? 99) - (b.data.order ?? 99)) + .map((s) => ({ + id: s.id, + title: s.data.title, + description: s.data.description, + tags: s.data.tags, + })); +--- + + +
    + +
    + ← Back +
    + +
    +

    OSINT Cheatsheets

    +

    + Quick reference cards for common OSINT techniques. +

    +
    + + + +
    +
    diff --git a/front/src/pages/help.astro b/front/src/pages/help.astro new file mode 100644 index 0000000..2fb1403 --- /dev/null +++ b/front/src/pages/help.astro @@ -0,0 +1,172 @@ +--- +import Layout from "@src/layouts/Layout.astro"; +--- + + +
    + +
    + ← Back +
    + +
    +

    How it works

    +

    + A guide to iknowyou: concepts, tools, profiles, and configuration. +

    +
    + +
    + +
    +

    + + What is it? +

    +

    + Iknowyou (IKY) is an OSINT aggregation platform. It runs multiple + open-source intelligence tools against a target in parallel and presents the results + in a unified interface. Targets can be email addresses, usernames, phone numbers, IP + addresses, domains, and more. +

    +

    + Instead of running each tool manually, IKY handles orchestration, config management, + and result rendering so you can focus on analysis. +

    +
    + +
    + +
    +

    + + Tools +

    +

    + Each tool is a Go module that knows how to query one data source + (a website, an API, a local binary...). Tools declare: +

    +
      +
    • Which input types they accept (email, username, IP...)
    • +
    • Optional configuration fields (API keys, options)
    • +
    • Whether they require an external binary to be installed
    • +
    +

    + The Tools page shows all registered tools + grouped by status: +

    +
    +
    + + Active - ready to run +
    +
    + + Active: config missing - needs an API key or required field +
    +
    + + Active: unavailable - required binary not found on the system +
    +
    + + Disabled - excluded by the selected profile +
    +
    +
    + +
    + +
    +

    + + Profiles +

    +

    + A profile is a named search configuration. When you start a search, + you pick which profile to use. Profiles control: +

    +
      +
    • Enabled list (whitelist): if set, only these tools run
    • +
    • Disabled list (blacklist): these tools are always skipped
    • +
    • Tool overrides: per-profile config that overrides global settings for specific tools
    • +
    • Notes: a description of what the profile is for
    • +
    +

    + Two profiles are built-in and cannot be modified: +

    +
    +
    + default +

    + All tools active with default settings. No restrictions. +

    +
    +
    + hard +

    + Aggressive mode. All tools active, including those that may send + notifications or leave traces at the target. +

    +
    +
    +

    + You can create custom profiles on the Profiles page. +

    +
    + +
    + +
    +

    + + Configuration & Overrides +

    +

    + Tool configuration works in two layers: +

    +
      +
    1. + Global config: set on the + Tools page. Applied to every + search regardless of profile. +
    2. +
    3. + Profile override: set inside a profile. Takes precedence over + global config when that profile is used. Useful when you want a tool to behave + differently in specific contexts (e.g. slower rate-limiting in a "quiet" profile). +
    4. +
    +

    + Config is stored in config.yaml. + Built-in profiles are hardcoded in Go and are never written to disk. +

    +
    + +
    + +
    +

    + + How a search runs +

    +
      +
    1. You enter a target, select its type (email, username...) and pick a profile.
    2. +
    3. + The backend filters tools by input type and the profile's enabled/disabled rules, + then skips any tool with a missing required config field. +
    4. +
    5. All eligible tools run in parallel against the target.
    6. +
    7. + The frontend polls for results and renders them progressively as each tool finishes. +
    8. +
    +

    + A search can be cancelled at any time from the results page. + Completed searches are kept in memory. +

    +
    + +
    +
    +
    diff --git a/front/src/pages/index.astro b/front/src/pages/index.astro new file mode 100644 index 0000000..51c9654 --- /dev/null +++ b/front/src/pages/index.astro @@ -0,0 +1,19 @@ +--- +import Layout from "@src/layouts/Layout.astro"; +import HomePage from "@src/components/HomePage.svelte"; +--- + +
    +
    + iknowyou +

    i know you

    +

    + Centralizing your OSINT tools in one place.
    + Iknowyou is a self-hosted OSINT (Open-Source Intelligence) platform that centralises reconnaissance tools + into a single reactive web interface. Instead of juggling terminals, browser tabs, and disconnected CLI tools, you type a target once and get results in real time. +

    +
    + + +
    +
    diff --git a/front/src/pages/profiles.astro b/front/src/pages/profiles.astro new file mode 100644 index 0000000..d95bf4e --- /dev/null +++ b/front/src/pages/profiles.astro @@ -0,0 +1,21 @@ +--- +import Layout from "@src/layouts/Layout.astro"; +import ProfileSettings from "@src/components/ProfileSettings.svelte"; +--- + + +
    +
    + ← Back +
    + +
    +

    Profiles

    +

    + Manage search profiles: allowed/blocked tools and per-tool config overrides. +

    +
    + + +
    +
    diff --git a/front/src/pages/search/[id].astro b/front/src/pages/search/[id].astro new file mode 100644 index 0000000..f34bc8b --- /dev/null +++ b/front/src/pages/search/[id].astro @@ -0,0 +1,22 @@ +--- +import Layout from "@src/layouts/Layout.astro"; +import SearchDetail from "@src/components/SearchDetail.svelte"; + +export async function getStaticPaths() { + return [{ params: { id: "_" } }]; +} + +// Shell page — SearchDetail reads the real ID from window.location. +const id = null; +--- + +
    + +
    + ← Back +
    + + + +
    +
    diff --git a/front/src/pages/tools/[name].astro b/front/src/pages/tools/[name].astro new file mode 100644 index 0000000..0305072 --- /dev/null +++ b/front/src/pages/tools/[name].astro @@ -0,0 +1,22 @@ +--- +import Layout from "@src/layouts/Layout.astro"; +import ToolDetail from "@src/components/ToolDetail.svelte"; + +export async function getStaticPaths() { + return [{ params: { name: "_" } }]; +} + +// Shell page — ToolDetail reads the real name from window.location. +const name = null; +--- + +
    + +
    + ← Tools +
    + + + +
    +
    diff --git a/front/src/pages/tools/index.astro b/front/src/pages/tools/index.astro new file mode 100644 index 0000000..9c88481 --- /dev/null +++ b/front/src/pages/tools/index.astro @@ -0,0 +1,20 @@ +--- +import Layout from "@src/layouts/Layout.astro"; +import ToolList from "@src/components/ToolList.svelte"; +--- + +
    + +
    + ← Back +
    + +
    +

    Tools

    +

    All registered OSINT tools.

    +
    + + + +
    +
    diff --git a/front/src/styles/gfm.css b/front/src/styles/gfm.css new file mode 100644 index 0000000..3c8ca05 --- /dev/null +++ b/front/src/styles/gfm.css @@ -0,0 +1,144 @@ +/* ANSI Terminal Output */ + +.ansi-output { + font-family: monospace; + font-size: 0.8rem; + line-height: 1.5; + white-space: pre-wrap; + word-break: break-all; + background-color: var(--color-base-100); + border: 1px solid color-mix(in srgb, var(--color-base-content) 10%, transparent); + border-radius: 0.5rem; + padding: 0.75rem 1rem; + overflow-x: auto; + max-height: 600px; + overflow-y: auto; +} + +/* GitHub Flavored Markdown - Code Blocks */ + +.code-block { + border: 1px solid color-mix(in srgb, var(--color-base-content) 12%, transparent); + border-radius: 0.5rem; + overflow: hidden; + margin: 1.25rem 0; + font-size: 0.875rem; +} + +.code-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 0.4rem 0.75rem; + background-color: color-mix(in srgb, var(--color-base-content) 6%, transparent); + border-bottom: 1px solid color-mix(in srgb, var(--color-base-content) 10%, transparent); +} + +.code-lang { + font-family: monospace; + font-size: 0.75rem; + color: var(--color-base-content); + opacity: 0.5; + text-transform: lowercase; +} + +.copy-btn { + display: flex; + align-items: center; + gap: 0.3rem; + font-size: 0.7rem; + padding: 0.2rem 0.5rem; + border-radius: 0.3rem; + border: 1px solid color-mix(in srgb, var(--color-base-content) 15%, transparent); + background: transparent; + color: var(--color-base-content); + opacity: 0.5; + cursor: pointer; + transition: opacity 0.15s; +} +.copy-btn:hover { opacity: 1; } +.copy-btn.copied { color: var(--color-success); opacity: 1; } + +.code-block pre { + margin: 0 !important; + border-radius: 0 !important; + border: none !important; + padding: 1rem 0 !important; +} + +.code-block pre code { + counter-reset: line; +} +.code-block pre code .line::before { + counter-increment: line; + content: counter(line); + display: inline-block; + width: 2rem; + text-align: right; + margin-right: 1.25rem; + color: var(--color-base-content); + opacity: 0.25; + user-select: none; +} + +/* GitHub Flavored Markdown - Alerts */ + +.markdown-alert { + border-left: 4px solid; + padding: 0.75rem 1rem; + border-radius: 0 0.5rem 0.5rem 0; + margin: 1.25rem 0; +} + +.markdown-alert p { + margin: 0; +} + +.markdown-alert-title { + display: flex; + align-items: center; + gap: 0.4rem; + font-weight: 600; + font-size: 0.875rem; + margin-bottom: 0.4rem; +} + +.markdown-alert-note { + border-color: var(--color-info); + background-color: color-mix(in srgb, var(--color-info) 10%, transparent); +} +.markdown-alert-note .markdown-alert-title { + color: var(--color-info); +} + +.markdown-alert-tip { + border-color: var(--color-success); + background-color: color-mix(in srgb, var(--color-success) 10%, transparent); +} +.markdown-alert-tip .markdown-alert-title { + color: var(--color-success); +} + +.markdown-alert-important { + border-color: var(--color-secondary); + background-color: color-mix(in srgb, var(--color-secondary) 10%, transparent); +} +.markdown-alert-important .markdown-alert-title { + color: var(--color-secondary); +} + +.markdown-alert-warning { + border-color: var(--color-warning); + background-color: color-mix(in srgb, var(--color-warning) 10%, transparent); +} +.markdown-alert-warning .markdown-alert-title { + color: var(--color-warning); +} + +.markdown-alert-caution { + border-color: var(--color-error); + background-color: color-mix(in srgb, var(--color-error) 10%, transparent); +} +.markdown-alert-caution .markdown-alert-title { + color: var(--color-error); +} diff --git a/front/src/styles/global.css b/front/src/styles/global.css new file mode 100644 index 0000000..e3e44a4 --- /dev/null +++ b/front/src/styles/global.css @@ -0,0 +1,84 @@ +@import "tailwindcss"; +@plugin "@tailwindcss/typography"; + +@plugin "daisyui" { + themes: dark --prefersdark --default; +} + +@plugin "daisyui/theme" { + name: "dark"; + default: true; + prefersdark: true; + color-scheme: dark; + + --color-primary: #E9F7A7; + --color-primary-content: #11111b; + + --color-secondary: #f5c2e7; + --color-secondary-content: #11111b; + + --color-accent: #94e2d5; + --color-accent-content: #11111b; + + --color-neutral: #313244; + --color-neutral-content: #cdd6f4; + + --color-base-300: #1a1a2a; + --color-base-200: #12121F; + --color-base-100: #0C0C16; + --color-base-content: #cdd6f4; + + --color-info: #89b4fa; + --color-info-content: #11111b; + + --color-success: #a6e3a1; + --color-success-content: #11111b; + + --color-warning: #f9e2af; + --color-warning-content: #11111b; + + --color-error: #f38ba8; + --color-error-content: #11111b; + + --radius-selector: 1rem; + --radius-field: 0.5rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 0; + --noise: 0; +} + +@theme { + --font-unbounded: "Unbounded", sans-serif; +} + +@utility logo-gradient { + @apply bg-gradient-to-b from-[#E9F7A7] via-[#E9BED9] to-[#BBA6EB] bg-clip-text text-transparent; +} + +.animate-fade-in { + animation: fadeIn 0.6s ease-out; +} + +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(10px); + } + + to { + opacity: 1; + transform: translateY(0); + } +} + +@font-face { + font-family: 'Unbounded'; + src: url('/fonts/unbounded-black.ttf') format('truetype'); + font-weight: 900; + font-style: normal; + font-display: swap; +} + diff --git a/front/src/styles/markdown.css b/front/src/styles/markdown.css new file mode 100644 index 0000000..a7f414d --- /dev/null +++ b/front/src/styles/markdown.css @@ -0,0 +1,20 @@ +@reference "./global.css"; + +.link-card { + @apply flex items-center justify-between p-4 bg-base-200 rounded-xl border border-base-300 no-underline hover:border-primary transition-all mb-4; +} + +.link-card h4 { + @apply font-bold m-0 text-base; +} + +.link-card p { + @apply text-sm opacity-70 m-0; +} + +.link-card::after { + content: ""; + @apply w-5 h-5 bg-current shrink-0 ml-4; + mask: url('data:image/svg+xml;utf8,') no-repeat center; + mask-size: contain; +} diff --git a/front/svelte.config.js b/front/svelte.config.js new file mode 100644 index 0000000..522c1ef --- /dev/null +++ b/front/svelte.config.js @@ -0,0 +1,5 @@ +import { vitePreprocess } from '@astrojs/svelte'; + +export default { + preprocess: vitePreprocess(), +} diff --git a/front/tsconfig.json b/front/tsconfig.json new file mode 100644 index 0000000..de0d88b --- /dev/null +++ b/front/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "astro/tsconfigs/strict", + "include": [".astro/types.d.ts", "**/*"], + "exclude": ["dist"], + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@src/*": ["src/*"], + "@lib/*": ["src/lib/*"] + } + } +} diff --git a/justfile b/justfile new file mode 100644 index 0000000..1402230 --- /dev/null +++ b/justfile @@ -0,0 +1,31 @@ +set shell := ["nix", "develop", "--command", "bash", "-c"] + +# Run dev mode for both front & backend. Live reload enabled. +dev: install-deps + cd front && bun run dev + +# Install dependencies if not already installed. This is a no-op if node_modules already exists. +install-deps: + cd front && ([ -d node_modules ] || bun install) + +# Regenerate .github/docs/ from registered tools +docs: + cd back && go run ./cmd/gendocs/ + +# Build the default Nix package (backend + frontend) +nix-build: + nix build ".#packages.x86_64-linux.default" + +# Run the app directly via Nix +nix-run: + nix run ".#" + +update: update-flake update-bun-nix + +# Regenerate front/bun.nix from the current bun.lock +update-bun-nix: + cd front && bun2nix > bun.nix + +# Update the flake.lock file +update-flake: + nix flake update diff --git a/nix/backend.nix b/nix/backend.nix new file mode 100644 index 0000000..b41faab --- /dev/null +++ b/nix/backend.nix @@ -0,0 +1,17 @@ +{pkgs, ...}: +pkgs.buildGoModule { + pname = "iky"; + version = "0.1.0"; + + src = ../back; + + vendorHash = "sha256-gR7P7Wcd7wojNkUz71vb2vvbbbQJF2QNnSld7WZ6moc="; + + env.CGO_ENABLED = "0"; + ldflags = ["-s" "-w"]; + + meta = { + description = "Iknowyou OSINT platform: backend API server"; + mainProgram = "server"; + }; +} diff --git a/nix/frontend.nix b/nix/frontend.nix new file mode 100644 index 0000000..38ffc46 --- /dev/null +++ b/nix/frontend.nix @@ -0,0 +1,38 @@ +{ + pkgs, + bun2nix, + system, + ... +}: let + bun2nixPkg = bun2nix.packages.${system}.default; + + bunDeps = bun2nixPkg.fetchBunDeps { + bunNix = ../front/bun.nix; + }; +in + pkgs.stdenv.mkDerivation { + pname = "iky-frontend"; + version = "0.1.0"; + + src = ../front; + + nativeBuildInputs = [ + bun2nixPkg.hook + ]; + + inherit bunDeps; + + buildPhase = '' + runHook preBuild + bun run build + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + cp -r dist $out + runHook postInstall + ''; + + meta.description = "Iknowyou OSINT platform: static Astro frontend"; + } diff --git a/nix/module.nix b/nix/module.nix new file mode 100644 index 0000000..f981602 --- /dev/null +++ b/nix/module.nix @@ -0,0 +1,88 @@ +{ + config, + lib, + ... +}: let + cfg = config.services.iknowyou; +in { + options.services.iknowyou = { + enable = lib.mkEnableOption "Iknowyou OSINT aggregation platform"; + + port = lib.mkOption { + type = lib.types.port; + default = 8080; + description = "TCP port the IKY server listens on."; + }; + + configFile = lib.mkOption { + type = lib.types.path; + default = "/etc/iky/config.yaml"; + description = "Path to the IKY YAML configuration file (optional, server starts with empty config if absent)."; + }; + + package = lib.mkOption { + type = lib.types.package; + description = "The IKY package (must expose bin/server and share/iky/frontend/)."; + }; + + openFirewall = lib.mkOption { + type = lib.types.bool; + default = false; + description = "Open the firewall for the IKY port."; + }; + + searchTTL = lib.mkOption { + type = lib.types.str; + default = "48h"; + description = "How long a completed or cancelled search is kept in memory (Go duration string, e.g. \"24h\", \"168h\")."; + }; + + cleanupInterval = lib.mkOption { + type = lib.types.str; + default = "1h"; + description = "How often the search cleanup goroutine runs (Go duration string, e.g. \"30m\", \"2h\")."; + }; + }; + + config = lib.mkIf cfg.enable { + networking.firewall.allowedTCPPorts = + lib.mkIf cfg.openFirewall [cfg.port]; + + users.users.iknowyou = { + isSystemUser = true; + group = "iknowyou"; + description = "Iknowyou service user"; + }; + users.groups.iknowyou = {}; + + systemd.tmpfiles.rules = [ + "d /etc/iky 0700 iknowyou iknowyou -" + ]; + + systemd.services.iknowyou = { + description = "Iknowyou OSINT platform"; + wantedBy = ["multi-user.target"]; + after = ["network.target"]; + + path = [cfg.package]; + + environment = { + IKY_PORT = toString cfg.port; + IKY_CONFIG = cfg.configFile; + IKY_FRONT_DIR = "${cfg.package}/share/iky/frontend"; + IKY_SEARCH_TTL = cfg.searchTTL; + IKY_CLEANUP_INTERVAL = cfg.cleanupInterval; + }; + + serviceConfig = { + ExecStart = "${cfg.package}/bin/server"; + Restart = "on-failure"; + RestartSec = "5s"; + User = "iknowyou"; + Group = "iknowyou"; + StateDirectory = "iky"; + WorkingDirectory = "%S/iky"; + }; + }; + }; +}

    VIG;B!dL|37E7`2U>M^8a&ItN+hgt^Yq~wfX;? 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 MwfX;N)^-L40Ij}@umAu6 literal 0 HcmV?d00001 diff --git a/front/public/logo-large.svg b/front/public/logo-large.svg new file mode 100644 index 0000000..5285a7f --- /dev/null +++ b/front/public/logo-large.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/front/public/logo.svg b/front/public/logo.svg new file mode 100644 index 0000000..90a3dff --- /dev/null +++ b/front/public/logo.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/front/public/op.png b/front/public/op.png new file mode 100644 index 0000000000000000000000000000000000000000..c845da3ef1c0471bd77311e269bde1e720be30b9 GIT binary patch literal 61310 zcmeAS@N?(olHy`uVBq!ia0y~yU}a!nU~1rCV_;x7{Q2ra1_lPs0*}aI1_o|n5N2eU zHAjMhfq}6&$lZxy-8q?;3=9k`>5jgR3=A9lx&I`B^z)UtMwA5Srcgid|&d#mvMt@aDK?tfp&6WY;xN@s;f;#8$mA*r{! zPNm#lv?xKFYf*vhN2^5bT1Q8b+i4RVLniE8uWMAXd*jk28$<mhb z{N?w&chjwvzTL}y-(l>Y^6cd2{~u*v%{g=8M2Bp3>Y9k1%7=2c-AoH(fB>H*^B@d{ z84)53j9_*HryHXHn8h$7VN{TTVKhL%sbMrRfP!H(F@Qp0v}6E>0?iYHzaRqxLjsq7 z{I`(GZ(XUM=HyO4{jItF?)}^Rb@z*Y2A{qkuET#hZ~xm(n$JJKIHvw|v)@cPZVU zXKh>j;kWVAo6Sx4F0;4pODsNm=)TRK%m9fy8tL&x?RScPJ2NpbH2h3vQD9&=AoSSn z-QJ}4qMPpD(@yPoyqMoVcb?%Sr~4syHtm?d|M$ygk^c+~3{eiCswCmi&Zhg>{5KrG zRiEUlJi2P?<$0^D`R-^QSU#_K_MF<2b3x{|E@t3hU@&O>!(sn@{qIPfcl8yEWy%hH z@5*LmVqjPx3$BUOTC~5&Zu(#RRJZ+&P1y1;=cZ}@+WBa{HWNsREm(=z#-njxKI`rK z7Weaf{13r$1~vwU7YwWp3=9pf$6_zP|FJkuWBu*=_D5=R-FMT^@AUPvO>ZtaE9xD4 zJNEnGcy0!U13^w;S5GWpUGw<9k;Wg{4b47Xi6Z}FF20}g_?x7N?{}Sl`~ENNEqZm` z?8MRQceEK87`z*A=4?K@1{7U6vR{A2K3UuTX48tiXNJ%Y zjXC=l)jdz9#+a``%Zdp4a{BR$Z{9+sE_0(`^1K|2}6S+v>o;VDM6d zfr){kXQHS6AIn(r|1r{a-%qcf`MJXrY(`KZ0}BI#gz&qN`~G{<=O4Qqs_uIIsD1bs z>-Sfh#jdo8FflS5Sh5goQPR4Mubq#-&D@dw=jkrJe`mi)(POpzNTKsR1EdRb0Unds5 ztEzwJChso0sk>*E_1c?r@9{7&7`y|AXGw<0@|Atfll^zQp4<1tFLSc?zn!oD_693n z?Parh@nW^5sssZ=&sICpYDR0~Y^Y$OQ z+wz3>)2_ee0t^fdgAHy0%jWkq)>|jM6m7lZu_M{8ZnMp`N2UMU zN|)dNS;TrzId1Rb83*fQ#03}_dX%{u7#J9IKOJ2)x9o>~s;1S?E%IBVSfsx{n*Xh9 zZ}^GJ)BiT!`SAERD+5EqoC01@lAgAM=|cJWsjy9Ga%|Crspqm+?>LBiAxln8YiwExX5x}z0&D&}GS@n-!=+x}eU zzqfBicfFJ{BO}8Biv)1#U=#R9d+wiBdCzFS{~xr~mi>5cAO!LuGuVfp3;smMd3^Lg zC0!r${cyaubYIn9y`n#X)u)y$3^dw@bitO^b+267T-F* zzfqptr3CVnD%h;z2V54<=k3~(|Ks7#i}ks&x8LnKFKZFF{GZuJ*8|J->sK)_Fz^V2 zlXT>#^5sh#g75uUy!K-KyOLMoZ}vJ(V+v>a^Dc6|AOk}~;v#S!@m}}C{N>^+X|Eqm zbNjz@(W{T{djqBkg}*5=w+4lS7}(m)2ASo{V>!ZqSZ`f=v3|Zq-qlGt;pLkrFAe*_ z!oaZD8C-y{O|B}x^)u`BmH6xH-lea!`g{1d-pt_nj0^`dW}Y>>eFoIyklGm>VjlBR zZQbwi!o~l~YQh6}CBIT#oivihnHpZj#x8=8aD`EkAX6y6?M{ zhjRP=MV~VNH{;yT<#H<3^51e985lC8%^5-AAsEgx`_#14|1VErbuGWUBjr}=f6ssZ zrf)A#|Lgd1M!jGB;S2lAc74w)I-_a6HHg9H{S{_S2EWHwiu1B_m#8u@G`NGqinG|& z&AjTOxJ>tccGknsb9S%MP_e7Nt=sjIum1o26HYr9J+{C5!R+7_xw~JMtg-rHeMeM+ zfniG*D5Ws8HC?RVTzvX1|4B#pcvS`lhFnNuej#)H-)!6R@Pv1EybKJtTtGH4%>B($ z9x_kZJW7axVSz3g@0UpBr<4Ev^LGAKWMp8Np}+ZN+U!VBFRbmrT)sb@ zkH1ZPyFFHIhOBv4(ekb0C!xjePjDV%Xgk)=R-(*!cW$1cu{qa=iTCXlrQcP#FfcGY zYlei%tBt(1HQ(E-epW1nBObiUqz?FbRwSWA-EslZjXMQ?# zcl&f*_WkzhPmQ0vjGorNbAHmSgZJ}x9eq;o6KqoRW@Ej)NY%U*w*OuntCzR=eq_t% zo&OKsU;X@FdQGnB`J#LO^&WQwH!UxJWx4%i`uUrnVyoB@6t_L1=2h>fW|vL1EwA17 z#!}#AgKD?w!Lq*r-@sp+>I0YeQbs{L)`bj^G_{5zauMSx%KYgrdYuV7aKGo zJ_IL2iCv2xY%kNVd_6nP@nHVMLS+{F;$K&bE{;Guu7ryc5PLaJHr^3L%uo+&TlpGQLXZK~_ z^;1jZ>*uejy(+iq>*jfS5r5|Gd;09tKS#&wKX-rq?sYxy$H)99pr~JEyKS0%#jD^H z&Ej&;eNSfn?)t{Sz%YXsRFXHGn^W*6>ZiWC{He@+!g(_mGg_+dDEXAR{lv}bcQirP z9^`OfV7Oov{^9q%?RF~l->xw~;h*=bo(&2nXJBAB(*jD(8NJ&7c1)~4 ze>3l8-;?vg2G-9Pw|=*C|7GcxoE@(PcRrc*`$;LgO}S@` z_=MLCObiV-!DYb=@vizAtGCPj5b=Ss0E5q#$Njg0K^1t4 z5U9y;GwW+S$X_KEtf0{^;kR$R-%XL_-{!|W zR~Pd6yBf<+EV-FHJ#YO=4h9A>dvFaJA#~^ECiVH>lr5i4nXQ&(@}PKItQtbI>eETt z?{wb@*=V{Ruq}V&cZY!?p$Zg-3>%*82yQC3`Qh~Qjpg=}N!yR>frJly0XOOrPFj7P z!&`LWVt2L4gKu+~co-Pcz)9b}z`!tr6YNc$%6C%|%8Ms} z8iHbrb*KMVXJlZQ!3CCEQ1nf;{8S%%{FWDfoOKV+od<>EN^s+pLBw3D;OfHraw5#{ zCmc;Wo$4>jz|a7dGwRQ)3i7ji>wYxzV0WU)gW@nq*qegAen8|-uj3tFr+2&Fe>Xa} z?M{3vlL5zEL@~%S4@n(G)knaK?`yF6lNYH{fkQLM{ zJ!!c7j>$B04n_tBa2JMQ%YnNRNA4;-nRZ)#Qs9lEpY=i@iy%6t?FeoHB`t7-ZLqDC z1UozpDml069NW#`8}f_23>X+BxFMo^pz5+axasc7gA5D|iy<}liwR7eRp@0Zugx&d>6A9_0xXoqo&D$-v-n9U`jyz>m}J#f#Mzpq@ZUAE+2&FmQS| z<$)~!zK-A~Mh1s;sKT%wwwm9eN5PKGg;>+W7|v2+&Tjd0OZ1bAz5ZMb3=Yu{)yYpl z;U3yvn|^LN%l-cX%LSMj8la(J_}Gp4UB!piI|?ie3|pEYRxZ24>%?dOuzIr;?~fag z=a})pqv_aM%Ali^XYyc`^M2jwF~#{6Z!RAH@65o!unej#1=Q%0DL&YG1a2p4_VuT%bhr?mbDsNKiFa01dZXqb4Tw*PJF+w5^H%X=ToF;cosN;nx!J=0kf_;Pc-U<6(&U(Puu70V_huQx@`45z>7BO(}oP4K$ zBTnzfHP20-Zl3p%``-Njlw++K4~NOJaGO~y8Kzbn<{W!+e$`8rD;)L48vkk^*w$-q z|7QytBw%1**dP+fz|!`h!~U+n-RI}|x^4{9Rtd$)91xc){cpanDqQr_A#O(w+I>#2Pa>i;7?@;l|7ATtQ9AFZ)6aJOSDB$l^~B!& zIjpAn>8iOX?UYLVgDp+Se8JgpuIAbK`*s@t zY`sr?u3)#X)%?HpXz0HqKkonCYpY`S{D0r&BhR}6YyVpK{^0yL?N z^QxK!Y>JMo2t#9^%un_8Q?{^PhgGI%9Unng+;?YwY-ErtMn! zEZ(;4yZ*oSoI5{Sz(KI#N+1J^)rM!O&5z~GY*|sJ?GL%OrJ5f#S_?r4dOUhZr zgy(HOmbUnJlHdh#zSGi--zUv(*uh?FSa9}qS^iRnic2TkPYdSX+8-qt`!M+Z>g)Gc z1W$4GUB}&?$aI}=)vD_setmg&GOUJs{jJxw;7W#pLBNlZ&1z%W+f{E&Vmg<9iHd!* zx+}bPrQbu|-JYg9)~=sdy!h)OmqNL!De)g?TkQ?MFQf9;+AeLCVDmeZ2VpCi=E={H5WDSX zSX=ZiuWHq1mBn(W|4(mqv47si6d!M&GwZ%M$c6^hE+&Nwjc>Qz*3vz;^!Y)t{?^H< zp{f_=pOQMCu{Q5ZUDtp0g?Rkmi>^-!JqwYRuI<}-*`uu8l*@F{h+`0~3_FIAU+n09o1oXyqi zzk(yKX72xI5}$n~b4!)oE0Y^+&n%q?mtJ(cBAZm}gtQ{Qj%Gr=)AAl(TM2lvp6wrT#IhvF_%tuv?NE z&$-L@ZphgsyDD^g!RNjot2Py+f6+KvBzyUDhi_G`gYw5+^+&5hwbM&}LoDrQQn=9i z=G~rDPp|&8&;M^l>=EL0b*Sfc_`YMMTDSVoTS+a^HnBUbmPYjUd^SJ5_0_Jbh0ioL zO8j`xynk|Q_w^UruWQ`q9+J84ShLq~jZdiFo7LJ%Qugl3fA_7;YTkGtJbL;Cw!NDU z+`4iMY@tr!9Ch}R2M5{zr-wdY_0B81`r()BU(W4&xpLRGDjmzETjOKd4fZTkf4TC& zudmBw1l5J!|B3c}{9N~!$sMy7Uj-K5+aALnytlkgJxSUxv2Xq6#K_B+7aV?h(ag5@ z=BoRD=T1DF39)H`1Eau;19!{+ul5LAV-)$&`^(o~SN!+bEzo)sdi~PsSmyH^_geVJ zM$CC-7<}&e^zVQ8GkfF8V&_b$xq0dN*^ujBxsUE!_F8e41=FQv*O`2lv4h>u3d%Si z4&>K~uTKxZyVT6~zuCNVQ6IjpD)_ao^ZIw;)p_$*KTCc5`RUw(&6RD}SML5O6>qTl zQ}^zA-L)GwKA3i=#zI8HRX4g+YfD!DhF7alN^E6Z};ke7XJgOV8Rb@us~i z-7c(+uiw7q?6bwZUr!t@*q+R3{&mB{El*#)&#JQBwZ1}Uj?mg?&)s?3wsn;|KhpyZ zf-o?+fb1!F{VV>&vEKiBr>E!3$#J{t+FJR2;nnro(VSPLo-px^$h|*>(RW>z)LgpH zvqVNF;+*Xr#vQX>AM5o$@zwrE=axlUmn4O~`d7`+%v@;fr}(n;SC7j1TNW-Crn^jb ztgVy%+TmR9{%~Ibn*lfsxeli^^v$XMS2`*Fv);~k^QV~q{$Rdm!^szBwQqO7$`AhM z@s>?;@2l@|f32Etc3A#@|J6PsUW75)a7O(3FPAR1@h%oS-7l@|d);+(MX%55Y7FaFcq7_+pjdxL+K1w`TUPCw=x(&>e1BAq)zxtQ z>iAW&r>88}?QZ#6E+6bRmut>F4%hx4-MI-nI6z}c3=E8{4hxd!|9TUD^6CA(o|Cfg zv<5b+%{iCtbkO_I3y0U;k*}mGj;`ET8(4m4YJ`rrU+>f<3(8*m*D21I(eeKMCAOke zF{r=hOx=}I#7Vfq;rG28piA=YK8x^X#DelO@9Uly0xRvuj6QtWNOC zMbkej-&oZiV|d!*Q%%jfU$_19bBzuj^YuR=nI5O~Jg#DE$+7tQ^-j&G5@0+jh@cgxH);0TiTLZW5J9hrUj1Sv;#Rb7_nS_(cED8oL)8i`_%Y0id zul4Wi_3e`jsJ|Bcxi=hk1cM$X&KxGmGS!oJq4plGhcew{i0z?G820S82w_wVexUKGnN*CseMo(GmqtC~vb0o0%*bnK(DO;gv2r?-pF$^jq)zvZC` zRa#E8nrlACH9I*s`|*MY-)A4Jxpu#-{m+ACUyHu){U2mw7E(2{OS)>xVv*C&Ll)}m zKUsOX_OOP>{}TIi`}Tb7?Dd^E*G{ME$pX8*py3t<1`!PgrsRabZPwlL`9D9M?M_;t zU6#8&Y4xXH6;s{K?eu1w+1hC+{M#nsYf*J|<(b-gS-bBuR$cmexqC(8uR#S9z?jgRhj_U>bgk86HC-CTd;!##1rc^?uF zX&!pD_1cQpe`Y>8rttL3QDIlvjp?th%Yf4sgDO{pL;E!S`%Y$gH8ICL#ZQOC++MGB zZ|d@w)2=_(eiyZ7+2*<}3)Wry`gP`EwL1bTB7Z*JU;XpP?B15f)~C8tR$D7~2XMqh zmEHcib5q(??$oDUYg2dUZl83wtg^1qc&_gB+(4WBzZ#cT_1k{7)4-cIC zMXq1j^L$_Z%71^SCVYrA%-F3vJ>M?l_Vbfv&1I#zyPq!bz5D(&+kEABKbMPN&Jj#9 zII`dO@&AL4yLauLl7DAQ=7-05abIpPdK)`CUnZx0_xr!0AN3g)SijqK>7DW2r%ks- zf1h64eg5av=K8zIdc{$OH`>455#P2=e%;%gN!D9=?JmpLE%|Y^cH8d1tAAg=d*|HS z=)3RB`M)iGJncUdg9ZcB++7b&&({>v2@fc+e{KF}k55-y$%5B>7rL#v-+#HY$YE1e zfI{In%NJ)aNxgpmEBo|rhT9fS`g1`$YQMsa=2L?KHmG>ff`xow*};i*#+&zqoI+-)_6>w(axf_p-m2yGt%(KoEtAIH)V(Vl+KTRDfxBR2Jz-nvyc0WF5J`J zw)NyxyURb!k3L_d&9Q6u%=PkH{@XS$dJvRR&5$wsx6l2xzkJGB?YGabDGPm~y>Er! z|Js~CA$;)6uK^N`z& zK|&QYpHg_TW`S~e&13IPY4gRyT#ced72ho2_@V#l!h-|fuJM*nVc(-G!kWDCedWR% z&xJNGIC0@rer~wzAGOTWGwc5eT0WXkYV?11{)~cR{@84e>%w1_|B12{DM(w*_iOUO zU482+Hl*d7OPy6c@zhBA>)D;_YHz$MQ>$v3wSV%ax;y&=;-7AKd8+f_#5YA9AD3xm zRV{W8e)T;hJw`e(SAO}|&)cu=`pMkBBTni1{}1n@Wf=oR{>JV1yC(NxljHAw9*z~IKJzXGCar}tLlCJaJ2cI9g#T;k%<9lUu)BWx% zFK(VPc{|HjBlhV2?ELVSQr4Shx9h*&3vCR3Rcrl!uja8w##-A#jbGfDlly0P?SZf6 z|0CRvzSWO;xP9%9@2|!8ubBA3C-}P8x+exR-u;sQSCOLJkraKTSM0RZ%d)e-Jw@#O z4~d6O+TQD9$uArF>vK%KU+ei?)BY-xWw$kKvR?mgy0z)Hj^5|LftzBKrpFiW?O9#= zd%w@Nn0;%0++DVJPesm^kN4f`%PZSY|GoBRZ@T5F^-_%YHF%3wuD>m^`>f@qpB>e+ zeVfnk{A$0~d7u4{HPT1zw*Ir6{*85V&hdvw>u>+Ol(XaSgUxsAHZ1*dedD6#ywiUM z{!Fb|ZX!14eg6X8hNUfn4G!(6f)iKIUGjtF!ijg*w)G!A+eH3eReSXPzph0O_P<>8 zV82hKNQviM>x$Bo^R#~~J-RQeT#9emAI+T~Z-zy3O2%yz-hSCPLN}zWsIB=+IVc=Q@5%};pgGe-wu9$U-4h_sK&0=qQ8G{Eaua$JH+T~5g@&% zJbwKemD3l_^Y7dA+|@RH$xi|Kk`~;Uo%hZAHV%CX4j3yB7Roy-WL6MeLd{-_76Y4 z|G)N%yZ3G6{|VL~r|9>rS@7iB%6O}<%9C^^#Z6ynH$QjR|J<1WAC&F}1l?Y5`gP~0 zS5lSn*)#I@{Xft5?(6fo8)cOdw|5??|G9d1%b{O_U+=%%QTvHC{$I>RvA+k~V?RdT z-xBL4@_*f3z5UPFjpW}M*S`IyufI>Gc=7K^saNM4PI~+Q?<-NuX`HVE_2MmO?e6{Y ze&@?yA6GtYR$6nq_Vl0dF2N?fbNlU2h_-!Pnk#tw>c2hP^k*&fFOmG;E?fKPg8lE< z`5%8@Gka8T_xr!Y+yC`77iNQoh!!z$l&m~4;Z**;)5$55-$igQJ0TD=@!;PzwO3EC zzCNupu=3Xjd-3bq#rI$An&|&-%Dof~x3ZE@m6Y1~C%#U4{c&rY%;u|B5uB|%Hk2*P zYW~swBB@*N&d&Q)L89-wB)?pmsJ<^kIrQ1e=TH5;4b`%5Kh*B7PxmbJ+Pt_;^vm|HrDJ)+i~&gp-GZlvrxS*#ej_R`l?9|Fpj{+Ll;TX8(e zs`NrcXlnPr(B3@LSB24Aj+$)}aDDh*w|#o+{-?9MS6sRLea4Tq#aEYq`4x6rl&|T~ z_-?Qck*{8zv2PT^Cm~Pkiyi zU3)_MOh4cHUoQDS%BC)Fp@&4SFEq~(x9xIP z?F&}(K70Gdt7Z}D&+*^q*~X`QQD*$JF*RN{dd9@g$a$~oH{PGx|K7~w&GXZuH|;(@ z{Lb6ea9YJ|ULMnAz5dJ$uGNp%yqc|6yKdL9%84w|Cx!m)kxl*=HRs#Ax-P-S#o|#U%#=heAQ|;_xg%Q|5K~?@6d>v`(@tZ)lLt-r|*@$ zb8xBk-<+-a($T$g@1noT75+TUY%{r*XLicn$5zkZs&DSAzyALGk6W!qIqPKa`Z65y z_$c=1zS>{ap7p(-HMsa+YL;*Oa6$XmTaCOWPm_+vMsGRx>imon`FS;JD-U(dFSGmo z|H)srw@=RT6vQ)K`}Vu|?*DR$|Lf#;ev{rV{cFnnM#FTEU+YeIJl-$!*L=5A`OnJl z-<}j}-z3$!dyBe>4$^ToixOR2qhkyIKf0&24IlRvom;3)u zl>6R)<`*IU3?<8@7%lGhb6Vf{ae1}S=?NK;_GfuMPkD2H!kpC0TlVyAvr5pOwDQsI zwD})WUQ6z?Ju5f+U4CYSz5OPmGv0^3q_xOr&;NJfhwy@AX}KYn$7pZIh0jmz1phv;I!n>ka49 z=l#04X@V*DyO2j4&bsz)T6=BhHNQ#vi(Be0Z~0@?|D$|yTKVnFf32T?T0JU#9o7Fo zNu~3B_`mYikA0T9Ea+hexv`SB=m&W`iXrryq({N;Vk>^`G^=YQNXPus}%`bpdA^YU+` z&ri8}G=0~V-}8Jf%3rDGFaE!O!jJfUN5zir`?~F5`mgD1I}em?{^K)WbgH{<$^ZLl zfBKjFTmIQoa`9jL20zf)aLSP-))7-HR9NTM&C-bomZW{XAZH(!@WN^E0N^e?OEtZ{yvzw>RupKo2Ip10TEI<`$bF4*q=YW1^1!e5UyJN(VJSIeogijKawCB9XE^Xy;K zyd=JsoWEBVJ(D|p&8|m#^iR*)8$U;__2|ldc8vP>4{wd#f6e~PmA@-3R=o2pHq!RY ziQM{bZe~ zmxKR0E%_!nwPxRo=Vv31{uf;TTX|>h1-AHKXU?$q=CyS0_D;322)upm*!|^tL0_fp zno|#c+@JTqHuXl>{wGH-mHiQ4s&jj?g!`ne{`$Se_uW?Qy}tLAs8LS#-^wm32kPxfB(DRD^xt4#q#kSZm~W8-&_5=zBlW~-*PM0!szWY&u+i`;?e)ccDb3~ zgxK;-?(|NN4|o$Fx8ZZ2(cORXUpDm|{I|dNNBMu*%8uVY|KF{#yPSTwV@dAz1AptY zKgR3bN9Lc}s6eL#nz547u5zo$( z%d)doFSl5!uqw_B+<*H^=`r;?k8UpzfBtg1^_>TfzN`6TRQ`So`(wVt`N_KDpI`p3 zX}U7WcH)NGq$Zi^#iv%;cm4IR zRxM-Cj%{`mg6_&R1WuAh^(1>W#~^*8C~jaPf)EdI{* zvEGojUi@^;Bl~Zm$|oCZxqtuvthaYjMR#<4Rr{Z32kR%ZzWs0A_y213-W4)S&DgrE z_w9PSvUu5r_kXrY$NupT{Zo9p_UX@fy>Fen-~RX``ThUaB;WXyE5GaQ_qQI|AE*C) z=Dvr&!>7a-=sqx3l&xKHtEln!f7avwHEw)+ynpLo`-XD?3@p1+Hn%MDx^n7BtU6cb zCb|88r|T>XS-fXcifesv<|GxjzxN^+U7Ta0$}V@(eD~E|UvjN_t9mbbuJB9x{mOQ2 zmi=8bt;)Bvysw=9|LD1DX7jRb-#g=SXM0*$T&`t}ME|dA2%59WLS=o~;x|@Z|BL2UFTCp$d}rnNtgin_DPJe-NXiI|nUVg- z``Yr`xBgFWeRWB){wMFs<8N}l|3BRMzfh9(#W&qw#_l2Yt8+IC9{K`&-ZV-v8+qC@^P#-nakUo%PC#FZlk^FZs{E zAR07>D7tvcm+hy1UFoi~blsQy#rpg_E7`*)DjvR`!J8I;y?^4_eYWkVQa-<%YJalm z=+|qn1Fi2m)OyF)ao;?BEn4+K*rV--6+J)a-hQ26J3F@UUHGZpcYh^Kv8%Z3xpYcr z{Kklrk6)QcY<+X=Rer>3^VPZaow?zEb8DTVxAyz($v!z_*7DHxy~)&4|Wx054ySpm)iGOKPfByEbW}*9EtmD{`7ND~0qqR6+m$Lh*Igj^0{OtUF;S*l3{9dx(eA!3&={LU~yuGjd>4O6w=WZ?A^L4qsz8^E+U%PDe#e8{xR`jNXxCb>% zyY}e*+;3()M|t(*es-OEbYG>`>rvUNTZ%jLR(6;iEwWU~w}|_DD*S}gV|$U6xz@k` zgZiOz6+iADGK%|u|8(&6%M#NzcKuh5|2=DA|D7Bmx8k(m^b*DbovUpD_G z$e+))|1aOXZrbsF6Pd4|vQj+y{{P+QzZl#9-FQ$u;r;w@``1PP?ce{9Z{5ScRpdYS z-T%xl#6Y9XC$}%(dc;Y6a?owY@1GC(h$aOA5VoZ-dDM$_3_er!PWai!#X$Qbt@K}d|q}tNBN{-BYhS&cx7K|ci}~@aU&3xo ze7}y0)_=V!$-Ut7!(Xw133t+@XNLbV*V#Ss##e^Y(AbDC4~zTBU7dRnR2|9=h}D_eX` z`z0UU@9mJemU;20Df{MJv-v;zk1~EOm#f}<=YM=zu9erBxx4D#EuEhF-Zt*z`(IPE zb^0$&T>pDHl@s{e?F`S*%d< z_3!`5_iK(kF#fw}=lgW)d;ia?|6AMB^h*Enw*TxGB)J+KreAUG``YKP&i3{7@fj)4 zSIT<}oz49B?f$l}pH#x?Ki{79>hG$2qtlmFs$Q8a`x3%^a-RSGTGNfbDs|ej`vkAN zRtk##Ua-sO_3MamvGsjxrd?i9dUg5Th^YZDpQP=&?0@O)t@WxCCe7J2<-737$tI-* z0`4p?0-2YU8K&=@<0kv(#lNht8J&-!-&NI@D65s-{#Y5j?Y`&xs^u-sy-WDLb=4*{ zvmC!=qSp0qEuU40QC{h8k2lJmyVGkm{H}Z7j!gQ$Ir9HzE6-^~Qx1v7|L@W%XPqV{ z@>yC&Wmogj)+77R{z|%c-N!=WU2EmjsCM*;>GH>dtNV4h?U9My}LBL z?!*0j&fDkPnneU>9}NvE2z!6u_0RfyuaB<%I{W3C+NX7MkL{mdUUXLbZ=~7jAMv&= zO)qYRztfK1W!=ABDe-u!!No@aCx{jHDwXn*(L{aV4Y$J_N* zed{(hcE0uhyy?I8+PAM3EdC+Bd%|D)2E9NAmR--v-(@YAFPn9BCDT#A%SQ@$%&k3y zI47#C47k5e?eLeQ>g%tbi@H*BwR-FBx_4WI|F@~ddF=4I(R1(TZ{`V4wlHy?j#imy zck%V?0x6$A%Qn{3PF(Y4wf*FjKqsYZs^w7^J>OfYt?6Dl?S903v#*m#CUH*d`PC&XWM>ig%DF*UIj z=guG4o;!6zTmHqXHiyk*b?%>9`?{Q|tn(Lpf9-NF4c9M@jz&cX)UTf0v--%U`MR^0 zcrLU5du+wNaJdy8MYATYSYjKuWN*!y_}KfJYHNjVsjsQF-{yX6{oR8nw|(lpykCL) zX;*!C-QU&C`?g;{^yvO~&ABDFcl`OaK;utb?DG{ru76RnkB~n8m^u!tbKpV;`sjEZFdd2ZurIo zW}NMgza#PgVX<3Dp;MdG|MZ%_e-`ED{rPsZ=*;ZCDXs7Rul@B$dO0Yr=bziX?|*su z-v3`b)%o^C*tn$yy~}oK+xUOJ_n&CViG7di9e>v|%mt0_c&bMKs?zzDa8+IC@Bg=D zvzGms_(VFg^ZK%v-AB3~e}A-nklQu?L0r#E_z}AFZ#>AyzieB9x%`US8VzI_H^$cjgOr%rt+7=b7dy& zi_p++S>pewY~!otH`s2L=G@uzQjp=VMbx3WT+8w^HvH~8Ki$9f!I2Grd+Zl{=vZ*_z9-tWBs&(D&ppy%=Z*hh&XT|4F}{(JnZ>zB+cyMNdJe@QPVU;r*_mED zH)QsWFZYiD}_d>_SY|e*;E>IJMNLcT=BND?Kgf^&06;F z1^=;CWghcR|EhjmCcEd~lH`8f^*7Dk*S%f$<8<+=iBo*v8ukBp?|;$HbHCT~x4(Ps zI<{ra?uq@gIye1G&7Z1}%kxU!7#`gg`JdmO`|s@)&EJf^{kb3Zg)!&)$N!ha-(G#m zu}b;>kFCy~{|gG%cPV}D{9n5Mj{mMlZl&$#zw&{HKYM4-n{fL7uj*jE&C;wDH|u}j zi#Yz@F#ngZB&+$a0<(|t_v7v!|DRg_*ZgSuE@@f2*gxmX{>N);^xpipf9;R{%Rc-6 zm(PEmUiV4(@)thk!}tE5SNrFFsPFkdd57(w+4#+&Nlz!w%W0n(Bk!i}d^CIMv;{w2 zpIXw{7W#hj`!jcYzHF$?oav|Fa_NX}t~U zL8riT)0|%-O5gwAn6C1Bd(1JFjjKf?R3iJf$ai~*EVa2XaTCY3qS?8sJrN&jooa<+ zzWv_w*5}f>#JRt|KEHhZM_GqwSyivp#Hf1S+_k?8EPMB9fA_I}`uoV+XMTadF4g~R zIpbQWJaK((?uT1XFID}yy~bn0R>vxX7u!>6ZBOq!W@jAsas96}quy7-@8ZR;ua4g{ z{m+wh`_*ys@r#pPB|Lgzr__~L9%zdqOtFK@9e!H*UzW06b=idLy|5wc3R?t^* zHhanGAM?-u`~PeI?$l#X?cPUE?=Aha`~2Qb66QAUJV|PI=46X~Tz@@P;$!_K!{Z{S zuOItozvtSqQmO5rLh=3W1he1&mE%4i|1^`o&S9C+o4^0pJgQgO)m#7f#++~e8LV6x z1zv>gD!$CVO;K@6mbZ_^Og*+!+-VygN`f$Z7-&r-UT%0z&bTYbQ6u!sm+X?eddk2GUnw1k(9vWZW zb!`5Z1*>f)1l-m>`~Rk|s@`+jaSz>(Q`hWuuJ3t!cgI?n z@7v>Iz85SA+BS8!@CNGxc86pSsNeQdxpy|yN&eF5^s8q4Zx{TIn6~5CSJOrM4zj;e zJJ!#;#TGQ%zh~->zL%Our>@Dp^uzo2k6DfrS8AA?Y103vdpl|77P;C!=67hG=`$=xu8?~F?_}}%tN%k)f?fUy|a^lf? zqkh&S|39Ukw$@hLdE<@MzvsLD?|-xY|LvaBe-G^c8(qkIy0EW)`+J#X%Irty?>x3& z{_fS(Kffz~O|0j>`~P*srjyT8%-(i<|DSvGf6Vv)?`583_tu{8OZ#sh{HK4(hpD2C z$5Wx5G`+9MLi7IrP%+xeHf5HZ&#VP2miVYUE<7Npr?f6EzV`9$VC%=9q92Hg$y3w->&Po2-8(c-!Yy?wul~t!4Ye`SxwKH>;h0;a}(^ ztx0`S7d)#!&gp%ff3=MJ?Lr})+Eboiw_ohMe!%wspYxwi>ep@Dw&wev$M(zqF1HHU z@M?jgSiqlTEl$4clZ`&kvN3yG{jskuOK#S$w%c?4p1Ot4eIrzOHSeTj{?)!^-(qUc ztSHmqE6ZN)?78XQQR7v$f4|OrRPr==+j_p1$=}~zh!|4l92+~xPk-up*wJ?~MIiB&o;|6ShxvP|mukL^L-%a`P;=yL7;f2Xms zYQf4|A)9h-m;5N-c=>4Nf%e@>Cnr3z-?BBf;*a=p-R)=Y>LeY#cKd|Eqxx;X|Fi#l zyS-VzxXx_#)BlflKJP94v%d0Uobzr;56exZ>no4eZ=5B2eE%84f6H(E|NZn*e9_PS zUw8E#{-}51)u<+U*MIg4np_PI*VlOMSTe7s zO?Lh*$*9mJ8s&X^byiMRdAQ-~xohuBCO`2~ub!knAvdsd;*osjzrT(K+g#c7Gc)Jc ztquEv>^ls%R!&*pyL{V=pIZ;h2Gl$|!oQ-qW5$~wM~=UE8n#&Hi>CF%EGMmlbL<+g zyq~;o`R;4?7rw77fBb3Jp#+~NNlDRX0&^$dICg0R&&K_;E=+q`TqUdGKWFk1!@TQL zqjQzDx5o)iJN>`om9*O@mdHs-g_tMubb^IUjKNF`~7Nuub!yypKjM_ zTNUzJuKaiV*uRy_eQzmt*N3NAeLL}TefQUw-|G$T+3uYDL;tqEr0mMy+k0qcuPL{XRw~ z{MjuyF;{#ts61;I`@i|_|J~U^=dP`_|J`2n%dqeNOuNswg2c9^>O8)G#`xdo^E(CX z&GM#}+_#AP{om{{Xoha`y`OqF-~O~-6=$^T@BfmI`G>wqtowN9Kl2NrK(>;z$GR?tCqf97r*OIrjfegM$Xg9 zlT>#7Z96_W)$HN@Cn7yaCeYa+CZ_=i2REGGArl z(=ByV9Dd%4OO~FpUQ@pM!Nc~a8y?@&l{U}Kig{N3@8$d?p;Xsb*IOs0%)I>Fa3TNC z>(7_pypdx)E9#N-^3AUvxcldaB+d9HI`_}&?}6<8hH*8!XR7GU;$NfsI=<@O*V6u4 z3%~GxcZCDr&dPiLs(hlsrDNMe<^CU+yJ(|yuuz%h`rGfT@*eL`tbWmKV&6iys2|NTmrvgdSNZlmC(>p6>kp6X?`p@X=2|`KkJIip{Wsk< zcjlVg<@TAEXNkX6J={}&cmJ|m|Kq>yo$3Go>N$(|F_O=Jekoi zJ?YGw$M8#KYgzjF2{ErRXdMDQnY` z<5#XJ`>Ocn{#E_icJ(X!T#I9wr@!9)^5b#Qi|YHaG2b(-%EetBCVqLaeji_5+-O1C9VU6Ep6`~OSR^GSVSf{Xd|d_=|fM%{j$&FGck zKGDSUY`x0M=&I`JrxTs`_?q@lQ2E_r)%`zpw!U_^fuyHm30;-c@oT&cbKe8t{1NxQrM&;0hE|Ih8ioBpN$S11nbVfyp){Bg5?<<)Letb(>e*pZ@FL{o2mzO}Dp;x$XWx-{_xvs?2w2 z4L`~1L-sER&%K)|$CmmF=Wa`2OF)9$#Ks{wuV9FLv$YlJb8yA2|FB{TRZw*Qb(6Gt+4C==;xNdy;|#@UbnvdT3pEYetL+_iBKdb=D*fY{jpvyTlwGXzt#VK*Pr|yXqUe?rpkKb zfBk>9&pOQcyDsQ!rYB$iHqo%7{U(vatIv@5Q|G9l-lzgBoXXojc%TG>zGQr{JWrtP& z+n<+yRQC4isq(kozhti1fw@KB4=%nxRps=gT;}?XDX+N=>SnHf`i*lV=Uc(&Q{@Vd zyiNLiWJSE%yLTd!{O47+-H8?XmR8n3ThBh$NTq63{L}s3x5}O5LpjT4{rOeyBkWdN zt2qBgTkf1M{#$t-e%+`0_4kW!=8<#0ysC{|yMCTo<=o!W@BMe0Yngq{d^~H`69+|+ z$4*LbesA%S{=b^twZ~My%5%nh&-Xu!BR5{%W;EwVxM7m?w)y^-e*fI|&h!hXF z^Yu-Immeof|IeGf^RnUY2W}N>tB?MBd!+vB@22nnC+*E+{5U_az2t7z{QtkoSIZ^; z*N^{oV|j}Ab$0hX|MR>4Pu%cw+iRnL&$qy;YNw*-li5$MoBMDw^V|e44};S$b8J@z zc4la>wYUU3O-jA`MNNb|DsKM=Ikh?W9@xjN+4W%C#m=p!uiRDsZ`&SoZHCX3T!H1C zix;b`+3Y*1Y^Hd*Lg6z7&o8NMB|BZ54y~MK>^bZ2YZu-2wL+m&SE%1_c^xcswQ;7u zl)wG|*G2E1-k)@H*H`&Etx6~LNGEAGO%I!?>Ym3|Z!5p8|Fg_u%l`cN^KQwh-Bo)f z{jMTl>Al0T``z{DuYGnsTzm0t)y(3FTkiiT{gk=nme|!#ttqxD{|e{cssFq0o?7Ob zWBX#`mlYg%%%9a2T$sGaPxQZj?Zdc*=Vd>>x_&C)k-eou*JqPod!1!ge)YX(|4n!H z(JwoW?60?r?7uLtaQBRwxszX38}WU7UsqOt@7!7u|2r>_OcwZ`SMts2?YBL$r(f^x z)A%?0+y8f`rOUZK)Xc4p+&W+4@Q?dNpP#N3-Bi48!`-w$+c*99x0@_3_P_4;mFb?k z%lm{oZ+HCN-}3j#se{vV@>CLLq_zD1AN8mI)PzU%dcW%#?t%tkR(h@Za-ppDKwgND zobb6B6Mif?rgA^*`=pnTw&sRBT2^+!bJDB(n?u!9Du2yV@GO$L=BlFBqGXtP^=+`- z_4lt?d{slU_H8W-eQP%VY6*LD_?+5xI`?Z%=lol=&3osWUA~u7R(Rd|ZKdh={9&DG z*!IrZ?N+UBd*6NG-lvz&Q}^sqg}cI|!lZ~wRxQoBeq(&v_$=dshre}!H=v+7Cw@z9#Jc29%9Z~qbT zlP~rDHr~@Ir9nB#)i)&{{Xbz}6}xe-U)Ay5?6vtvKRmMc-xgY}`ZnqF&!@Fkde3(p z-5cBnQmq=!l7@{joMpTa%G`y#&Iy7stU@%R5F6D~Ua`M%cVh@;j0 zXAz12=fD5I{dSh?t@FoK{ym?%MK5IQo5$P!>(6JtAPQP9d&=eVwB3I57tDyOJs$ox zB)8~7_LXx+|ME5;IseT1or>Zr|NFoCLRI_!8hE+CIvF@kMU``YmEDqPwfTCrXQn&3 zs0UX*vT&bo_wb39<(5=Nr7hvMFSEUvdc6v|mIfb{+#CD2Oyuj^T`SBqexKma`x*W7 zkxX~}xnsx8r!Mw5RQ;UwL7Yd=>8C5jCw_X`zg*L^^n;4$C#n64ee17_hnPpszre1# z%l6W@b#>>3)4ofU27b3;{LZeNss-0=3O$(HW_ zcUM{SJ^w5l_vd%!>6blg?iDAR2UdJt@WaUSWBr?l^;+B;-#uL~lliB;a>d{OzpS5? zeeR$0`;ER^cYo%e^>r8T9Zip$eP^l29dV7^;Jp#6x(xskNvW@=l<2l zeE(nhr+>+dsav1#c=O*qh=+CBgykF!=YA|%d1K}*qm4RcOVn=Pyj_(3ysYl&iRqs* zlTW#??G=``-)ngCcgW;pE>}W2C)BUJeQ^3reCeyr=$Fq-Ch`_ z_jq}*aM<~uX&U>czFYoYeBV+r&s*8s{H%W6ZDv07_o%vjVeO?dv9EHwRJ*@_yKSM< z*`lWJ#654U%|es+TZ=WYJc*#{r~useb@f~N#AsLb@(w>eX+H#((MFAXMb_N zzD}>xxNc+4wz@~cCRh76y%i2S{e7=NrGCzVCwsqcxte`CkTGm;{7;viIahgp|9iXn zU(VzG|7MqIPdcMsa#6s2n@`T_ZJnD9Q{#n2gX?x5|3CG0=-&8GadvLYJO6Y4`{S+L z@&D7ul*nAM$yc4GC_DIU{b8mvxq7d**`H_I`A_Tre=7g9@!)=G^V~_t+4@6QN8P!4 zqxVvga`xT1VdeGr{G7Y%_v$7^e_QqA%iGi>=hgcp9^XG=KK0?T{V%qy+&1@j&95h7 z%f;W?h38qXkriRcEp4#k{P>>BGyTM$H)b!ok50EWy7fapKHl$nS3S4o-|N=jcTX2P zdhuzr&U=%8%*NaQ?ziUsd(FB|E7vmV?rW8p)Bd-5>L>nu^Z)Ozw*Apv|98y)pdE6| zvGB2YU~JZhd3h$&{_VbF9v~BPkCAWKfj}<*?0FZ?)v}8cJf+< z?!5o;`|P6I6Ia{4ZWsN(`6hIxFZ=I|D>rM>!;@F%_b1nd`{jO7dAa}JgfqXcn5rFk zB>&y|>Z93vr%mQHzhCz^VbP!MUM0UH`*JUTU43?a)cR%5yH!?uELoMZX4b~Q^`=JK zOKm<~Z9n0eU+;fyTUP8UR&%Yyyc&M#`J5*UDr|1Qx~3jtbx~iw{=s(slh$_M8Y^XA zRDb{TxmM}*sbHVlLY4aekEEkCrz^^=j+p=DmgY76Z!0(ad1!d@+VvIPOOKacUC)2p zPxW-_xfPSsIZv+0PqyD*FhMbB?k1H`C)w%tUwRGXJKxGLzYyGhJ>u`4yv=RbpA>T$ zn*09Izh6`Nsp;I~_@qyBzdv}i_3sw{sK0gBME}Z7|GaKTNZp^$x7k^{cgh~w?eySP z(vioCPk95Z`u;yVFLgEU;R3yCd)fc5KC&L)|7!K+qx|`q+PeUoYW(s&T-ZJw9vi@~=O{GjH50 zzVlzc`bBh?(o?5z`EiARuavf{yuY3G=X~=2_}{yi{@~X?`}^&K#(nwO|D{Ct8NdB+ zZu@aZOxfSkPtEdw1K!Dr{Cl=3_KrBW-n2WWmb14Vws`;l@uoiaKm9H8Q`HZ5|F80S z^;D3-8MNbWg8hts&cO9H8@$Sj>@@rDJH5JoWiszv*R;zoo@`N^=<`3fd*Xz+TPBBf z|E-#|v98osa_fc9LPAEf)vN1ry!O^Ed(5X`S9+&@+Oqt_(@)&Dul2866D9t)uPQRf zW6$f?39H4lZ~MqE+4<;xqPkpg&F_5zdK0fJpDx*`9a}fCBC2n#Tlmz=KbMN0yngn` zk-aO=cjis~VtRCoouEJ8v=ZwV->2+&6Q+JkP0nTI_lYkjy~(OFk6ZNq@!FSruQX0M zdDwK1Uad~=B@@15+W$U3x&2Bv#4r7F?sJ^1h$vDIhSGwj&^g#G+S zU9tQ>yOkc)+VGnE-P~!~ z{Pz9tQt^-aM%VxDuS>sO_2+jvXRFl5*Ynmbk2|*V+kff#H#F+M-pv<_e{p8J#Ot`{ zzt;Y?d@NlrX?OW}?f?9*%|EMqbN<^)Wj5~k{bT(+HUlRShDJWo--nlMNSQQc#SFKc zie*0?HqDxDqB>J+rpd36gEJmJXHQ%EzGCf)%5O1X)2Kbq28x13p#Vsh6lF>+FiK_2(T z`)j)5PaDaWcJF)H>HFziuwP8U$Mc2DKYHkDYEM^=hysp-S_C38)- z_Fc{YC!(@{?W8H23O`G1^?m$DUP5HvwflwDkv6AprJmNEcJkEPaFO!QcmD3Qo_gCb zT5Mv~n%TuZ+e&dTi@be_wy_NEMx2T zwr#%ufA^y&Yt{ETi@j>jFIN7(yZisn_y51vT={c)XWPnW(*LtwhxosKx%qtU#q&o~ zi~oMTqrK0vV|H=W`{H-TcaJ`v+Po(#_2bNYxqqa${(HI4IP2E`=dQ;BkMF<#zrShY zs@OJ>|3Y!H%QNkinH|JIn`c((g}iCmX zua{r_+_uzfUT;gjP`CM~<#`<~uWwJ`Y^_@<)wnSJwfOG&%QhcfS+8_*r9#l(*cf4- zOJ=iAPPePcD!t6_xvkZ{VCox@$uo9Oc`wh`v0D6Pir!s6wSD(~rTB|-uKxa0KmKQT z(UUmtF6l;_KLMqMC3jyx+H@pu$?t$|ysB!;GxzJ(dv16Cw&m*k?BwdMBT*R|7BjRs z--x$fC|>_(S&W$mpRGlE(h6zbk|(#EpLA?(SK*%2SK;~CRes8kw@H&;i>^Erwe><` z-M?Gr3qQ}kux=r5?%uO*lK&O&Nbzm?VrBL2mcM)bqra|<+qCmUE+jTP9r!ulcD2r_ z5`q7TvALhi3@;z4uiBIJOyvKyW$o^hY{L5M@AH5D+7T>uv*`2A{&`V*pWiDq`K8qH z|JaR*Z;Y>;P1sO#dfv9yH8(%27QLRkIiEjVM0)#={NgY3pSzW3rM-v4lV@gx8DsdhiF?w1f@(4V+&htq>q=4&VW@Bi*x^k$*^QPp<}|4Qpc z{?2?Gzv%ah6+ctvH$UF+U!F5s&)Hzf5B>Yuzy8QOlvgn=Fjo6>zhnQkHh;I=Qgt2S zbq5zNTm4Q(d~(VBKSzIxeD-*ECG=nJVOiG4H8q!>tUrF~=&W0>Y`dO@oEDkH9UXVX zGV=Pqb0$}QwJ$j`*W{wMFn{zv(f1kCw>PJ}HQhV;UfG=o3`wCjch}C}UL4bQq3`B< zwcFdC#$LK~{E=1a`pvJtHdoFoyl8neV};pTc^Q%4Z<9iq-dwl5b5-}{^q~Cs>_>Os zPfDGBA*?d~>fgKhyDPF5zUE%lAO3!O;bpgy{yZ>vMeJN5g zjQscd*82s?{I9qCc)s(y)f?vb5+eKGXB+-|{Wk0Cm!I!1AKgFK`Ooc~+bQ!ImqpFD z`8Rq0W_kI=|I*iLzdCbJFgt#~#-sfjX+KJ@eoR`;)c^i=Ufsj{^VZb6`FHif-d%nFH|_nqYjvH$ z*?;yYkGskIKWQer>*CS>TYf^83-5X|xq06b>r1yD3r&ic&(e~AdD8R8_b1upuiF2Y zv1m@e-6O#Mbs<99U!SXZYN@VSeQ#TOOpRaRtkl~viA&$G?_F~L zXiCf##$7AFOV7X1`G33ktpl&h)_pztW4FIdu37KIA6DPzYlq2wS$DY0>4lTOchT#& zT@CSjeq=x5PEP$l{f7P_N5`Fci-PW~+!h>jeqNUM+{Pqd{^V*E>Z=T1;^>zL1 z5mmQ7Ic)3=zLhqIZ-~9jl?^fua_U|8* zU#+T3m3kET{{P+SS=0Y7xT`Oj{%K|LKcyPMo1uS}TW+b^m-S!s`+v{h{d)f<-*3-t z`6z$OL+VpK!(63P4SY+jYgbOXG$Ufhgfl6gy;oUh|0w^IyRz5Xf3Nbi4{~NTrzNHx zR{xi~F8SmCd0xj#l(HWEPV4V9eIygXiQ zCv8t%;7`=b&oqz85tLrL%1H^OJyqf)0{%`Ki-*;uF$ox9EeS2Ji)!#+MUE9`*t5==8 zzb&(N)!VGeZ&%)S%*wrO(!cUiywtCE0gvuq+g@FjpzJz(?f%WbC)Qhrvy`+R4|^29 zcJaSInqBeN&S?KzYWOc#M`y;b^yagV?BD**wEuW|`uDkyCWoHAe%JEW+-ug-udm4{ zJeK>P=@?k=_v_n>m8sJ|?2czIkNPqza@+A&j)o;NkK*6|*Z+Oc^pdFf@jR6WF^~3F z#y%>koS3!m_y5%58+n%7Wuv?6XU6`yZP;0FKi^=Ho=*1R-y!|GYuEfo-TdTez8jDevAJfyZ&#`Q#Rc7W4H+m6#mb&-6?-IHmxa8sTs+!A>`%kN%|JhWcy=}7n)ulEZLKpwKuDa}=`*l`Sl3rx>OJF)OqzvFm*XLzj6!T@bG&43qzX&diLtgQV#|4ZiN zFTE1s8}~5a^(to9q@CWBH*Gni{Jw8rlV$&(%$Ss8 z-4d*oyT@Yx#5cv;tIi+hpLJKm!8|L+=F$EfYw`S8@!R_=K3W>x{vp11t;*g1s&AM6 z`sMWP|M5MAb&DDN>t0v4OZ^Xi|KDBs|Id}{4fX#1UVXW3?Qf$utBthYiG2UO?pNCK zkMFw|{wrdgw59&u^{>@OU%Cta&-|C4^1@B#ztYR!()RX{)les=?cQp%d^O*$Kdi6+ zu9%mztLVQ}`Ickq7Dv5TrvzU)82R;Ak-JV7d#rD;Y>TM%8@+Xm5<>Gn-Tz>BP383a z@_#2YPh2%AoO$(S_q8M2KEHn~yi02*Z|8#E&t8-7Utyj9uPbN!*RrSCJ$}1to#gxj zKiodBJ<;N-n)j>ZB8{zIyH3yj8zLSRx9{hsM@cVYH)%cea+}rVdF}41B{3n7R{vgc z_4cVBPwuX;Q#)yPvYtOP)^PqOtK#>6o^W0=4ZqNJU3kr{MNxef3j&T!4`pwwUCpO5 zxq0^uzP|;pdQ{#@b?IFa`0qLY<6Gs!o&Q(8EoFMQywHBJ&c906gGr4a^C$0^W}$WP z%QMmczY>hTu>ODA-lZD2{xi3{du({^=`SuSzk4QBOi;~=tdW-RwAb#p_`quN91s&Bnv7x#}ZZ#Sl$uXU6EpY`9qXX3W)_ag7P z)|!2kzvZ~9bmc9@ch777EdBk>;IGX0|JmOnLVGgia+iDkKD9QC&-CBtzxB5N&IUY= zKOQZ_pOp2x;dK6vFu9tPis{7}kM^}xpSk~GY4eZof7j%^jJuI8b~|!aVG{Eg`XD_4WVa-Tita(8~$FaH-BbZPr9hWNK1vO1TvTz@6I z`QFcOtDhX&e`nRtDb{hbpUlaFB)0JJwb0{ZiB! zm%o*7zTLaUm!_&%8XGe9ofWP(KlwOxw@7Eg-t|YD1+=SDobKcW-S(^fJMZeBb31-$ ze>$Md?|J>s%BATspRR6L+oiWO`Sg)g-D|e}#w#B!k9t>kZC#!9bbUYJpT~ZPfBmPV z-0^?Q`>tK9-~F;SKe6JjRRr7j%?o~fzpdbt-)%Ol{*SlNf2Eu0b3VSDVpm|eb$-#m zRs1W?w_7l&{N)kcA1B0LGF`toUT)2#mwP_*=1&bg^8c&-zRIwV>yy1UeO>d`dX?F= z+fnirdeS2QudTfqzwGg?Y@J8(Z~vd)`zcAX?K2zejGIU5Kc|O?HY=vBc_GmKH#%kA z@A~a`pB4FfKmX7iZ{PI8-1ta+kN(Q7-oHP}|5`Ku+_AECVX8LQo@zeZ{Pf$w>30iy zOGN)$_3Qlmx>0u9(iJhf-*RnlYCPI+_+MTreu_-!pVx1feTI&gYs@<*$iFD*Q=sj0 zH50X&W+QwQ{-?+cOX8q7zf4{A^ z)bZ7ZwX4d^uC3T}OXaV{Hs7iPizjE+fB5`h!H4pnyoap~3g3UdAw2uYan~Ei-1OIX z$jMGo-)Xh6|72l}o~4AZTg#J=`A&~)-~8}jw|L2O%Zk0)yLcBXSW933|6|#s`<2J{ zf6R^io9)y6QGb$5&8s>ErLE1URsQw9idO41u1%1%7k<3w^tTO(bJMJNEAGx>ZkPL? zx8!E$@_L`NuK$}XS3mu9TT7?E{{4=-mz#g=;O}Lh^X|*Nm+r1|aW?jRALI3QOHVC5 zzyAH?#2s(iR(C6%Df#&R-?zWoH}k{ihdw-h?7ZmSxX*Y0%iFZ?j>_MDmCN$a0`ne~ ze_xIIo&R{>JFjxA>wen1WnQn}OZ}a0b&fypZ{qTg^2-YMht_UbAD{fF?xJ|9tDE?L ztGHSFw#fBeJYFCC53(tP@1;}7tP?AnmFEV$l2MS}xRBrJ_sKt(maO&n zNp+tkCv~V87BBaTFs+?dGV@dYzv!_43AXB5^Nn9gpPuj|^#8N_3h%z%nfo;O{lAQ& zS|+tN*1hk0+_MT+M24e!RpYG3k($`=u8yrr&z`Wxno{^pBrCUuU9` zTJ^e|?K7sVHZ#AuDa(P3f z7c2h77W}y#WvKmsjaHr0{|kkez4@0({qFo_v+-Ahm+1RDD?5&Uns$Dd(}|Ef8QZ5e zCwbngxqE!SwBsu--|c)|e3y^zpPydoEF@@qNbUXUU$!N?e+Fy*-SXR~*lMM=%v5ED zRGvrs|7f~B7hr$?Qf?2GCsEI$HtS-FV%ei|E^8WxHs)<+^csP zwu^pz|GPo+U$@|C=f3*Aeb&y0#yUXysj_TR4fAhhiKvy0nbuGqZp zMe3K+FNMSR)=ko1ymo%q!~LD#Ur*U{?Amo-scX^cvD({jg`N9-C4AMMW#W^CzTT>< zpH;cD-=j2YX-8JJ>G~gQclTai@y&nV$0@)1wg1(=x+_01Z^>JUX_3n^(og=H=DU4n z{oa*+l{s(jo4qby_D}bt2A|Iz502>W#Xs_Qz4e{-MvPx_<=ixDU;C+=kL=%SAMUOH zA7LTt?puC-eVegVrrDjwMY}8hI6bnr`))!pvFUzJ}*an)=y8CrI-}VP}_pZLP%9*{ar~bZKUCN5HT>7c;FRw1kPyS#3 zVb;xFrjqHOB)0!3zis&Cz2dR@oP5sf<$Tw#t&aPD+VGc8`L+9{yGtbhzZ739RF{7% zyvroNKk?}PEBA_joVr}#F8@C@{`y}jNSu7K_WQqfi``$XyNSQ-AHDx49V@+0cD3C0 zMf)3g>VE_?=g#O~sp|Oi#KN+p-~FduJ@(}4s;|?ZFl_o|w!ve=A))m1N56LjFL^I5 z)Sor$v)#|DkCGmy8VUR7p4gx3GtECWIn^m|^R~6uG%MGyS}<8ff0^Ryp4+bKetHkB z{yZ>0S0!>J=V#^Xw-dh{e8oBYtMtaOziZQ`>FnpdzWwFvZ`%{aHrj?RdNJ*I?2ms3 z1?Ob#+P7ofoT+~pPQ_nVJCSTy8Ix=M`nl+HNq@~RpEJ7Z?}oR@|KBHngzp*g7b)Qb=pWp41p8wVVl@PMG-1*P(w;HdET~`H*xn?c? zzUtpYu4v!5sM={f#{b^`ylUUJ&$esPugdUPlhi-fC!be*Y-sr*SbAaI@6Gd$*L?rK zuE6^8S%*6w2dAFzS{#-8ZQtRp`q@YS|Ex=S%JIm4&$SnelHY78@4uP;E5A7|1;(KnT%i4g5EE9{59!Le5TWtb5g%jBAlGwtQSnWYQEs( zq3i$RCqB8Qp;-CVb5C8&kyjTRua=%my8V;ILhbPUs`Kut*Pp)=n(R_*YbVWLH95HS z>#iT$t}g#R>y6?6-A9<4cJ!EK&;D^QD3|ws*uTI2Hm~+xYOSzYz-Kf`CDeENS9SZ` zn18R{|FP;&%2d+%X?{ZJ-urp+ceNKk;A?oS>9NSKv~#)8O_h7Af*Whpes_t5M zt+VQdjr+}x*MB|XpSpA-V*Z(}Sule^P_|+1{f6l*G zA_nUsL4U1v_`_ovXW?#blD8cWj@JKt>hR|H(_*u`@@9MdzJG6h^M5+;wwn))V-A1Z&>Uwk_Hli8?mMZz zyp)~Y+XIj6pI<&>`Ni9ZdY*J|d-z`V)>{RLxX!7k{W+@o8t`@%{0fdwUie z@qLv4W_$BD!wWW6hXuhe9TS5@0zIAo?f6meJ5}OG%VFQk+aET)O{|(~BQ|-pi?Q0a zf447B3+`3<_>r^Xr=8V8-s{uzmO#J}XjC9A*RaKHDnZM$dovM6)y zuVp8=W@aW$Tid^N>mi3p9j{YA-2ZZ`LgBI7{+=#t)^!nb`(^()HXM28HTl;UhK(YR zqg=`vg&$v%@9?nw_t)l&nPl3Z*Kgn4ProcYJLOK!m(wQwKl6S3n_vGU#ZB(+$?>=Z9VLp z>SnjhJg52Za`Ukt`|OT=G5VD|C*JD8gRATvFYK~+_t%&Ep5Jrh!(_*ar)57p|0w@^ zap399Nx83{Yfs9H|7*3^=hu{L)AuRl_cKr4UmDY+^zZJ=i;H#6)O?rhIs!`PM{U`kW>vtQXw>&){Hd|jh^3U(`@jdmm8-nbAY`{~B=xnkDU z6}dGvmoGfB&r~tUjZ6D}t?^j*JLO99=Z^o2-mhS)TFWr~tLOLP30eiR zWf!EoE^D4{_A}n{WB;RL&w``Q@Bg(Z>W}%+gj;r6Zkw1qtGLo@{Q9Mejw;z}75!Xb zP&`4qBkHPL*_My>hu1FNdwZMqnP1XMFMnLGJ^1U~i|O}Q__LW z$y>bov9a_2ru>eYm$TzJPmAx{BJKF+ca!hT;A6Eeuj9XMTk`tHb>k1~Pd>Ik*_*QC zqkZT?Vs;=<-c!cF7o}5)61mzx&sR*%dEbqtru=_b&c18FXq2iB|ec|UmyK; z%f6qdx9{|<`?Kl$)y(Vv{F>*z-hC|Puc!L4Uk^@%6`rJRg^}w--^YXG({+30n z?);bkH~G>ck6f$8?~@{I(;hP}xh(Pj;e$n1qFEgu=YJ38{Ae0?Cu70SBlTOojF0Wl zf4+(P_j%r{D}s;w*Izw*vXAKhx}DFY|5x42{ZyHH#H^<7{jWW-hfb_4+7ex}KJm!@ z?&mAH8d5iE_x@kC@ap4@?|*;iW`85({%Ohlk5987`TDK7b?l>>hW_1T`H#6VQ!by) zczj>9e|gsGM62R}J*$rIeRpVBth#jk&~c+@Ka-|OSwWj(E5KEC%?PWvrLJX}8UmBZx~l`W55r!G;sU)Ek4%;`NXr8Dof%Fa&D$RA>R zy*v)@`IYr=VeaPdn}e$VFVR?V{o;A=`S<2*zxm+)_y3vFiy1CEIlK}7`cKqNhv(Y$ zFJHc`oRq$QPgd-sU$65^K0gY}dH-d);Ko8mpG~pLBbMLVcJ|losULbP-#m`2xmES& z^^L90egBQ}PQ8`vt9L75Fq-@G*#0v{{|-O4`?vO=kAUd%NjbN_?!Td6zw`CBWB=s0 z-DG-fe=K|7nvdUqREGA=DRMo~d|hV7wvz&n?$5nsH8uXHJSfr)by{|ak z$SKgJHf_oIqwdLxD{j>D)YT|zZfUd;>IJ*D$}CxZ%KMB`f^iPf4|nhT4g=_lKRA!F+FJP}ZCqUAxi#nEmZ>}D*?qk1S^CE; zY_D2m$B#Yr=YR0#ex32(`fSdt|If4|*Y^L|zS1|m_VsF^$h~tsFFl^T^iiR-9RF&g zANTE=n-?q=uW+7_bWhFxgu&L-3$Gu=JzmGYEMH*(f6tL)xv%C=zUAoQBX?KFY5#}C z`D=Q5LfOL}E;v8q%K_ya{mU2pGUX?KDA4~W7iYfvhq$(LZ~gwBMbk=;Zf>jpU^v-; z>B3(_-#_gU=WkcE{pc?Y_`BNe(vfXOLVoG1esxN}4W8qa85+H+^4Im3Pv>O+`F&&R zn*T2(F8A+#y?p1zypOdxZ~yM@`mdcXaq(O8SM$_DvF*JrM|;kz-nQ&?-OpQ-GxhWh z{#yIKe}&5(cRO8jT*vUjzWdFK$Nx{wcC-I=-uiP;IahYf`zN0rk2n6}(K`BeVe*2t zfB*mf|K*24=Wia1D|i1S_dL4aTal~tq|e~r=kH%%hxUAsQa*ZjQoF$ajr%=y|2^I| z{YLtm7vKK>tDVlfGvf6xx1F}fwEyj7=eS@CT5Gt*%jEC!{i)lI8*%e>AN{`YOa$KG7unIA*_UuQE(O;lMZr)%$|5WvoOmF4OD#Ol{&n=r~nfJ?2ue38 z|G%wFJczS;WcuBrX0x$D=f#%v9~{k#7A)9Lr$zYXqTlUe^`|H6lAdhgm4 z7WdRoT+OyIxB{|3mG^{PQ02wVaZZY_ad(L`+~D{W^VoZ@^t=rI%gasQqeoVf}=pkb1*OM|0%rckzB| zp8f8zy=6t<|98PL`nfeC>>5U=e}o&_PygY6%TZ-_+tT^>j@SRZu}t0U)Ukv9k!L)A z`_29s@0YweyEC$LdGyg4rTeEYwzz!boz=g)FZRvcAsBpA^Kzwp&Wr2+M7*_y{=Mx! zyDj;TkLNXQ6OW(Yxy+lcw6!04?I!yFamb&~`wHK>zBHS#=l!eTaNnJ}lk8S6&&~h; z-hKc456h4D$NrgL`Z7H0?T-uZ<)kYAbZ7DZ|6{i{)_aHSZkzJ!3yl=Kx zb3A_k-*W!wzMY@>tWO*4{dmCq+H}`r%KsQkx|tL%n9dJ1sgafxlKWo1f6lRZ39C1( zllLb6X$xB3@-f<9c>d;J2Ygje=Dv^Z?XU}7DsxT#dSnPwY@E#PmZx7m=lxfI^Jn#C z!y31FDgoELf+h&hO__3jI%nL}%ookk_R95E6L%SGKKowa<@1&QwrVA6*89xJ_vpy+ z5tzLDgy+vg8|o&h+l6k*%$;N+TYKVm_vPQu_U7iyNzY;Syrm)&e`A&WujjuP30+&| z`?Yb#MOGH+XOI1t8$H@=d)5BX{>6gZ)3^Gl#UJ}}JgnAW-;EVV%wKO`mHX$u???IH z6RL7LKIYf-yxJjav+wi-eurg``C_Kq=Kg&1`2P0yGLP+R{C=L7()Ns=_NOt~a;Egj zr*~fX>i6jWs@>t!@=jH<{ zZJVyEeC9lzwmCv%YwqPo2Ua}#-!*&Pq{7F3_wPN)JGJCj!Oi_HA)(Q4S10doEq#;l zzy5(YzlI%i*sj0>Ms^?TkM@RNb^CAGpL@$<+QL9DgFVz7ROEq3(h_A>|`^q zb(Hc+^Eq}GH&2S$bIbmnu*mGcbKk6pPRjizEEcG~B=6^Hm*r8`tA+K;U%6ei+jaJo zOKcKTYEtzS-}Fmg*T$v$==(16%{l*TlhjqSNqO9>uLY`jMwAF1Th(H8f7;2HD$B%w zId1CR^v&b8;a;^%F)xmo-M2gW`R4DRZ>N4yG~8 zW0{ZRx6f7CI7e>I8LfY{IbrYD-rjZXIQxE^AGl^3Z}7Juk)Ng8t8KJ z&8o^9*UHyz``EZl%irHcwnt4r@MP56j}vxG7j7wAA@uN*uJ0y=U(ydB<=2KjR4P1o zUt?eRw+&ItmL;wA`u0iu*Yz)7x7_S#kh*NpZ`4`7JX^;n>d)7c+y3v}XMN#v`rAoc z;;TNsPT95Z%JazToE?umxc{!`oS8jC&u;m0-q)G0{_eQv_w#<8oZH#mRRta& z|Mj)%(S!9b#Q(n8`s)3b|6Aq%i|;ygQD^5itvs~3$z`^L`_RPfP(^c3FB|oKW{QRR)Ik$5?$4OU@E)|<~ zlOs#R9qysBwTdP_zj^%m9En%^l2+&V?_VzG zDscVmifvoAE-}qD=X|S~_)ciP@#Wmf7dw>sT_#yf{B--}p8r3Yd#d(d+5cPO%*HloiQ#r(``-Pi>@&-qtX;PL%k})(M*m#@%3ZI#_c4Eo*!f=%j^(d@ z;!ywK^!-0YGwk-Q`?dGzkMFVvX8dBzj0v0kM|R!eD}jH`f1OqKZ_3LO>&lyr3++0@ zXK%~g8gsI@c+(7?+{8zpUS((VS^s+;q$6tYq%g^5UR=#HI_ce9DB8}$xzb@umJ>4|=dV#IrMbBw=7N%M|CtT2bx?b(v_EUPF zTC{&YySOSr|aD_J~i`kzP}oNT5OtQ?&(jSllSDGsHl+-cq_E;=(qLqfA;;! zJpDX;j^Re%NoLcQG4~ir=lC4Tsi~cGrRXp{# zyT|8Nul_yRuVVG=!j|JXRR*_2{%^ct^XJETf9|iRAIKH6XRda$;3}vrWiUzp(|xPW z>YUH5`RVfiKQQnpXcs^tJmIPcv4myknNJ`%zW#!vB$-zj?O$=Gr7&VV||n{z#^3r}16BlhZBtoxRG% z3m%8pe|{(Ia99sh$@0zZeGBc~SDn}UzWgj#z|Sp*Z~Z@A@c93>_#BP8Wska6Jl)E8 zT>sx)*+cisPTWqJVpsP@bJhJG|3A|&^Vk2MpHnUU{pY*J?XsV~o%?oBdwZ1Sjs5c! zg5Ul>t_p21Y)pDGW5$NX##SdkTo$oDG=t}-X0EQK&_z$@_@_cYw013vTagc_UKZe6GJa%*W)^fJ%wE1GSt`f08F!nyT7 z=k*PrPb&ybvX1q*$T@}6vp+O9anjc__xH#63r`AKEflc$zO(M}+w7eSt#z~fW-p)L z8*+tRZri=`OU#pOW_F+Nj#~GG;k17Jv^&Rqjeb2jw`z%vZ_8t&_P2{~pEUcj^v~9l zzt710-{{X{`0wy@UoqjU@0Zs;*fKHJ{MCGi#5=npJOWwK~z3Zy0c^rB&y>Z{Rm>l-i^MYUJ zT>kO0>c9P)AN#Y!%nLN%mB`*J-}C5x?Ydpkt9qJFN0+VpG)L-gJ?;96*GHF}zB{GyMVbF~MZdUt^O7&8Tuh&Q^u3j5IQtW= zkEi)PCY4G3sd;mw|MZ%j-&f}Tzp?$(*DsxOul$j^D>HnQ(Ah|P4bN( zzL<|6wmmY*vds^C{qnk_ifp3L?L~9qL|bxh9ZRg6^!@KD*>;Kl>oiQ>E&pG2bX(!# z8=v+?ygh$f(E6XT*VgiDZOV85mkaz)uYav=ByBEweTU5bALWZb=>7X+-X6wMa&%cf z-@W{s&rVPJF<}GWV}bu+yL$e&KKY-wA{=3Wm-@V1=m!Jda%G!sO zoc;XM*~hAzX(YWKE= zuFp4Gx#aer+U7%Nawb)LU-$1PUce&Yf>z`vPi}jqOx61qv zzhARe=g3+6otj$;e?`u!b32lo<+S2uZj7D8K5c0NF7Lkn?#=rD{(kzdzyI~D-$_*JnK!F`rvJ&-JNyPid}yG~wT^ZK;W-WexaD@9*N zeBE6YtnOKqA-#QXlKa{y$1B_B?TY@nP5b%t>C3y%;u^6d;FV6^WSFXSsNz$*4$a8$tNLm;_aXI-6z8L{e60{@xvd#-*dWl z&wJ|LZ|fTNcAb8Oo!!Uv$;U*Q%>E?33bu?5e4V?#`gg!1`y3%-8VpXY+tW$#)GigLOCr?#J;wsXf%b#rmn>4km&bLZ_0 z%Cq~wU;OC3_2&xzrael!)%&FGaAUjI&eB)E>+g#n>ewK7WdFR~k`Mpg?>JNS|2nIJgx`@i~-kMEN*3}dWCBi2YTa+G-RSAMsD`uOSp$J_HJspMDf z`Vkd9ds*FalhU_BllQInn{<1c+B~!KHtq1U+kxA&Z}r#88^3Zmb!*x8YbVq8#`iewb zlQh?*2giS0JLCK8lQ;kG4&H8l=Hsv4@Vh0cg_aFR1^yrZ|MEBc{Fn97HOumEA4=b) z{pW7U!TW7YS3`dPFPeMSItcXq?K|BE~7zb{p8cxS*Q@FHU8 z;nih_774Qo@B6{^e^ut;?H!3Ooq_kmygx0Cys`4tb@k6%AO6kJJsS7mm*>}cy#2pR zPtE6MU6OUv$3L|}snNC#_yP&7GK2x6Nl(Z^~!Qf2NU1Pt*)v?)q`_ z#hR-}-iGbl7JqK_ousQ@cyD|EeVr~h-O_i*q|$)TKR!DKKFgJ_-t2R9RqFZQZZr0u zyrp$JZfok)Kl$@tgxPxgr!P@7lw)3X-(zaUtA9^!pZV%N`|IKzzNhUHHr;%7`Lxa> z`#p6WAN6m3%el4hWQox9>Z6;(PCUQ&U;OC(bq`8EFOVp?zyDrzjP;v^_iZ(Nr{(V3 zV=*^n;A%{yLra->kEl4eLBA?#!35-|}O=*1j*lw#oh% zkFQ?1vnAQ+{N?tJmszk{7m{Ux9Pghb575uE8n)A ztXblt67_Vl=>OfG^Cvy|`0Bt8Da&U ze^hg68AtB&_|T6RGne_Z z-xj!Dy+2|8BX|97>7So|?9Ugej|wOZSTU{M@Myh7g4B+*fIqW+6%UAV-v7KzxJ~T8 zXU*%}C35-3|MK@Q-zy!p`?ah=Q<1i$XSvF0zE{qg@lcR&67d|p&fUe{aM<(=Zf`qQuazvOh}{^S^+vM=U0e=T}e_4o3dO)=N|Wr|O2F=ycvpLg!IawOl@8l~R*T+`pC zPx{&V#7L*!=7z_0!`Sv|)emHz=1TnRZf!69^#7$9_xjcIUoEZu{ii?NN%i?TTAkq z^liOP(c2~dZ{90;C}+pSpzC*Pmfl#>y!>tAS{3%4b(McICl*TjM&!wgKfGdQ+Mjsz ze=hfq;7=9>@mjVPH@=@${imM!zy7OE_dnk|FLth8J$t{-w;%C#8WTk4KaXCk(uL<8~1(dwr+i{`|cUD@9kw(`&Cwkyw6;1#(Vvh z=Q7iiR_*_ieQY_`Z7bdM?%FjzwNsT5lB)anUVeRU%IoXvbvJXev-ZALMEF>dF;O>_a4hOZ3Ew^Kijwd*O%Y!`ClUK&;8%)zl+sYAJ(tC6!~ZK|M-eO@4vL~ z=4!|TEmfMLHanC_`QLpL$+yubg*ZIx#sBX)JL$TKAm<SCFfpAH{%eATu)pL>1p=W{~Y+BbKtXo>JozMOw6cWX@8S@XlneBW6%;njng z4L`oK8@zKYKYqJ-pY8U`4BdgbMt6R!7ncc@*(UPe{Qr|SOHrrv!=fVc|Lz`sTK(r$CI95Yq&J3oK^eCfVO)XAbf^SoHTZYhk6 z-Tm|Dj+cKK_gmkve||gts@U^6`Eyk>nKVwC`AnLlv-4E=nY8-X^?$$APQB6TwM!-Q zyoG*wU|zZ6`#FBM9w%4HuG(()a@~TB`cc8r_o8N}ycdkiR=KODoN`3vw7S;Mp4$hn z31!XBUHqeB<&N12MGB(#^Pl|?w|u)NSo+y*-#^#4`)|w3+gCNk>5_d)x0Z1@#BWvBhGybl-6 z+~Mn7Z>nXNJE#5ZHFFX9UA^_@n=*uU?5jChDz3Bh$Npc>%KS>pf4Wo&Hy@S$pZo6r zwL5zvJ=uZ&&>}U;E$w&Y%7JYL6BFfA42K|J^4uhG+du3Kv$s z+R~(Dc;R~4MfU%0Z%G$)JQD)}ujdE3kt*HcbM>@)knZKKZQ*y78gy+`ej$6jA;v10qnJ+Iyi z-acSnyf5c+Zv1SW^nX&((RqPye@!~LeX0JjnRB$$zx`#q?iS7At86cNXqn ze>-W`_skh-Q(oP6n544h<1eRGd;i*$80m&4Djq4cSesS$@x9gQ+W)^!FZzG8@3H;7 zN5)^bUAk?#Zg>3iiV2Hit(?Kdg^@v=j)HGAf?NA+jfewOI@yXuPDpYz-A_b6}Ila~MP zy5?m6|J(H&9qX#ftrwfeHolx*zTe)a$PYwim?y5IZaU)Hq8qQCD5zW?7o z^S}PKzyJNLK?OW3X#K(;zg<7>uF6+CEb>wM;Q#%5s~fki(c-VM4^NE$$oPn(HS}>) zPntpn8SipdR;8(^c=y5ZUvZD4qmxBij+k&U-4l}*5MhxQ zk<6WXEL%~q>)o^_7s-ZClNPaytWW5_SpD_awW#8A`RDff%`N^G_x|&L!>-Ne?S5~J zD_)ylmu(mHz51&E|3=s8)0R9slq0Wp@aTOu*>_5-l{ZNJn7t*@AnSMqC$mWP#_i=U zrxSwK2mhQC$QV>`J)m}b{oMVhv$lKwJKP%^ToYc{9_AYVbZ&~|`}dc{+jTc2)tCL7 z&-Qx7bX6Xg($u3YzfDaOKdg$6|9V4jzO?qy5Z3+sZeLbE_p9Wd)P+rJV;{ZeW{N3~ zx%GD8{mHA|e>%QM_Hk;E%M`7QzDbKbOJZjIntcBB(&n=LvL%nqc1@PsV_tfEj-6j_ zCzsFta{9L4&+oU-g*&{~`0u+d<8-voGvVb+);*nk@h(H}N{!;n zw{srF&6l_zb#k5etG>z0PXDisob>Sh=9GUCH^LgUm;QFx|Fy5(_s4X@%TNCsKi^N6>xe2jz0+OjPU+PDk?a2F9{caS```YWyH(5!>QopS zkKJ5w#7?j7m4m|7#)iEd%K|S<`1Rl*tM;qnJIT@$R-ET$KKN_0L0xQ^>;2$ATar6i z4koT*K4`Gx>i*veih+(DTxKO3M016=%ldB74chN3U-6@^_?r6tnc*eh+?d>73ax0q zWD@%O+zf*We!+{6pP%W%xH|Cnb(g!BnjCytJ34=_Gx?FZee; z?fmiEN8PsPZL{C&^XkXM{pwmDbXJGG+kDj}U-WoNc~_NBNzKY+rFp)W*tfp2m{Kn+ ze}-*-@_r4@?Qb7F-LG)`(Y!YiIotlItMN{=EuAW5+czmbOnA-m-#wmLhxFVIYyWqX zJ^ZcO{_oO$-%ye1&gWFkr{8Vp&0POSeEkK{8!uH3=sf*Do7X=>(R0$vryrU>{r)94slC@_pL-tt7@GWZzs`QQp3|w<>nmNS{QoUqry%ivyIxUoU|NV=*3awn z!;gQB&#$lT&EE9q|8MPc`gtZHJKp^At}giN?^FG;KB=wfZ~f0*$~+CfCNi){J!w`= z_F2Rn@mES-VWtXC$(`6>*$vamPff~@new18tLgov{m1XyZ&$c5dq;!j6qd%`88;Z* z`Ptsg+uT3-fpOFNE#;PPW&J0+bU$W(Zo=jE_OAO&p-=Ah-`Ks^y@{W|I?*WOi_6<~ z2dQ<%8+nfIPuTFnMYmky?61cMRUDHJ?NjMxI@x*a_@}1rf7ZYs2#& zrboAZxf}Gy&TH}4&yRUq8>|1-m+yIW=js0@?Q_Py6W*48TYm55?jZgZf6NR2e(zjokhygF`g5QD ze=onEs27n?A+GrRmHNE8P18Qbm%jOC{_p+&um7L6=NT}(a%U3An6cN+ZxQ#3{RhAxEE3mxydyfwb6|}v-|bnlt+B2y<7xc+(<+*F@w?*xA60T@)S0Ss_M6SlOCpr=haG&y>=FUi@x$rV&R=uFKPa%aaOw5J8nz$ z-kpEEufJ7``X6~o_m95bzaI}y)f->0pP%EkxO8sRKFibleSQ>PQ@@}1O|AcR%BI;} zsgZs^=YRjT-hThdANHnKuh(0%70zGxUq8OQ!e9+=L)8QZ7O5%mSMJDO`1Eec$8wg( z3r@w}@x3@zSyz5}Fr(|Dx?j&PXXuF4ZZ!MWWN*0DtB3zvi8+U~z>COm;mIwH&Kur& ze!1*&Th}mgy7*p}y6PSGgBQ>HyngHX+7J5otuIIT#_x?wW7~UQ*MH-jqsw<@k4W-#y{G!y*?q+*5=a= zzw*mwr}h7r?M&PG@A&(CqkrYc_x;kbG*f+MV7uqvZaH0sEN3Qxj48Z}y0lm9I~={m z%j2+uw=3g5>Gs0)=4J~#uBJ3h?|*O&7l!$*c?<^9VV8QzB#u9cg5d|GFBJMGOX)$;EB3bC!1OgQ?Q7wCMo zf2&ha=lpZYg6cI)Yp(oVTXCuPXmY=7Y59Hjs8=_%`X~1PoqfLL_O-e;DSyxWWa%|K zPfh-PFG=#t42LqC%^`R1`7ZuCBdo6c_*#b21zDF=BJ>wu3w_VMf90EfaZkT5^lUo5 z^47hl?s^;l`2Rk0RQ^2E=hb&#zt;Z$FJkVF$2WEyKBu3)b4^+Gj^2zvRxg&b1^vra zT9~mgdW+D{$M)8x7YiMxzpl35w{i2Q`L7;d&Rd^4t={w3maB_=qkQZ>ei2TL^tiI| z^|YN8FyPX!gQOR@1yS&TGJ69E$1^;_J%XZuPeFabB#rWMK{?&hqpZ)e(p64W0 z|1CTV{+O5l^^a-N(YRe$W8nU?{?SVHO;7Hx^tP)%x%0ns{nveb>;FI8cp>MHeB6Ke z6GHRjHH0to|9Q3VUhMz>m1WM-4tqTqn0SkPA5MPZw{%y-@=TEn)5Jd}m>K>3WmL13 zvFrcrzv~|T{!$$~A!AW?4)3K0i{$N|*Q;H8f3a%mzTIo8YggG>e_Zb!Yp`@%epXLj zt9Xt7s&{wN=IfudmVR@_>)o_d4VNbWunuil)x2S)^_PSDw$y7!t@^P}?P#%81iyX0 z)rHUV^UvJ6%07GhpL_CC*P91BmPoN?D@ll-Sm*pGURY-JJJUM*Qx-;M6Zn|}xBlyV z84_pL)NoDzf=j4E3Ddz9UwQggzKFOS%iDZif90R>-xuQdosaoGf1O$B^!nYrUyOe0 zMLqoW>l#VN(x!}+8R|{rs{S$w^sN2kP z{jaC~O+|_8I}dIY?lGSB>u>g<9#_PluPB^y*en*L~NbwmOWJF*itW zZ*6?gKl}e%Wz1D|!!P~IHQLxXIqu|<+~)Oh|gNjzAG-jl?(ruzg{rS{*KzyblxR@ zUZ0)jVm{lC8M_33AGZ`QqD^hf-6&9_hY%euGa+V8tK=hyD#Ka*YJ z*L-;|sy-n^_WrJ(Utwk|wbflE*KGe2zkTi8b(dm)zd0&zJiGpPyx)6y;djQrZ%ixQ zdp>2`ulv94|Ajt(YX86I%|Y??8T)?cpV`KA=KRYt%j&Ry(tH2iUKI20w8~e`b(N>~ zZ+T|(xOwya3lslt`nkQ|G@IY5BJyedz1Q`(KkncAum0nw&!0Z8`+DHr??vZL=f?k! zuhZakSdgc}(5R+*EZ*pJg2nz7Ps5*o+Sti-&B$rP^h2JjnxaH4cXIFC_3n1U`ktI- z>&9ayQz|^4ME~t6Of^Z5F$maq?8PaE%t`EB$5?x{vJAB1IGQIG`CjV$edCjLPc)l+ z$Ip)c=XRIRJfBu>^*Slq`APEIrxO=;ofDSVVS6of#k+<k_m>~=c19-rUm0LB zw{9+<$6L13_Vr0kZ{ON!@ix0}kNZ^|9J;gk;NMk`GWz=No0z(-jmj4}KHEB@hV`&) z$jOqOoPGZFAz>|RSILO4zZd;8{#4n?=$;h)n&Y$27j@71KWE{e_V>N#?A>IQe-)pW z3R@K?zOHot>G}Y*P4V0A)-3+%F)d>4?%VlqroFM5xKHy=`cb2=yZ_W@-@dwbd&cDA zRXwM*nD-y=>{N;K`0f6+I!dnEabChIo+7V&#e&n%pSM7eSx1at0 z&89!MRjz%#zkAo_X|s#`rsrzje*E+N?e!H!tug=K7Tv5hExhi&`_*av|3(up?Ee3! zXXm%&G5mh#g*v9s|2?<+!inVaewXm@cpGHuiTivfYE zn6@tFHn_0hO6-Qof0WDv9eouw<0ng8*FDM_nksbiMIPU>nw%bKnH@Fj|6GZ+$Px0Y zpZ#}ERrn^3pgR#sPrvVem?%`8zB}T-(v4uop6;hzr5|n|kyyOzz!I~6h3k#$ZcFa2 zeG~iS!&iQrn)YY$xx#)hsbw!WlR(}otedEU8*KzOT#e0}1 z|2m-kM{n!=)R{ubP3yFO?a=yvvv5jGxXNCg%pW&u>xATPSN)OMol~}ZN!I@IrJp3c z{%m~tJ#y!pi&g&1wz>bj#P9iJQ@pDrcT!>1Gp+xfzjn{Gn)apg z*p8yr+h@vJZ>Xrfe|o?DvF_(fzrL&f_eZu@{eO$f)+MTUFP!?nZFah}a%tS{`ak9e ztyo@9@{8BM8MI|9;D#<*%yu zPna9LTcz`{`TpNqpZ%+OvsJX{uYYaQsvmuyc1cWq`*cdZ1^}xBd3N{w;a-WPY4TX=8b#lgxpY3Ws9f^zwS03E8leSyk4d?clf*N@^$OCDK%mtDEa zWX-4fi<#EEe5_$VX_>avDkoFXIa80PT-~_#x_Qj|iuh7x{s7;|$c?Ehl6JrNI?pHQ z@%5vw+yCvgx;Y_#`xW+g-a7xi3%$h_%>TGB`17>X&C}{@|J-c6qMkL)S^mZB1%G~V zx$M;I{2v{EdjD;?oAvx&=C5*Y*KU03RljllF0KDBH=W+EqP(sA%A&XSb+0ECRW8b% z5+-x|=l{iz_3hfen0fs*j7xL5+Kj_s4&o-1jbhD1MW^ zx^PvEK11xnhEuetZ`*ZX4<_h+d^9Y3P-@Z%*x z*@#zP`TmRLZC{}3CbGb9>ia+aCpVq`ALKbf@A%d&Dbaa9xBtEx#!+%Q)SCOr5s~A8 z7uT-dW%KK4cvaZHui4x0|1p1drF_3x{>1Cs6jn~P&shJ5U6<$VrBnZPWpk9hwLaQw z3NQP(MCS5wS0UNwm!B)ghi|`rs_OLqo|#ueHwfRmU4K6M zf9JN-`#a+&|J}Xssb}6dx4!C^fgdiO-><(vQ*)Qr|8McZ*Xy_M`L%H`qiLY|QZdc{ z+y8ty{_M*4J=bF5=Ec8Oc>ZMaTKK*jE0x+*%vrlK9?bcEW9y$_1Cd$kuT#`NUx2 zd$(#wm}=%DrtO|tiyV&2a|>^m`&Ybtmy60jy{cIf_gS55!vbdd_HauypEq=?&Hw2V zG;zzB`EgV2XRLTS{rUgnDT|uQZ|_}P@mVGA_^0Pb*tUIrzF_)M)vT*#^H&^*o^B}4 zu>7H!c9YgfLC=Ff9Fd77sZ%%ARm`MQ3V+v#a4S$})v)e;*&?N_&+ zKd<=X@u<%CdVg+JRwivb`MN&((k&+|vuv4V-iK!vKeWZqmbPmw-XFrw z?700%k!??0-2O+x(q~^7X7$9y@BY_m`Fv9Uvqm3j6-JG<483uEHb1z5M^)zArSGy32Vfhe&QhXdbud8p*}Xmp)a899VjMq2bewQ{T_e*uQJt zlgz^MTYAwSZa#H*xNXv-=4*Mz4P}-&+UCFK+-Cb#xT?>|v~0HL*9yD3+Munvcbk_^ z`ER+ca|>I|`{m~i)tXvB%gtzKu8{YvwH>{cc3#jpS0YUVSP|9Aa)O6P(9`^!5WB-ej1uCGem*ONQ7 zK3Y%hY5J01cczrhe{xUSa=G`Vm%8t3bHDwVzINLGvUUGE3!m?~qPN{%-tSaVZ0NuB zJN^k32bEoZ{VCu4@~ib-bNah#1J$Ho@B6o1;J>$0a8k?CJ1n0cYkYhD%U?VJoadG; zeRXKstOtkQ?<$e_TK)4^$p1My1?(4CBlfAb@G1OxT^n?2$+ECY26Io}8?r934;CjV z^2+^wTJE@T&1SwYy;1tHCxfS^&3!VVUOevO&SSe;LnbbGb;sNO71OPx`l+WaJZmT9 zhB!#Gcs$*<;dfx@zrSWim+dDPN&9ylu)pZIi?h5m>&%t=H3e_o8MLNF%0@dLQo3_| zY-0)}ikD7do{EyZKoCW$e%CdH;j{EuEyHtFk-mtN8CS z%YEUypW3f6)m!>!d*!{DjyId5>vkR9@%G^~|9E}j?PvZ)m>rYlUM2JUV4sl4mb2q#^-RFNX+^}5n}i=F-9 zu3rbP{_{A!`)1~bnw$SW<%Mf4;ACp~^!v>dF|FdH{f`%E+o$XOiu!H*+q3o2wfXm+ zXld>G>bK~)TcD%w#wzFMRc`_S~=)^G8OJg@Hl>+f&=bWnvusrzr(ovYvU zy}uSN|F-e(K7|I~zp^#q#)kWD`(L=_CO<{Cv#Yy0FRA(5m6qda|Ng7wH!jjP{Fndg zN2z1&rZ=DB*)93}tv;8Za(SSC_4~?C^V?pB{_$u^z8vQE>AtY+g4O!oJr~!m-KFzC zNOQ`j`l4;`g8u!U^kZ{M<)_ci=}+&!-@SM0|M&l6%^%-9y6%L~M8`$yU)N6Uk?OcN zck`*o2lJ1)tgR7}UH)~-|M&kZR=@Pw^!@dI6(;)`s!aPM)tGj#usK~GH$nA3pY@jy z*Vg@4>+SpPqH1tzzIg51;xv!0;$3@p7RN7sdcW3h^7Z zyK}zO%T89`xNF`9*KL1)+tu#+8B@0T`^Qhej7tBUEBw3O`rrM!&)5D`?YJ{rq>^bv z`}O~e`){N$TzMSH=Fr^5y^U{f$%SW3*FKd?)|@^Xn5r$1oZQv1Z^5hcT=5T@6aF9X z;-5V^dbyE==cFU7#ou0E+F)k-_g>M>Cdq3(_5EC5Pp|J{5?Z1Mh5)AZ7af2lh9D__*4 z|Gv7{``1yu|KEwg3PSwvi$b-Mn~&TT$BTY?wauYU2!uH{;N=o`z}b5Hm0e#-lE=iYOl z?qBNE5nzwDuJiqS$eoym+1!gJ?jcq%*DFJ5RD_=j-n(p@vCWucq8Ou=bDZ{h9tDN;-uH9Y6kBbzNlt?*t>y%L@*L z+i7g~|6ysrzkK@7AMyK-mv}Pi{oKBBPw>ns+R59iXZ`rP;kMG63sR*$BK@b?kFi~{ zQuE1enI;uIw^a1;qxb)cCu?+FxxGJzL3;P^mLn>>QTo5GFL_tENa;$+BJCT;bldOx z|GV)nDk#rvHjj76QdLf2)~wji^CxHQ|G8_D;lX`hZ>L=RlrMByx|x|2TBH_Gh&D8!=kI&e}ubCYi zKi@|qK2ELW$&51f9hRr}pILS@byGALUnsr>j!|FtJI9-nzVh4bKImB_chSk)6% z&)-m)Z0N@R`I!3rE_plW$6A)#;uZ^QKHdFy`HfRc)`z}OX{*~mC%LZRbMLd?_2z4q z%vXD^zVgAoXYn$-*L=Sk{O@nu+Fg1b@^|hePQS)A=|Sz*yJ6MVl{b=CFmg}*uWg<8 zH+}Mgx`(GWP5)(NqbaQGx>F}U&Bso%{ZDmh*uSUmi(>x0d3SrW%LBd74rTKyG=5K4 zXDs_~w0~PzY`E&p?|*boexKbgH*x!!iGR0zb8VmEIsez`{k6OE6GQgpy?U<|m?3;H zl}D9x(!zPxt4>(nz5C$gx8s5B=_e292&(>m@^jVGrGBe8=I$s==bXLblYZIpUcV=z zCrg55(%n>lLD!b!$MjGWm@}F!N@wDR7 z^Q)~&Ub!D7@~6#MsqkEy;j72Do9Xj!dMPn5NSI_ws+3=g|E%9p3Ud@cXK>kq%{QG-2?^+gYbuA21t{%412H8*B%FS&Vf^}3Y~@_WiY zzdpikT7-kd-C zBR!Q~tvGD{RF~y*an(Jg;Jd30>-PT$tG3&@Yy0hn&XpcL>ROf(fA7|9ymRDcJ!EmTNxuhThL|a#X5D%{Fk#X zn&~ z*Uj7>G)3>3bM8ZP{mfi_^J{(QCT-mGHnm8uQg7NcU)ANuqo;`Ns_x3IdcST@>b-NZ z);kp067*CU7#R*sT60$0p#4dIY7^s1hgjHfUz#ifqM(qkGM~ z8R`_g8T`JV_HGI*dY8HQQdZ%W{OI2=m({4vJjeAk-@kd&+Gx&Q?*nfhSTHs2&m3=& zSp`daUaFpXXoooA2J*CX?#9xzE2WQO{+*9>@@@#K^(G zz`)bu{Ymn%Q1ULtIo|V@isqLj?~|OqV7AW{owuL1d0zZ`{a;+l>l&lHNyqMr{(U0% zDRT9vll+SeSuX$B`m1o&HTS=|rUzAo9~MoQmp&gR{cq+Ic?O14TFeX#3<&~nBx<*b zCfsDWV4EKO@MTNFKVy$gs_&N1Z@jK{Nyv0wd{WQMc>*eHGwz1lOnox>l+@R|E35kd z<;{L@`Q)LJRV$N(YW8Jcd{HH)ez4d~P_w`M-7d}fnPLnKA{kJpXQ_y*Fn)EB{dV1i zGy2+1m-*gjmj0W2kY~fH*B`#{EZg^WVb*T*y*1y?t~AUvnb`4P<9<+KP~A0^-sRIf z?Cf=SN$(bav61caChLN4fA;@=T`tMM@L(b+8W`FRsa-ks@kfwpv)d#I)79&G9;P2+ ziTqjje}jy_exPtgisTNHS-+Jl*2}Lr&u_ls_&?*P={v)ktV(Ch2wDE^Qo*wLy?U-% z`Ze_y+?_SgkJPS`)h zbcvq#J*C$3X;yUk+Y`bK3=9e`OacrH3=$J6!eV|`U-)~iOZwtUdzQ^CyZ`OGct5w> zUby_eX)4otpIcM!3#*A+Lya`^~uag-yc6x8|D1ziLnFEaR+cx>UFCchq+mi-#wFpRe3q*|Bav z149TjK~9)`Gu(Fae|ytar`P2BKHq(-%P4ZX&KJwh`4TEK{T{v4+oyN@xtgfw;+6#; zH+N2XuNgOcnlbz8cPBdIwujj2+1Ya*Gx>7*>(BKyNB;bocbk`iVTBvSFPy%tFwFmd-th;vozlRc+A(i`jQL`8w`XR7#J811gJb@zFivr|K0AlYO8jy z%fA}_=VZU^3>Nu0KD<}O>*8M>|I2M9zFM;CZuqMscb8Pm|NAH8(!_tlYME2&wsam0 zsV$o)5F>gftLEj^=QH%<&n}T?V9-gM$_Pp(5_yk!7OOop*wwt&f6L2_pTGPL%H)~x zYTbU%50dZpW_^qMZv2WjW{+9v`;RYoKC+!$G)>_5t_Rkq-y5ja%+EhIL&WpYmHKIa z`}FJo#!RYbV9*idbO2>fg)Y4VkxDs>j@|D5pI5_ebvx+%xp|83xrHj8ezuz^ZYN&j zZ#DOUvEw2`&S{6wzMI{4T70{i&OYUu+=<3Mr@neGpVa?9e%>GJ;|vT9OK+xMT@@;C z$iTqBQ1yOYb$6#;pUt20Q|Xh6Y;3LB=KHS`wZHP-asRzfwOKxPkE0&ny#DIE@w=}N zKfnC)eaE$?SD(Lpe|6HKXXdM>HTS1KnLKq$|EA^hs(x{P-r4Qq!wMV$2L#u?|oJN{I33c)#nTEe)BLeMA$`v>R|@vZE0T>pUvT~ zxx44Z0p}jMh3D073f(md@SarAU>E##(h+t3=9w+Q-(@|gNch}+v;QggozF*qm#lVP zTqXbe-jTY>`8B@^Kg;hc?E87FT;GU+A)yRZ&oMLzT70{jZ}R{7{;Ktrfzt#`GOwK6 z_99-|^w{cGE21Y(oSn5V+%CLs*?)`cJQr%iW=UNYwOsozu5!mJACp!2zs{GxF{uA| zbo1wHeGCiB%oYY7Rz={aCRwk!AU&hD(p$yFb%b`NzPJ!2;6HkZ|PR&9?Aa^*>*k z&$@5od^G%y&soZ_pf{YtmX5n?l3Skq(SP6um#ii zJ=y-r<$?X(4Vv>kf7G9@D}T)B_w_38@t4~Fmi%IJf6V$S{FKkW^1Hu-KQEqtC*j>G zp}POA)9M%)w)BDP0*23fp1+%~&ieFu;?48Td^R`sWPI)ZynpYD1J0kO%=^>xoNd~D z`MM=DR)!1J`ak8|fBWqEP0ycvkGDOfvyXwHq!(fc1A{@*Y93G?WMF8x2q{h(7#Mma zz`+R0^G6_o!N9t*P5s`S2h6EK~NqD)s07U6!lBuVvbaUz_T?j7k=~ zRMwOa@|(8$Y-!cA>;GrS?%$mrb#7nB>EQVDvfNXDE5;pPrBia}-0r%MmfQQMMO}NG zoN%q!MR?V>`1yTj*KNOhBk9_z9jiHudMlq@_uneF{hHuv)3vYeTw7kuWKg2Q&?sl| z)oaQ!SUk?(Ho zPd1&^iS&=WKX?28+-%0BI>$5fYxe*CyY0>H^*5^~u5A7nll{9d`^>gC@%Pu96xzOg z??L_bIm|c3P8YuNO#f<@xmBd-PwhMJ_hz*PPXyN+MVrk{`sK0hqE2It`0FX^UpCL? zDZf+Nz4P<)?O(pdNKHO4SJa39yHZ%?n!oj-lM-HKcFwOZc4cHO*Ynz6<(J3Q5EQuOyb zt%uO8MSs7pC$|_B5~J0)7t$CfSKC*Ox8sGhTn< zpRW4Ptsz1&HyK`^Tk~nx<7sR6?r6C6b=s+#yC>y-+Wd_9sm{2Bg}0U~=hcRtYgE1( za&q+eUfi|RV*0!dKXunly7m2YmrnMZDUZ*;@NKHn^s6`DqCmmT4^{X z;HE;GbW2^th;?={rn=`^d;Rn zA3r->kEzSO`Bh1+JoD-Nkhtw{f4HSPPQ7Dl_w>hQ@ihV`cioM>_jl`Sox2~BHof~K zx#`@e;A_>tOxd56TP_VU+~%@Cg)w#an>~Nq(|qLaZoX}z_^vBt%F$86eEI?dv|+nMT8=@L`F^! z(+r)exbuK_LHX@X@5Kid z|38J!H}aj}5LI3|@o|DG>(!*5*LO;e8mwO;_vO)_J)0hG*syxGP2Kg|=g)4>zAuzj zXr8&U<^AtB&v))WS!gij^MWl=dmd=ZOFXHpKCSIPbJxd!^3yBZ%kE3dOn1H;<`nho z#gVN?ykpfEKFhJThpRKB+I!htPCcz+owup9T+IBM?B!C~&9~kyh&{5#DQe+0(C>4zg|n<-1N?9 zW7m;&$-YddzGiOj%6(d6`Rps}u5G6nGN!~_IA3#HeHoJ`XGKbla^}~Na0SuH-7mJ@ zyz9Ml!ZFd1$aTT~Hmg56eqGwM=6bB&3!x*XTkmZ;Cp6`>)%%_(n^0ao83MI;Il3d~;n(e_pH5Z`U6XWY zM^zgO$aB-*{5o!4wsh)}J09}Nmixn1|L@qyYtqi5aA85Kkl!SR$=o%;jv;5%jxPBm z6(92S(CrWh)pEVk?eUz8o*ugAHr-O%BX;xGLkm95W}m1&H@EFoTkdq$sdm*pylb0y zc&5(re!6Fo?Ear?=c+$i9rgd_#vPB2cuh{eeAatfW&19-Cu=8ashPf9z31q;toa?Q zjV*<%Up%aCzQ5G^;e?}WcW=x2ReQO0htA2Or?$NBUOoSG)%2&keDXDmlXp|j+!C+c zWa`!ADgM%K{`Pdm*fag%&&xEEr`LbBnN;s^7_=00CD)QCi_{!L!js)je%HU!wDetr z*EQ>ZXHKuTUjOx-XVAx8U$W7IFa7Mm>@nNrDx;96!-CkNxX#HTv0+}T&u#x@ z6MvO!!+G8IrJvSMH-FD`BQbmR(-phknJ)GCuu3}SH}7uK9Y@%$W~$zOw|mDrU6Y+| zhAIx$;(ykxS9Pgx&OcU z_lnrF$vkC_YRngJ<$c|9RGt?P|U!%BfT4Qob?1@Jj)+roG1|FNc)d zHE+s~Hty@#eXUEmzhY|UY*~wYlZu_M{tS!KeU%+xxTB_ich9{kxwm(04Hds#zVgvu zg{Ci zb;S+Of2-Jp%GN|Nyj5W2xZ=}fZ2LPtG<)s72@P6)U304*-Q3Eu`4``=J4fFf{&n2= zTdvKX{Zmga)oA+S&w74s%Q{1c_&Z|0CR@r%e^0$=k+{(~>+kZT$>Q@q%&OZib+0V= z4%deLu@4^oRhW9qY+ZG*aN`=eGN&c4PdbRrj#-@b^Old#YssY767iE}Y`xz#vuXGH zvbgqD)0P#@lewky{=kKa3@lk8rhJ#nx5r<5&6vC0eX2-gd*yD4BeB`?cQ@bu;wa-$ zYTF$z+x6~j;?jNonG(4ip$QsA9p&mSqpEtdNoDi;}a=sv5cuA+rw@x*!9HB^HlcS$@MxWWf}LAuT>~* z*;vlnmo6ax>Vs+FC;wBHC+!#1sxUN49er$YcVg_FS+oAG*PA5LE$mTRp82!%n`~|2 z@z{qF%Itd*wn|!A9(%OTP+h+K*n`Ql4+z+NeqCSEe>-oc;oVnnq`UW}?+T6GfBaha z@u)YCS=2tB`Q&|*zqIqXM2z(Zv4%yfPdYq$cdSt9(yFYfSC4%yOTKcc;GW*IP{Zu| zyOYEo&x{kZxn5@eX4_HDn~LjRYaX93xW#Xs)NIHQvgyg_B$tCXd9yBjwd;;*Q?^i|r*L~V{`9c)qsj8!~dcRE`UYsa<|HtGO z4+F(398nBiKhk0^8+NLwmoz=vwzp)dc%f45-_x^lStX`_uT=lP;?*vjB{M>|^T-vS zv0}S)>Whb|-j4YXci8tbH%x6|Q3#m4Dl-4~on9p|_RXJp_Q;lZTW@hU7CsewJbUx* zzHj$uq{&WJd2lXv-=j#=dt41wZ-2jezT3erx$;#@B7J5C7dXdBpNyLbUm*pN8|6tXiM!!=%m1>99cU=7!AjcG^L7TvOXKYznh-GlEp_gISe@4xa~vdlH~`cu8# ze@|AL=H1-1b}{4I$1M)?qwb!6d~Ww4!ymI=rAg+{d?j1|wv zeUmoXwXEB0H2d4f*@s_Wd3t@W`zQVvj6w|#ypIgapYfjCCB$E0d;UyWp*P3QYW-%0 z#g(Duk*U8Yx3InvE&m^rajC)TX!5y}5eb{Ouub}WSRn1j)n8M#teMrYboHsX&iu!X z8Tsp#1O(MRXy)&mzX%6 z)6*I5Dl>9iQQ-UWZeRY4gHu@c6`tN0+5C2uUbGR%hu!z;^zJrBCmfHwxK=pj_k4l7 z6Il&rSD4+}wyXY_=kd42XDp&k59iH~W)u@{`Vr~1Tk22zu7vYOjNZYI#2VP&n9nPW zFV$YZs#E)!X+GFJcVjQVp7+Q3h~bT9=9fWItBup%E?za;X#3YatIIRVn|yZ};C#E6-1U@Zik$+N4#g+^<4a80|%E)DNc2 zabVbBb7_&;yL(sMzMogtJ~n6e^4D=!d3M+4vr4GzKCQX-tyJY*lWy$oUCV?Ov)zq^ zH_VvDv*cM=+~;lUR==7RmoBvG-AVf+S7sCia$izhX`J?U@+!|ePj0*^7LSs?fBf{G zy^9wLGK7EvE8%|aeDObaQy8mO+eoSEUq2H$afjyWn6Td86U#a6-hJ8QxBf+} zr{_$PuU>WUJGw)4Sx@xVj~&T84NoVxG=>yyG1E#bitCyDy;MbZY3i{FQH)-%KUM7Y zw_LaPq3Wth8>%j?UUz5hq=4isPSNtsQ(2;8_j0_-iWNVB|`H)l@h z4Ala;M+fdl?0atW+j4J)q~R0B1F64H?#Q=FRJfJ(@IuJ+WXtPb+78uq8#>)2H?Lg( z1na0(@I~atrku+y6G(YyDIq3-lAjIN-uE* zOnOn~R`BzV(nh;@os4AV|F&Ow^o^IzFtt0^Hs{B*)al93MKAhFSTFIOf717l>FVXj z<)$uqz#9Lvf$@SosFt{~z@MkKZS}Gy&7XI&x5rHhpP~xtlFWIdtEhNid#Y7p{V|n{ zspo6ey!pH)1qek2J(N79lbO4TlPk7z>VY?xR@>d|zNVdV?c?nGv;M!n^?cu#caC$F zpUQ0gw_)+ww!?j=(oK7|PW^K_TI;HfV1wGpE?;-q*XvS)7^iOh_G{1jC0DOzuBu+* zW2AaKeDWieocX(+96eq5sxy72UhR)N_9mqp@8;wl3Rh#k`EPOdvwi2*hYRbRxxGuz zZ_(*Z=d3j^EL(h-B{eoR?)Vz#{;9KeWZqS)UbE)(qdUslYC9)ZeEXFDt@>MxWOUWv z#H+ENKXbm=wEz3hHlYodCNQvE(3;I5;<~z*xAHWvjkEXMyI0sVxkbpt)9Ayy z-(6jYF9>fgo#1kmQ9ojC=)A6X`zxpS3ZI`h%TPjs$uq$`vhwb2UM@}jOI!D?jpSYW zG;y+U-;uQpttG3cO0(3e-i{N}+4d-t{Y-w=hMyG<|Mr!hoP6zLvfAXv8!QXv@}$hG zl`VgI&+K@LmD4oW>GOT1`)6A-uE@8#V))ZtG;f-o&pF-qRw>PyT{6e3yQ|CJ+==pD zwA-`j%<<>0Ggn4zUpICC>EbUIjK3OL6dKNnlz**tn4tcJud47~Y$#LlZ~uAqiPLsO z`86553)8s|8g*IsGz1|Y2>U!%{m^FW9XpqmYfGru5PGuNoy8Qj^Hfh7HJ)Dboz1{tO$MJJh z|L#h?d@?WITl_<%P{TL38K(J0@qLzey$bJrGB&-I!aKP>p>o%bV;qv_gY%|*|9foB zoP6`uOSZpVrDLDEXr}XGv0F!GI@nKOV98o=yiW2LPs+zn+bcKfF=cR06X%=pdC3Fr zt|bX`H16C!(_U#X@9*RWSFQ8fmVy;OOP@a%UVo!DcXET!4#7FSlg}K}O)f0U?a=kj z?Pil~U$a)MK59d{>CK-NA5iIpN7O>oO z_2Jj^=R9w>*`0mHk1Z)$?Bv&&yiaG18e3yNmlQ2pC$_b4`cg6eU(~t_B%}BFV zF4$E|(b;#&k#cMK>OJvyyFPU~d=pynT=zdH-b$Bc&2ju0%cfnI_-(U(^Y-n&eZHRG zUPeCqR2a2w&()aX!>w$Om7lNJSo(Qh>L1gU4M(20tU5pO^F8CIN1S8lon9UF-?Z}c zqir?^i)swEINgtCJfAzIsW*;HLuEUeJS$F4vfuwU9Ih~(&2PPPt{ESinGz#(a)Bp#jl&a zrDOXsE5Wci3A0nT#d=DtJwM50TFz=K;X9>0p%T-7%bNCQd!E^4Qk}Nrq0)N$pFfP7 z#O6#gkUs63emmJEdPR8el!j$ z<3{0Y-erES;(qnMcP*T6UYuNiWA?04rL^2>JzMt}XIW}|e0CvOyL#=FwR%r$c5FX6 zVVk?|o2PrLW^gjR1=X$!`>OYp&1B4szp?Sl8pEwh6Bu0B6s}EmDLnLS`;4hR-wN+M z@@Kl*>n@YrU?}A!WUx+UtL4jD$y0q0-a)E7M*{ zb61Opvo90+aMB{Gly4dTmsVeZYK zy6k_ubvDm=Jv};dYVCsc?UR1IDK1KR%k_#$XO$Xr!sBeQba?KtCf&s(1SbBynQ>wFNUJ^%cXVu#%?n0T(J z$W33i&hfo+&5|6fyKG~wvC!aK2Fmd*XzzjnFjq@d$1v!`8< zt!;kQb^FK@`CB)VuGww-ce(9`Y{azOVw1FIHs;6P^t_#=vR5*XEkj(Fp>dW-tam<- z-ZST&i?wvUA8qVgGWCwmqlVC?cWTErI2NyZcj?*P#`Ha}xxd85M=_oHsw{Wq-@(4) zTdN*&hwbLNB@o5fwd3p6qIE|<+T9R4n{?BBlm8drHHPOI)_5{ypI$ck?k@dp{f|%D z-|Fx#@!1h!9xd6v{^d#gEsDq2Tzy>p&6-i8?TS!<&^4={>FS?ne2>xSEX+(;ApGdk z(HZLwI8=KuFq!Vs+`mHhHB*rF<*UBDWsg@htCXAUoNV>l)y`jL)yBzYX^ywP$;Vz^ z&0T#zdP9ltx6nB}6IDKPM&G;jx^P27WyxHYGum4(N~D&C?0Ba7{B-%=zjG2|_TGNB z!)=SB*32T^O_QZhY>n9VHp#Q8;*mh)@qOynkHfxcr`kkYOLq9Gyvd!j*J9_jYdyCL zeRgbTncWkcX=?iOc+zR}DKkRPoxF8!-u(V8iYkmt_sFboJ1KanX#F~|l|_EB)9)_W zcsS~b`AmPC>VVh_jf#u84FZ&{|4k6vuJ%G&QeJajZqYohe%Y8?n{?fNrDQ$Z;eO0I z`O%s`7W(_TC-g8EJBf%eC0|M{f6#mJMt!a4rkm58rp>wBZqU87M|}CF%rmK7?FJWSaS1yRmVGRN^+m>Zw)Yy*8E=e=E*X( z|0|;QRs7ky@A#UJpLi8LfQB^-oLyY(ICxdt@Y#Yx%p?W-K~7nm2zTvlY(#Gbj6T= zjgh4jS*D!7d*^ZC^RAgCSI;&`9=n=7`;GnF9X-+CkFHYd-0}9C{H%S^)fZ09VsP0! zxiKR2@tdQQUAN4QxWCaj$9Ma`RCoWqYWp;AKC37z>fzT+>pefY^vIgn7s)~w_`VC> zW7)ZEqS(S9w)SfYOcLCn@x+v42lw%4?4Pj8Vb!{geL3H?eP@0Dp7?k5vA#&n*kx&o zQ%~+_J@BmSh@pX6t~%pm#<#z(9W~2i)mUPkeBbkEXui9rfbN$6ezq^yJouiyoiBL@ zvu*d@H_NA*^<7Jv+<3+G;LSCURF?8|3vGAlJ+7W(tp*xR4*xZUWzDVUn`&q0#7g?# zP9uYE0FQ}J}mzs-+s z=9tUM-kW3fCE@e?+jCBy2h8#}g>C&cW%iHUocNg~ ze)8o%D=zbxGMjXi5pMTjyyp?fSocs>7)(VrS-k87hi8T z;jyxx*NM5e>`LFVy}ITmWRSP;%JneatI2o1?H66p6T38e=9>DKftS}FStJ%w>vJG% z;;BvZ7%No!(zDf>H>x~LkG>%**}MAYmovM#J10+(zEV*yy|}afmehQMZI_a->4mB? zs&XzIClHETOrohu$oBo4)U@ z@WHzU7gH2e9bIhN=J0CVe)CAdc-F~X$4~BG*e82g)Y7kH!mRS^FFdd3EztB;V_e;) zvSaPhkNc;2@5*`k)}SSKaHfq#;ex@=8F3$`^84_<$`MX9dKVBZsv+%i@_SBSn!}mhH8EdL9%I&= z&Cg>}ZS;@P9*G*>WEBgN9itu@^Yqbj%#JeXegoYc{Dy3{?Jhp13N`lSpM|~M* zcG-39*6?y&`~Hd5673mf$4*v!n!0c+*LBhIk7tavv;Wv@%cc8A-8i}J;^gd-xiY=S zU8k)(73=qJ0WcDjKd-wz7EY>6IV0v- zbK_LH+zP`qZntw`eI=L9t1+gpG$UrR@un?YW%qA>lr2?iStk|2ne$yEGcre8bF&)bcAwsC(>a`-+fuJj zyd1)M_1=+}#jJPZnEh_VY|)xnJWWMT$1~yB+AY8I@+x(8m;ZXww>!_!JSSUyrPlBK z)5|8u?!2;A`TdD++46b6jy_%X`lP*>vf=8Ug_`Ce;ZbL9E&ZXkI>Ubo!Buyb_DxQl7W3oj{VLOlFKd2@xOh5f{_nGS zB=Nbc_xQ}M?0ZvQnU=1rHvD$(S`pjnsW)v`ac(o6vM-u@4NF->bLFIlk55>fUsq-A zj=2@471TLh#qs{`=O-oFr28wrhFp&{oYHB(X3^2=9dfnO{a-ErdsmycJ^7_~e5v27 zsM?($)laJ@D}~1z|DN?^(%W5=lCSCAxK@#?%D7*;bpP8)a~5Bh-E(kivgP@?lh$r8 z`OgMg{^a1E)9U}vGeDKuas6qn;8K9Y%{5Y2EvG>thV1yt!QV=8n}=hBv|2qZB7M9(lU|^-23_NlTBf$<5a0ym5S<;ibF3&uj|s z-;liRQZxGs_f6;RelKBj$d{Q=o?csc&(ulpSJC&^t@;sj|M%?ny3r8Gw0zI%oNwwdxi zFE1r*7QD$z;oVxJb6n#3&i>aT`jaEptU30a$MA}@=r0-7w43U`{wPk4*m6-wHSV3+ zw)&cRbG}=z?%TWX<)dAq?{DvmwO)Pd|Ah1Ble;2k_dHJvE#1=*d0zh4o{QIhmWhQv zH_v;){8fPww1gS79_a>n$uVe&)0WXCPNQqP7$im)wH+8;%{PLVG4>F>e)FF?gV!rH TH)R=5(8^IyS3j3^P6 + interface Sheet { + id: string; + title: string; + description?: string; + tags?: string[]; + } + + let { sheets }: { sheets: Sheet[] } = $props(); + + let search = $state(""); + let activeTag: string | null = $state( + typeof window !== "undefined" + ? new URLSearchParams(window.location.search).get("tag") + : null + ); + + const allTags = [...new Set(sheets.flatMap((s) => s.tags ?? []))].sort(); + + const filtered = $derived( + sheets.filter((s) => { + const q = search.toLowerCase(); + const matchSearch = + !q || + s.title.toLowerCase().includes(q) || + (s.description?.toLowerCase().includes(q) ?? false); + const matchTag = !activeTag || (s.tags?.includes(activeTag) ?? false); + return matchSearch && matchTag; + }) + ); + + +