Compare commits

..

59 commits

Author SHA1 Message Date
github-actions[bot]
0738bd4406 chore: nightly telemetry refresh 2026-09-19 06:17:07 +00:00
github-actions[bot]
ced842ec38 chore: nightly telemetry refresh 2026-09-18 06:17:07 +00:00
github-actions[bot]
9f9beb201e chore: nightly telemetry refresh 2026-09-17 06:17:07 +00:00
github-actions[bot]
218ffc98b2 chore: nightly telemetry refresh 2026-09-16 06:17:07 +00:00
github-actions[bot]
6122ccc7f1 chore: nightly telemetry refresh 2026-09-15 06:17:07 +00:00
github-actions[bot]
310e3af4f5 chore: nightly telemetry refresh 2026-09-14 06:17:07 +00:00
github-actions[bot]
cdedabf617 chore: nightly telemetry refresh 2026-09-13 06:17:07 +00:00
github-actions[bot]
fd4ff16c80 chore: nightly telemetry refresh 2026-09-12 06:17:07 +00:00
github-actions[bot]
ec51fcbfb4 chore: nightly telemetry refresh 2026-09-11 06:17:04 +00:00
github-actions[bot]
ca980e7bc8 chore: nightly telemetry refresh 2026-09-10 06:17:04 +00:00
github-actions[bot]
ffbda27c4d chore: nightly telemetry refresh 2026-09-09 06:17:04 +00:00
github-actions[bot]
a7e4cbf6d9 chore: nightly telemetry refresh 2026-09-08 06:17:04 +00:00
github-actions[bot]
1854ab8482 chore: nightly telemetry refresh 2026-09-07 06:17:04 +00:00
github-actions[bot]
2725ceb26b chore: nightly telemetry refresh 2026-09-06 06:17:04 +00:00
github-actions[bot]
43f000e929 chore: nightly telemetry refresh 2026-09-05 06:17:04 +00:00
github-actions[bot]
a9a9e0a160 chore: nightly telemetry refresh 2026-09-04 06:17:04 +00:00
github-actions[bot]
97937a1b3a chore: nightly telemetry refresh 2026-09-03 06:17:04 +00:00
github-actions[bot]
4bd53c7560 chore: nightly telemetry refresh 2026-09-02 06:17:04 +00:00
github-actions[bot]
b0aac60bd6 chore: nightly telemetry refresh 2026-09-01 06:17:04 +00:00
github-actions[bot]
2bdb89a21e chore: nightly telemetry refresh 2026-08-31 06:17:04 +00:00
github-actions[bot]
f47579637d chore: nightly telemetry refresh 2026-08-30 06:17:04 +00:00
github-actions[bot]
65ba1099c4 chore: nightly telemetry refresh 2026-08-29 06:17:04 +00:00
github-actions[bot]
db708d97e8 chore: nightly telemetry refresh 2026-08-28 06:17:04 +00:00
github-actions[bot]
d253efee2d chore: nightly telemetry refresh 2026-08-27 06:17:04 +00:00
github-actions[bot]
b5ea1163aa chore: nightly telemetry refresh 2026-08-26 06:17:04 +00:00
github-actions[bot]
972e459db9 chore: nightly telemetry refresh 2026-08-25 06:17:04 +00:00
github-actions[bot]
25b8b16f2f chore: nightly telemetry refresh 2026-08-24 06:17:04 +00:00
github-actions[bot]
b305532c9a chore: nightly telemetry refresh 2026-08-23 06:17:04 +00:00
github-actions[bot]
853ec815b3 chore: nightly telemetry refresh 2026-08-22 06:17:04 +00:00
github-actions[bot]
353f10e95d chore: nightly telemetry refresh 2026-08-21 06:17:04 +00:00
github-actions[bot]
0244714b82 chore: nightly telemetry refresh 2026-08-20 06:17:04 +00:00
github-actions[bot]
0f380f8989 chore: nightly telemetry refresh 2026-08-19 06:17:04 +00:00
github-actions[bot]
0a461f922e chore: nightly telemetry refresh 2026-08-18 06:17:04 +00:00
github-actions[bot]
898e542923 chore: nightly telemetry refresh 2026-08-17 06:17:04 +00:00
github-actions[bot]
147996499b chore: nightly telemetry refresh 2026-08-16 06:17:04 +00:00
developtheweb@protonmail.com
dca6780143 chore: drop a stray __pycache__ artifact, ignore it
Committed by accident when the repaired scraper was exercised against the
live site — importing engine/nightly.py leaves a .pyc behind. Untracked and
ignored so the next test run cannot repeat it.
2026-08-15 04:58:33 -04:00
developtheweb@protonmail.com
0b31ebf801 fix(nightly): repoint feed to rss.xml, parse read-time, repair scraper
The FEED table had been frozen since 2026-07-08 — 37 nightly runs that all
went green while updating nothing. Both paths were dead at once, which is why
it left no trace: FEED_URL requested /feed.xml, which 404s (the site serves
/rss.xml), and the HTML fallback then matched zero articles because it looks
for a thumbnail alt= attribute and a Title-Case date, and the redesign has
neither — no feature images on the index, and uppercase abbreviated months.
It looked current only because no post has been published since July 2025, so
the four titles it froze with are still the four newest.

FEED_URL now points at the real feed, which also carries read-time in the
site's own namespace — so the meta column comes from the publisher instead of
being scraped back out of a page. The fallback is rewritten against the
markup the index actually emits: one `row` div holding an anchor and a `meta`
span.

Failures stay fail-safe and stop being invisible. A skipped section now emits
a GitHub Actions ::warning annotation that shows up in the run summary, plus
a count of how many sections did not update. A silent skip and a successful
run looked identical, and that is the whole reason this went unnoticed.

Verified against the live site: the fallback parses all 25 articles with
dates and read-times, and the feed path yields the same four rows the table
already shows.
2026-08-15 04:35:09 -04:00
github-actions[bot]
b9ffcc2456 chore: nightly telemetry refresh 2026-07-21 07:10:11 +00:00
github-actions[bot]
3ac4f5ed9f chore: nightly telemetry refresh 2026-07-20 07:22:30 +00:00
github-actions[bot]
c2ed58bb1e chore: nightly telemetry refresh 2026-07-19 07:08:30 +00:00
github-actions[bot]
79a0bdd76c chore: nightly telemetry refresh 2026-07-18 06:56:45 +00:00
github-actions[bot]
38644e546b chore: nightly telemetry refresh 2026-07-17 07:03:37 +00:00
github-actions[bot]
baa709f5e3 chore: nightly telemetry refresh 2026-07-16 07:06:31 +00:00
github-actions[bot]
722648490e chore: nightly telemetry refresh 2026-07-15 07:01:25 +00:00
github-actions[bot]
7d03b190ba chore: nightly telemetry refresh 2026-07-14 06:59:07 +00:00
github-actions[bot]
d7bcfff3f0 chore: nightly telemetry refresh 2026-07-13 07:25:03 +00:00
github-actions[bot]
6a2586d6f4 chore: nightly telemetry refresh 2026-07-12 07:08:47 +00:00
github-actions[bot]
d22d855481 chore: nightly telemetry refresh 2026-07-11 07:00:37 +00:00
github-actions[bot]
728826af78 chore: nightly telemetry refresh 2026-07-10 07:27:31 +00:00
github-actions[bot]
fc019b7fe4 chore: nightly telemetry refresh 2026-07-09 07:27:54 +00:00
github-actions[bot]
ee7edc426a chore: nightly telemetry refresh 2026-07-08 07:08:41 +00:00
github-actions[bot]
ba1f22cd14 chore: nightly telemetry refresh 2026-07-08 02:03:33 +00:00
github-actions[bot]
a48d1c2437 chore: demon sorted 12 bits (S lowered by @developtheweb) 2026-07-08 02:02:03 +00:00
developtheweb
c7b0d4ff3b feat: moonshot v2 profile redesign 2026-07-07 22:01:23 -04:00
developtheweb
7d68a667a2 feat: moonshot README — entropy engine, mission board, verified inventory 2026-07-07 22:01:12 -04:00
developtheweb
fe0a9ebff7 ci: nightly feed, stats, and entropy refresh; fix: snake workflow 2026-07-07 21:58:06 -04:00
developtheweb
3ebe545f10 ci: maxwell demon issue-click workflow 2026-07-07 21:54:36 -04:00
developtheweb
deed3a233c feat: entropy-reversal SVG engine with SMIL animation and demon state 2026-07-07 21:53:01 -04:00
developtheweb
f658756979 chore: remove .DS_Store, fix truncated repo description 2026-07-07 21:51:11 -04:00
11 changed files with 748 additions and 191 deletions

BIN
.DS_Store vendored

Binary file not shown.

62
.github/workflows/demon.yml vendored Normal file
View file

@ -0,0 +1,62 @@
name: Maxwell's Demon
on:
issues:
types: [opened]
concurrency:
group: demon-state
cancel-in-progress: false
permissions:
contents: write
issues: write
jobs:
sort:
if: "startsWith(github.event.issue.title, 'demon: sort 12 bits')"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Sort 12 bits into the lattice
run: |
python3 - <<'EOF'
import datetime
import json
path = "state/demon.json"
with open(path) as fh:
state = json.load(fh)
state["bits_sorted"] += 12
state["generation"] += 1
state["demons"] += 1
state["last_sorted_at"] = datetime.datetime.now(
datetime.timezone.utc
).isoformat(timespec="seconds")
with open(path, "w") as fh:
json.dump(state, fh, indent=2)
fh.write("\n")
EOF
python3 engine/generate_entropy_svg.py
- name: Commit lowered entropy
env:
AUTHOR: ${{ github.event.issue.user.login }}
run: |
git config user.name "github-actions[bot]"
git config user.email "41898470+github-actions[bot]@users.noreply.github.com"
git add state/demon.json assets/entropy.svg
git commit -m "chore: demon sorted 12 bits (S lowered by @${AUTHOR})"
git pull --rebase origin "${GITHUB_REF_NAME}"
git push
- name: Thank the demon and close the gate
env:
GH_TOKEN: ${{ github.token }}
ISSUE: ${{ github.event.issue.number }}
run: |
gh issue comment "$ISSUE" --repo "$GITHUB_REPOSITORY" --body \
"12 bits sorted. Entropy of this README decreased by 34.4 zJ (12 × kT ln 2 at 300 K). The second law remains statistical. Thank you, demon."
gh issue edit "$ISSUE" --repo "$GITHUB_REPOSITORY" --add-label demon
gh issue close "$ISSUE" --repo "$GITHUB_REPOSITORY"

37
.github/workflows/nightly.yml vendored Normal file
View file

@ -0,0 +1,37 @@
name: Nightly Telemetry
on:
schedule:
- cron: "17 6 * * *"
workflow_dispatch:
concurrency:
group: demon-state
cancel-in-progress: false
permissions:
contents: write
jobs:
refresh:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Refresh feed, stats, featured cards, entropy field
env:
GITHUB_TOKEN: ${{ github.token }}
run: python3 engine/nightly.py
- name: Commit if changed
run: |
if git diff --quiet; then
echo "no changes"
exit 0
fi
git config user.name "github-actions[bot]"
git config user.email "41898470+github-actions[bot]@users.noreply.github.com"
git add README.md state/demon.json assets/entropy.svg
git commit -m "chore: nightly telemetry refresh"
git pull --rebase origin "${GITHUB_REF_NAME}"
git push

View file

@ -7,10 +7,6 @@ on:
workflow_dispatch:
push:
branches:
- main
jobs:
generate:
runs-on: ubuntu-latest

3
.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
.DS_Store
__pycache__/
*.pyc

View file

@ -4,23 +4,33 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
## Repository Overview
This is a GitHub profile repository containing only a README.md file that displays on the @developtheweb GitHub profile page. There is no source code, build configuration, or tests in this repository.
This is the GitHub profile repository for @developtheweb. Its README renders on the profile page and is a live system, not a static page: an animated entropy-reversal SVG whose state is lowered by visitors ("Maxwell's demon"), plus nightly-refreshed telemetry. Do not reintroduce third-party rendering services (capsule-render, readme-typing-svg, komarev, vercel stats/quotes apps) — everything renders from this repo, GitHub, or stevenmilanese.com assets.
## Repository Structure
## Architecture
```
/home/aurelius/git/developtheweb/
└── README.md
README.md profile page; contains marker-fenced generated sections
engine/generate_entropy_svg.py SMIL-animated assets/entropy.svg from state/demon.json (stdlib only)
engine/nightly.py refreshes README marker sections + bumps entropy generation (stdlib only)
state/demon.json bits_sorted / generation / demons / last_sorted_at
assets/entropy.svg generated — never hand-edit; regenerate via the engine
.github/workflows/demon.yml issues:opened, title "demon: sort 12 bits" → +12 bits, regen SVG, commit, comment, close
.github/workflows/nightly.yml cron 17 6 * * * → engine/nightly.py, commit if changed
.github/workflows/snake.yml cron every 12h → contribution snake SVGs on the `output` branch
```
## Working with this Repository
## README marker sections (machine-written — edit the generators, not the sections)
Since this is a profile repository with only a README.md file:
- `<!-- FEED:START/END -->` — 4 newest Strange Quarks articles (RSS `/feed.xml` if populated, else parsed from https://stevenmilanese.com/blog HTML)
- `<!-- STATS:START/END -->` — telemetry row with live star/repo totals
- `<!-- FEATURED:START/END -->` — featured cards (anthropic-certs, slTrain, meowchi-releases, mpl) with live star counts
- Any changes should maintain the professional formatting and structure of the profile README
- The README uses GitHub-flavored markdown with centered content, badges, and images
- External image assets are referenced from `https://github.com/developtheweb/stevenmilanese-com/blob/main/public/`
`engine/nightly.py` is fail-safe per section: on fetch/parse failure it leaves that section untouched and exits 0.
## Note
## Conventions
This is not a development project - it's a GitHub profile repository used for personal branding and showcasing work. There are no build commands, tests, or development workflows associated with this repository.
- Conventional commit messages (`feat:`, `fix:`, `chore:`, `ci:`). No attribution footers of any kind.
- Contact is `rev@moonfactory.dev` only — the old Telegram link and the old level-host email address are retired and must not reappear.
- Entropy formula: `S = max(12.7, 100 0.0002·bits_sorted)`; 12 bits per demon click = 34.4 zJ (12 × kT ln 2 at 300 K).
- SVG regeneration is deterministic for a given `generation` — diffs stay reviewable.
- Test locally with `python3 engine/generate_entropy_svg.py` and `GITHUB_TOKEN=$(gh auth token) python3 engine/nightly.py` (both stdlib-only; no pip installs).

265
README.md
View file

@ -1,191 +1,120 @@
<div align="center">
<!-- Animated Wave -->
<img src="https://capsule-render.vercel.app/api?type=waving&color=gradient&customColorList=14,15,16,17,18,19&height=100&section=header&fontSize=0" width="100%" />
# Reversing the irreversible
<!-- Logo with Animation -->
<img src="https://stevenmilanese.com/StevenMilanese-full-logo.png" alt="Steven Milanese" width="400"/>
*Rev. Steven Milanese — the second law is statistical, not sacred. The demon pays its bills in bits.*
<!-- Animated Typing Header -->
[![Typing SVG](https://readme-typing-svg.demolab.com?font=Fira+Code&size=32&duration=2800&pause=2000&color=06B6D4&center=true&vCenter=true&width=600&lines=Steven+Milanese;Autodidactic+Polymath;Systems+Alchemist;Physicist+%26+Reverend;Arch+Linux+User+BTW)](https://git.io/typing-svg)
<!-- Profile Views Counter -->
<br>
<img src="https://komarev.com/ghpvc/?username=developtheweb&color=0891b2&style=for-the-badge&label=PROFILE+VIEWS" alt="Profile Views"/>
<!-- Social Badges with Custom Colors -->
<br><br>
[![Website](https://img.shields.io/badge/Website-stevenmilanese.com-1F2937?style=for-the-badge&logo=googlechrome&logoColor=white&labelColor=374151&color=06B6D4)](https://stevenmilanese.com)
[![LinkedIn](https://img.shields.io/badge/LinkedIn-Connect-0A66C2?style=for-the-badge&logo=linkedin&logoColor=white&labelColor=084C91&color=0A66C2)](https://www.linkedin.com/in/stevenmilanese/)
[![Blog](https://img.shields.io/badge/Blog-Strange_Quarks-14B8A6?style=for-the-badge&logo=hashnode&logoColor=white&labelColor=047857&color=14B8A6)](https://stevenmilanese.com/strange-quarks)
<br>
[![X](https://img.shields.io/badge/X-@developtheweb-000000?style=for-the-badge&logo=x&logoColor=white&labelColor=171717&color=000000)](https://x.com/developtheweb)
[![Telegram](https://img.shields.io/badge/Telegram-@CodeAndVerse-26A5E4?style=for-the-badge&logo=telegram&logoColor=white&labelColor=0088CC&color=26A5E4)](https://t.me/CodeAndVerse)
[![Email](https://img.shields.io/badge/Email-Contact_Me-EA4335?style=for-the-badge&logo=gmail&logoColor=white&labelColor=C23B2C&color=EA4335)](mailto:dev@level.host)
<br>
[![ORCID](https://img.shields.io/badge/ORCID-Research_Profile-A6CE39?style=for-the-badge&logo=orcid&logoColor=white&labelColor=87A330&color=A6CE39)](https://orcid.org/0009-0008-0442-208X)
[![OSF](https://img.shields.io/badge/OSF-Open_Science-2077B4?style=for-the-badge&logo=osf&logoColor=white&labelColor=1A5F8F&color=2077B4)](https://osf.io/3tsd4/)
</div>
<!-- Animated Banner -->
<div align="center">
<img src="https://stevenmilanese.com/StevenMilanese-hero-stars.webp" alt="Hero Banner" width="100%"/>
<img src="assets/entropy.svg" width="100%" alt="Entropy-reversal field: particles converging from chaos into a (2,5) torus-knot lattice"/>
[⚡ Be the demon — sort 12 bits](https://github.com/developtheweb/developtheweb/issues/new?title=demon%3A+sort+12+bits&body=One+tap.+Submit+to+sort.)
<sub>Each click opens a one-tap issue; an Action sorts the field, recommits the SVG, closes the issue. This README's state is community-lowered entropy.</sub>
</div>
<!-- Quote Section -->
<div align="center">
<br>
<img src="https://quotes-github-readme.vercel.app/api?type=horizontal&theme=tokyonight&quote=Transforming%20complexity%20into%20elegance%2C%20one%20algorithm%20at%20a%20time.&author=Steven%20Milanese" alt="Quote"/>
<br>
</div>
## About the Reverend
## 🎯 About Me
```python
class StevenMilanese:
def __init__(self):
self.title = "Autodidactic Polymath | Systems Alchemist"
self.location = "🌍 Earth"
self.os = "Arch Linux BTW 🐧"
self.current_focus = ["AI Architecture", "Quantum Computing", "WebGL", "Spiritual Tech"]
self.philosophy = "Bridge technical excellence with human experience"
def transform_challenges(self, problem):
return f"✨ Inspired solution for {problem}"
```
Reverend ≔ Physicist ⊗ Minister ⊗ Systems_Alchemist
domain : ℝ³·¹ ⊗ CY₃(χ = ±6)
axiom : complexity ⟼ elegance
method : ∀ p ∈ Inconceivable — solve(p) pose(better_p)
runtime : Arch Linux, btw
```
I transform complex challenges into inspired technological solutions. By seamlessly integrating Artificial Intelligence with cutting-edge development practices, I create systems that push the boundaries of what's possible. My expertise spans multiple domains including theoretical physics, mathematics, AI systems architecture, and spiritual technology.
*Written in MPL — the author's own language. Ordained minister, autodidactic polymath, natural philosopher. The ministry and the physics are the same inquiry conducted at different energy scales.*
## 🚀 Tech Arsenal
## The mission — goals inconceivable by design
<table>
<tr>
<td width="50%" valign="top">
**Reverse the irreversible**
Maxwell's demon on GitHub's own infrastructure, funded in Landauer's currency. *(running above)*
</td>
<td width="50%" valign="top">
**Derive the three generations**
CalabiYau compactifications, χ = ±6. [ORCID](https://orcid.org/0009-0008-0442-208X) · [OSF](https://osf.io/3tsd4/) · [companion essays](https://stevenmilanese.com/blog/tag/calabi-yau-manifolds)
</td>
</tr>
<tr>
<td width="50%" valign="top">
**Cognitive universality**
[MPL](https://github.com/developtheweb/mpl): if you can write the equation, you can run it.
</td>
<td width="50%" valign="top">
**Planetary intelligence**
Earth as information processor, argued in full on [Strange Quarks](https://stevenmilanese.com/blog/planetary-intelligence-earth-as-information-processor).
</td>
</tr>
</table>
<!-- STATS:START -->
<div align="center">
### Languages & Frameworks
![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge&logo=typescript&logoColor=white)
![JavaScript](https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black)
![Python](https://img.shields.io/badge/Python-3776AB?style=for-the-badge&logo=python&logoColor=white)
![React](https://img.shields.io/badge/React-61DAFB?style=for-the-badge&logo=react&logoColor=black)
![Next.js](https://img.shields.io/badge/Next.js-000000?style=for-the-badge&logo=nextdotjs&logoColor=white)
![Node.js](https://img.shields.io/badge/Node.js-339933?style=for-the-badge&logo=nodedotjs&logoColor=white)
![Three.js](https://img.shields.io/badge/Three.js-000000?style=for-the-badge&logo=threedotjs&logoColor=white)
### Operating System & Environment
![Arch Linux](https://img.shields.io/badge/Arch_Linux-1793D1?style=for-the-badge&logo=arch-linux&logoColor=white)
![BTW I Use Arch](https://img.shields.io/badge/BTW_I_Use_Arch-1793D1?style=for-the-badge&logo=arch-linux&logoColor=white)
![Neovim](https://img.shields.io/badge/Neovim-57A143?style=for-the-badge&logo=neovim&logoColor=white)
![Terminal](https://img.shields.io/badge/Terminal-4D4D4D?style=for-the-badge&logo=windows-terminal&logoColor=white)
### Tools & Technologies
![Docker](https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=docker&logoColor=white)
![AWS](https://img.shields.io/badge/AWS-232F3E?style=for-the-badge&logo=amazonaws&logoColor=white)
![PostgreSQL](https://img.shields.io/badge/PostgreSQL-336791?style=for-the-badge&logo=postgresql&logoColor=white)
![Git](https://img.shields.io/badge/Git-F05032?style=for-the-badge&logo=git&logoColor=white)
![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-38B2AC?style=for-the-badge&logo=tailwind-css&logoColor=white)
![WebGL](https://img.shields.io/badge/WebGL-990000?style=for-the-badge&logo=webgl&logoColor=white)
![AI/ML](https://img.shields.io/badge/AI/ML-FF6F61?style=for-the-badge&logo=tensorflow&logoColor=white)
`10¹⁰⁶ yr until heat death — the deadline` · `2.9 zJ of order per bit sorted (kT ln 2, 300 K)` · `★ 27 stars across 14 public repos`
</div>
<!-- STATS:END -->
## 📊 GitHub Analytics
<div align="center">
<img width="49%" height="195px" src="https://github-readme-stats.vercel.app/api?username=developtheweb&show_icons=true&count_private=true&hide_border=true&title_color=06B6D4&icon_color=06B6D4&text_color=c9d1d9&bg_color=0d1117" alt="Steven Milanese github stats" />
<img width="41%" height="195px" src="https://github-readme-stats.vercel.app/api/top-langs/?username=developtheweb&layout=compact&hide_border=true&title_color=06B6D4&text_color=c9d1d9&bg_color=0d1117" />
</div>
<div align="center">
<img src="https://github-readme-activity-graph.vercel.app/graph?username=developtheweb&custom_title=Contribution%20Graph&bg_color=0d1117&color=06B6D4&line=06B6D4&point=06B6D4&area_color=1a1b27&title_color=06B6D4&area=true" alt="Steven Milanese's Activity Graph" width="100%"/>
</div>
## 🎨 Featured Projects
## Beneath the physics — the verified inventory
<!-- FEATURED:START -->
<div align="center">
<table>
<tr>
<td width="50%">
<h3 align="center">stevenmilanese.com</h3>
<div align="center">
<a href="https://stevenmilanese.com" target="_blank"><img src="https://stevenmilanese.com/projects/calabi-yau.webp" width="100%" alt="Portfolio"/></a>
<br><br>
<p><strong>Immersive Portfolio Experience</strong></p>
<p>Three.js visualizations • Server-side rendering • Headless CMS</p>
<p>
<a href="https://stevenmilanese.com" target="_blank"><img src="https://img.shields.io/badge/Visit-Live_Site-06B6D4?style=for-the-badge&logo=vercel&logoColor=white" alt="Visit Live Site"/></a>
</p>
</div>
<td width="50%" valign="top">
<h3 align="center"><a href="https://github.com/developtheweb/anthropic-certs">anthropic-certs</a></h3>
<p align="center"><code>★ 11</code></p>
<p align="center">Verified Anthropic certifications — Claude, API, Claude Code CLI, MCP.</p>
</td>
<td width="50%">
<h3 align="center">Emergence Intelligence</h3>
<div align="center">
<a href="https://stevenmilanese.com/#projects" target="_blank"><img src="https://stevenmilanese.com/projects/emergence-intelligence.webp" width="100%" alt="Emergence Intelligence"/></a>
<br><br>
<p><strong>Advanced AI System</strong></p>
<p>Cognitive architecture • Semantic processing • Episodic memory</p>
<p>
<a href="https://stevenmilanese.com/#projects" target="_blank"><img src="https://img.shields.io/badge/Learn-More-14B8A6?style=for-the-badge&logo=openai&logoColor=white" alt="Learn More"/></a>
</p>
</div>
<td width="50%" valign="top">
<h3 align="center"><a href="https://github.com/developtheweb/slTrain">slTrain</a></h3>
<p align="center"><code>★ 4</code></p>
<p align="center">A steam locomotive for your terminal, smoke trail included.</p>
</td>
</tr>
<tr>
<td width="50%" valign="top">
<h3 align="center"><a href="https://github.com/developtheweb/meowchi-releases">meowchi-releases</a></h3>
<p align="center"><code>★ 4</code></p>
<p align="center">A desktop pet that evolves when you actually get work done.</p>
</td>
<td width="50%" valign="top">
<h3 align="center"><a href="https://github.com/developtheweb/mpl">mpl</a></h3>
<p align="center"><code>★ 2</code></p>
<p align="center">Mathematics Programming Language — write the equation, run the equation.</p>
</td>
</tr>
</table>
</div>
<!-- FEATURED:END -->
## 📚 Latest Articles
## Latest from Strange Quarks
<div align="center">
<!-- FEED:START -->
| Article | |
|:---|---:|
| [THE MAJORITY THAT VOTED FOR HEMLOCK - Plato's Republic, Exegesis and Judgment](https://stevenmilanese.com/blog/the-majority-that-voted-for-hemlock-platos-republic-exegesis-and-judgment) | Sep 15, 2026 · 204 min read |
| [What Survives the Reset](https://stevenmilanese.com/blog/what-survives-the-reset) | Aug 31, 2026 · 12 min read |
| [The Invisible Hand's Blind Spot: A Demand Externality in Competitive Automation](https://stevenmilanese.com/blog/the-invisible-hands-blind-spot-a-demand-externality-in-competitive-automation) | Aug 19, 2026 · 61 min read |
| [Mathematical Programming Language: A Vision for Cognitive Universality Through Unicode-Based Syntax](https://stevenmilanese.com/blog/mathematical-programming-language-a-vision-for-cognitive-universality-through-unicode-based-syntax) | Jul 28, 2025 · 19 min read |
<!-- FEED:END -->
| 📝 Article | 🏷️ Topics |
|:---|:---|
| [The Intersection of Physics and AI](https://stevenmilanese.com/strange-quarks) | `Quantum Computing` `Machine Learning` `Physics` |
| [Building Resilient Distributed Systems](https://stevenmilanese.com/strange-quarks) | `Architecture` `Scalability` `DevOps` |
| [WebGL Performance Optimization Techniques](https://stevenmilanese.com/strange-quarks) | `WebGL` `Three.js` `Performance` |
| [Quantum Computing: Practical Applications](https://stevenmilanese.com/strange-quarks) | `Quantum` `Algorithms` `Future Tech` |
</div>
## 🔭 Current Focus
<div align="center">
```mermaid
graph LR
A[Advanced 3D Visualizations] --> B{Current Projects}
C[Serverless Architecture] --> B
D[Quantum Computing + AI] --> B
E[Spiritual Technology] --> B
B --> F[🚀 Innovation]
```
</div>
## 🏆 Achievements & Certifications
<div align="center">
<img src="https://img.shields.io/badge/Physics-Research_Publications-FF6B6B?style=for-the-badge"/>
<img src="https://img.shields.io/badge/AI/ML-Advanced_Practitioner-4ECDC4?style=for-the-badge"/>
<img src="https://img.shields.io/badge/Architecture-Systems_Design-95E1D3?style=for-the-badge"/>
<img src="https://img.shields.io/badge/Leadership-Technical_Strategy-F38181?style=for-the-badge"/>
<br>
<img src="https://img.shields.io/badge/🐧_Arch_Linux-Full_Time_BTW-1793D1?style=for-the-badge"/>
<img src="https://img.shields.io/badge/pacman-Package_Manager-1793D1?style=for-the-badge"/>
<img src="https://img.shields.io/badge/AUR-Helper_yay-1793D1?style=for-the-badge"/>
</div>
## 💫 Connect & Collaborate
<div align="center">
<img src="https://readme-typing-svg.demolab.com?font=Fira+Code&size=22&duration=3000&pause=1000&color=06B6D4&center=true&vCenter=true&width=435&lines=Let's+build+something+amazing!;Open+to+collaborations;Reach+out+anytime!" alt="Typing SVG" />
<br><br>
[![🌐 Website](https://img.shields.io/badge/🌐_Website-stevenmilanese.com-06B6D4?style=for-the-badge)](https://stevenmilanese.com)
[![💼 LinkedIn](https://img.shields.io/badge/💼_LinkedIn-Connect-0A66C2?style=for-the-badge)](https://www.linkedin.com/in/stevenmilanese/)
[![📧 Email](https://img.shields.io/badge/📧_Email-Contact-EA4335?style=for-the-badge)](mailto:dev@level.host)
[![📝 Blog](https://img.shields.io/badge/📝_Blog-Read-14B8A6?style=for-the-badge)](https://stevenmilanese.com/strange-quarks)
</div>
<!-- Snake Animation -->
<div align="center">
<br>
<picture>
@ -197,13 +126,17 @@ graph LR
---
<div align="center">
<img src="https://stevenmilanese.com/StevenMilanese-ghost-logo.png" alt="Steven Milanese Logo" width="80"/>
<br>
<img src="https://readme-typing-svg.demolab.com?font=Fira+Code&size=14&duration=3000&pause=1000&color=718096&center=true&vCenter=true&width=435&lines=Systems+Alchemist;Transforming+Complexity+into+Elegance" alt="Typing SVG" />
<br>
<sub>⚡ Powered by curiosity, driven by innovation</sub>
</div>
<table width="100%">
<tr>
<td align="left">
<!-- Wave Footer -->
<img src="https://capsule-render.vercel.app/api?type=waving&color=gradient&customColorList=14,15,16,17,18,19&height=80&section=footer&fontSize=0" width="100%" />
*Founder, [MoonFactory](https://moonfactory.dev) — development and consulting.*
</td>
<td align="right">
[stevenmilanese.com](https://stevenmilanese.com) · [Strange Quarks](https://stevenmilanese.com/blog) · [X](https://x.com/developtheweb) · [LinkedIn](https://www.linkedin.com/in/stevenmilanese/) · [ORCID](https://orcid.org/0009-0008-0442-208X) · [OSF](https://osf.io/3tsd4/) · [rev@moonfactory.dev](mailto:rev@moonfactory.dev)
</td>
</tr>
</table>

126
assets/entropy.svg Normal file
View file

@ -0,0 +1,126 @@
<svg xmlns="http://www.w3.org/2000/svg" width="880" height="260" viewBox="0 0 880 260" role="img" aria-label="Entropy-reversal field: S = 100.0 k-bits">
<rect x="0.5" y="0.5" width="879" height="259" rx="8" fill="#010409" stroke="#21262d"/>
<circle r="3" fill="#1d6f7d" cx="691.1" cy="231.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="691.1;612.1;612.1;691.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="231.0;130.0;130.0;231.0"/></circle>
<circle r="3" fill="#4dd4e8" cx="789.6" cy="108.5"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="789.6;609.3;609.3;789.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="108.5;141.8;141.8;108.5"/></circle>
<circle r="3" fill="#4dd4e8" cx="464.3" cy="124.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="464.3;601.4;601.4;464.3"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="124.2;152.7;152.7;124.2"/></circle>
<circle r="3" fill="#4dd4e8" cx="731.8" cy="234.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="731.8;588.9;588.9;731.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="234.3;162.2;162.2;234.3"/></circle>
<circle r="3" fill="#4dd4e8" cx="644.6" cy="78.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="644.6;572.9;572.9;644.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="78.1;169.7;169.7;78.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="220.0" cy="111.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="220.0;554.8;554.8;220.0"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="111.4;175.0;175.0;111.4"/></circle>
<circle r="3" fill="#1d6f7d" cx="358.2" cy="21.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="358.2;535.8;535.8;358.2"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="21.3;178.1;178.1;21.3"/></circle>
<circle r="3" fill="#1d6f7d" cx="376.1" cy="98.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="376.1;517.3;517.3;376.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="98.2;179.3;179.3;98.2"/></circle>
<circle r="3" fill="#1d6f7d" cx="787.8" cy="225.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="787.8;500.2;500.2;787.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="225.6;179.1;179.1;225.6"/></circle>
<circle r="3" fill="#1d6f7d" cx="269.4" cy="145.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="269.4;485.4;485.4;269.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="145.9;178.1;178.1;145.9"/></circle>
<circle r="3" fill="#4dd4e8" cx="367.4" cy="166.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="367.4;472.9;472.9;367.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="166.9;177.2;177.2;166.9"/></circle>
<circle r="3" fill="#4dd4e8" cx="385.9" cy="183.5"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="385.9;462.6;462.6;385.9"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="183.5;176.9;176.9;183.5"/></circle>
<circle r="3" fill="#4dd4e8" cx="145.6" cy="175.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="145.6;454.0;454.0;145.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="175.2;177.8;177.8;175.2"/></circle>
<circle r="3" fill="#1d6f7d" cx="328.5" cy="200.5"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="328.5;446.2;446.2;328.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="200.5;180.2;180.2;200.5"/></circle>
<circle r="3" fill="#4dd4e8" cx="89.7" cy="26.7"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="89.7;438.1;438.1;89.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="26.7;184.2;184.2;26.7"/></circle>
<circle r="3" fill="#1d6f7d" cx="686.4" cy="198.7"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="686.4;429.0;429.0;686.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="198.7;189.5;189.5;198.7"/></circle>
<circle r="3" fill="#4dd4e8" cx="709.8" cy="217.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="709.8;417.8;417.8;709.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="217.3;195.7;195.7;217.3"/></circle>
<circle r="3" fill="#4dd4e8" cx="790.1" cy="189.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="790.1;404.3;404.3;790.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="189.9;202.1;202.1;189.9"/></circle>
<circle r="3" fill="#4dd4e8" cx="569.2" cy="40.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="569.2;388.2;388.2;569.2"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="40.2;207.9;207.9;40.2"/></circle>
<circle r="3" fill="#4dd4e8" cx="779.1" cy="226.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="779.1;369.9;369.9;779.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="226.0;212.3;212.3;226.0"/></circle>
<circle r="3" fill="#1d6f7d" cx="564.2" cy="57.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="564.2;350.2;350.2;564.2"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="57.0;214.6;214.6;57.0"/></circle>
<circle r="3" fill="#4dd4e8" cx="356.1" cy="109.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="356.1;330.1;330.1;356.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="109.4;214.4;214.4;109.4"/></circle>
<circle r="3" fill="#4dd4e8" cx="74.9" cy="28.5"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="74.9;311.0;311.0;74.9"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="28.5;211.2;211.2;28.5"/></circle>
<circle r="3" fill="#4dd4e8" cx="155.7" cy="149.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="155.7;294.2;294.2;155.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="149.1;205.2;205.2;149.1"/></circle>
<circle r="3" fill="#1d6f7d" cx="737.4" cy="218.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="737.4;280.8;280.8;737.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="218.1;196.7;196.7;218.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="845.7" cy="127.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="845.7;271.9;271.9;845.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="127.9;186.2;186.2;127.9"/></circle>
<circle r="3" fill="#4dd4e8" cx="154.7" cy="137.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="154.7;267.9;267.9;154.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="137.0;174.5;174.5;137.0"/></circle>
<circle r="3" fill="#1d6f7d" cx="511.5" cy="46.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="511.5;269.0;269.0;511.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="46.1;162.2;162.2;46.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="519.7" cy="77.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="519.7;274.8;274.8;519.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="77.6;150.3;150.3;77.6"/></circle>
<circle r="3" fill="#4dd4e8" cx="854.4" cy="188.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="854.4;284.5;284.5;854.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="188.9;139.4;139.4;188.9"/></circle>
<circle r="3" fill="#4dd4e8" cx="240.5" cy="171.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="240.5;296.9;296.9;240.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="171.4;130.0;130.0;171.4"/></circle>
<circle r="3" fill="#4dd4e8" cx="437.8" cy="34.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="437.8;310.8;310.8;437.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="34.6;122.3;122.3;34.6"/></circle>
<circle r="3" fill="#4dd4e8" cx="848.3" cy="83.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="848.3;324.8;324.8;848.3"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="83.3;116.3;116.3;83.3"/></circle>
<circle r="3" fill="#4dd4e8" cx="637.9" cy="237.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="637.9;337.7;337.7;637.9"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="237.2;111.6;111.6;237.2"/></circle>
<circle r="3" fill="#1d6f7d" cx="498.6" cy="138.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="498.6;348.7;348.7;498.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="138.4;107.8;107.8;138.4"/></circle>
<circle r="3" fill="#4dd4e8" cx="125.3" cy="90.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="125.3;357.3;357.3;125.3"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="90.2;104.4;104.4;90.2"/></circle>
<circle r="3" fill="#4dd4e8" cx="696.1" cy="86.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="696.1;363.4;363.4;696.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="86.6;100.5;100.5;86.6"/></circle>
<circle r="3" fill="#1d6f7d" cx="434.6" cy="173.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="434.6;367.5;367.5;434.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="173.6;95.7;95.7;173.6"/></circle>
<circle r="3" fill="#4dd4e8" cx="147.4" cy="184.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="147.4;370.2;370.2;147.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="184.1;89.5;89.5;184.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="479.5" cy="116.7"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="479.5;372.6;372.6;479.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="116.7;81.9;81.9;116.7"/></circle>
<circle r="3" fill="#1d6f7d" cx="674.4" cy="71.8"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="674.4;375.7;375.7;674.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="71.8;72.8;72.8;71.8"/></circle>
<circle r="3" fill="#4dd4e8" cx="249.3" cy="230.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="249.3;380.6;380.6;249.3"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="230.1;62.7;62.7;230.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="113.6" cy="201.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="113.6;388.2;388.2;113.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="201.1;52.1;52.1;201.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="491.6" cy="167.8"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="491.6;398.8;398.8;491.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="167.8;41.9;41.9;167.8"/></circle>
<circle r="3" fill="#4dd4e8" cx="221.1" cy="172.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="221.1;412.5;412.5;221.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="172.9;32.8;32.8;172.9"/></circle>
<circle r="3" fill="#4dd4e8" cx="552.7" cy="237.5"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="552.7;429.0;429.0;552.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="237.5;25.7;25.7;237.5"/></circle>
<circle r="3" fill="#1d6f7d" cx="823.9" cy="24.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="823.9;447.4;447.4;823.9"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="24.3;21.3;21.3;24.3"/></circle>
<circle r="3" fill="#1d6f7d" cx="740.7" cy="139.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="740.7;466.7;466.7;740.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="139.3;20.0;20.0;139.3"/></circle>
<circle r="3" fill="#4dd4e8" cx="854.5" cy="33.5"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="854.5;485.5;485.5;854.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="33.5;22.0;22.0;33.5"/></circle>
<circle r="3" fill="#4dd4e8" cx="157.3" cy="133.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="157.3;502.7;502.7;157.3"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="133.2;27.3;27.3;133.2"/></circle>
<circle r="3" fill="#4dd4e8" cx="377.0" cy="122.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="377.0;517.1;517.1;377.0"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="122.4;35.3;35.3;122.4"/></circle>
<circle r="3" fill="#4dd4e8" cx="90.0" cy="162.8"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="90.0;527.8;527.8;90.0"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="162.8;45.6;45.6;162.8"/></circle>
<circle r="3" fill="#1d6f7d" cx="334.0" cy="114.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="334.0;534.4;534.4;334.0"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="114.0;57.4;57.4;114.0"/></circle>
<circle r="3" fill="#4dd4e8" cx="805.7" cy="180.7"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="805.7;536.9;536.9;805.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="180.7;69.7;69.7;180.7"/></circle>
<circle r="3" fill="#4dd4e8" cx="784.1" cy="118.7"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="784.1;535.8;535.8;784.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="118.7;81.9;81.9;118.7"/></circle>
<circle r="3" fill="#4dd4e8" cx="357.5" cy="140.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="357.5;531.9;531.9;357.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="140.2;93.2;93.2;140.2"/></circle>
<circle r="3" fill="#4dd4e8" cx="442.0" cy="158.7"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="442.0;526.3;526.3;442.0"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="158.7;103.1;103.1;158.7"/></circle>
<circle r="3" fill="#4dd4e8" cx="472.8" cy="225.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="472.8;520.2;520.2;472.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="225.2;111.6;111.6;225.2"/></circle>
<circle r="3" fill="#4dd4e8" cx="551.2" cy="215.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="551.2;514.9;514.9;551.2"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="215.0;118.7;118.7;215.0"/></circle>
<circle r="3" fill="#4dd4e8" cx="517.4" cy="138.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="517.4;511.2;511.2;517.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="138.4;124.6;124.6;138.4"/></circle>
<circle r="3" fill="#4dd4e8" cx="71.4" cy="122.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="71.4;510.0;510.0;71.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="122.1;130.0;130.0;122.1"/></circle>
<circle r="3" fill="#1d6f7d" cx="854.9" cy="77.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="854.9;511.2;511.2;854.9"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="77.1;135.4;135.4;77.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="792.3" cy="201.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="792.3;514.9;514.9;792.3"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="201.6;141.3;141.3;201.6"/></circle>
<circle r="3" fill="#4dd4e8" cx="111.5" cy="70.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="111.5;520.2;520.2;111.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="70.1;148.4;148.4;70.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="550.8" cy="94.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="550.8;526.3;526.3;550.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="94.3;156.9;156.9;94.3"/></circle>
<circle r="3" fill="#4dd4e8" cx="729.7" cy="88.8"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="729.7;531.9;531.9;729.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="88.8;166.8;166.8;88.8"/></circle>
<circle r="3" fill="#4dd4e8" cx="375.5" cy="160.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="375.5;535.8;535.8;375.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="160.3;178.1;178.1;160.3"/></circle>
<circle r="3" fill="#1d6f7d" cx="123.8" cy="96.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="123.8;536.9;536.9;123.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="96.4;190.3;190.3;96.4"/></circle>
<circle r="3" fill="#4dd4e8" cx="674.1" cy="144.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="674.1;534.4;534.4;674.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="144.3;202.6;202.6;144.3"/></circle>
<circle r="3" fill="#4dd4e8" cx="748.8" cy="128.8"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="748.8;527.8;527.8;748.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="128.8;214.4;214.4;128.8"/></circle>
<circle r="3" fill="#4dd4e8" cx="508.4" cy="104.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="508.4;517.1;517.1;508.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="104.9;224.7;224.7;104.9"/></circle>
<circle r="3" fill="#1d6f7d" cx="706.3" cy="63.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="706.3;502.7;502.7;706.3"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="63.4;232.7;232.7;63.4"/></circle>
<circle r="3" fill="#4dd4e8" cx="796.1" cy="88.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="796.1;485.5;485.5;796.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="88.0;238.0;238.0;88.0"/></circle>
<circle r="3" fill="#1d6f7d" cx="218.8" cy="177.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="218.8;466.7;466.7;218.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="177.0;240.0;240.0;177.0"/></circle>
<circle r="3" fill="#4dd4e8" cx="489.1" cy="109.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="489.1;447.4;447.4;489.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="109.9;238.7;238.7;109.9"/></circle>
<circle r="3" fill="#1d6f7d" cx="343.9" cy="181.5"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="343.9;429.0;429.0;343.9"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="181.5;234.3;234.3;181.5"/></circle>
<circle r="3" fill="#4dd4e8" cx="465.7" cy="114.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="465.7;412.5;412.5;465.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="114.9;227.2;227.2;114.9"/></circle>
<circle r="3" fill="#1d6f7d" cx="20.8" cy="120.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="20.8;398.8;398.8;20.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="120.4;218.1;218.1;120.4"/></circle>
<circle r="3" fill="#4dd4e8" cx="241.2" cy="231.5"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="241.2;388.2;388.2;241.2"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="231.5;207.9;207.9;231.5"/></circle>
<circle r="3" fill="#1d6f7d" cx="96.5" cy="43.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="96.5;380.6;380.6;96.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="43.4;197.3;197.3;43.4"/></circle>
<circle r="3" fill="#4dd4e8" cx="847.5" cy="208.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="847.5;375.7;375.7;847.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="208.0;187.2;187.2;208.0"/></circle>
<circle r="3" fill="#4dd4e8" cx="658.2" cy="160.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="658.2;372.6;372.6;658.2"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="160.3;178.1;178.1;160.3"/></circle>
<circle r="3" fill="#4dd4e8" cx="690.1" cy="225.5"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="690.1;370.2;370.2;690.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="225.5;170.5;170.5;225.5"/></circle>
<circle r="3" fill="#1d6f7d" cx="386.4" cy="45.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="386.4;367.5;367.5;386.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="45.2;164.3;164.3;45.2"/></circle>
<circle r="3" fill="#1d6f7d" cx="251.3" cy="190.7"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="251.3;363.4;363.4;251.3"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="190.7;159.5;159.5;190.7"/></circle>
<circle r="3" fill="#4dd4e8" cx="422.4" cy="96.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="422.4;357.3;357.3;422.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="96.1;155.6;155.6;96.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="445.9" cy="60.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="445.9;348.7;348.7;445.9"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="60.3;152.2;152.2;60.3"/></circle>
<circle r="3" fill="#4dd4e8" cx="635.6" cy="216.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="635.6;337.7;337.7;635.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="216.1;148.4;148.4;216.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="743.3" cy="40.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="743.3;324.8;324.8;743.3"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="40.1;143.7;143.7;40.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="222.3" cy="158.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="222.3;310.8;310.8;222.3"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="158.1;137.7;137.7;158.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="849.5" cy="222.8"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="849.5;296.9;296.9;849.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="222.8;130.0;130.0;222.8"/></circle>
<circle r="3" fill="#4dd4e8" cx="353.8" cy="163.5"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="353.8;284.5;284.5;353.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="163.5;120.6;120.6;163.5"/></circle>
<circle r="3" fill="#4dd4e8" cx="258.8" cy="238.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="258.8;274.8;274.8;258.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="238.9;109.7;109.7;238.9"/></circle>
<circle r="3" fill="#4dd4e8" cx="399.2" cy="60.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="399.2;269.0;269.0;399.2"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="60.9;97.8;97.8;60.9"/></circle>
<circle r="3" fill="#1d6f7d" cx="540.7" cy="204.7"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="540.7;267.9;267.9;540.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="204.7;85.5;85.5;204.7"/></circle>
<circle r="3" fill="#1d6f7d" cx="811.5" cy="44.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="811.5;271.9;271.9;811.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="44.3;73.8;73.8;44.3"/></circle>
<circle r="3" fill="#1d6f7d" cx="451.7" cy="41.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="451.7;280.8;280.8;451.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="41.4;63.3;63.3;41.4"/></circle>
<circle r="3" fill="#1d6f7d" cx="78.6" cy="85.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="78.6;294.2;294.2;78.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="85.2;54.8;54.8;85.2"/></circle>
<circle r="3" fill="#4dd4e8" cx="686.2" cy="214.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="686.2;311.0;311.0;686.2"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="214.6;48.8;48.8;214.6"/></circle>
<circle r="3" fill="#1d6f7d" cx="337.9" cy="33.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="337.9;330.1;330.1;337.9"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="33.4;45.6;45.6;33.4"/></circle>
<circle r="3" fill="#4dd4e8" cx="402.8" cy="163.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="402.8;350.2;350.2;402.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="163.6;45.4;45.4;163.6"/></circle>
<circle r="3" fill="#4dd4e8" cx="667.8" cy="25.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="667.8;369.9;369.9;667.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="25.6;47.7;47.7;25.6"/></circle>
<circle r="3" fill="#1d6f7d" cx="137.7" cy="207.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="137.7;388.2;388.2;137.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="207.0;52.1;52.1;207.0"/></circle>
<circle r="3" fill="#1d6f7d" cx="400.4" cy="156.5"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="400.4;404.3;404.3;400.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="156.5;57.9;57.9;156.5"/></circle>
<circle r="3" fill="#4dd4e8" cx="712.5" cy="106.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="712.5;417.8;417.8;712.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="106.9;64.3;64.3;106.9"/></circle>
<circle r="3" fill="#4dd4e8" cx="759.1" cy="54.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="759.1;429.0;429.0;759.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="54.6;70.5;70.5;54.6"/></circle>
<circle r="3" fill="#4dd4e8" cx="103.4" cy="217.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="103.4;438.1;438.1;103.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="217.1;75.8;75.8;217.1"/></circle>
<circle r="3" fill="#1d6f7d" cx="567.0" cy="51.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="567.0;446.2;446.2;567.0"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="51.6;79.8;79.8;51.6"/></circle>
<circle r="3" fill="#4dd4e8" cx="175.4" cy="141.8"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="175.4;454.0;454.0;175.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="141.8;82.2;82.2;141.8"/></circle>
<circle r="3" fill="#4dd4e8" cx="633.2" cy="84.7"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="633.2;462.6;462.6;633.2"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="84.7;83.1;83.1;84.7"/></circle>
<circle r="3" fill="#4dd4e8" cx="354.3" cy="60.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="354.3;472.9;472.9;354.3"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="60.1;82.8;82.8;60.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="611.7" cy="221.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="611.7;485.4;485.4;611.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="221.6;81.9;81.9;221.6"/></circle>
<circle r="3" fill="#4dd4e8" cx="402.8" cy="21.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="402.8;500.2;500.2;402.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="21.0;80.9;80.9;21.0"/></circle>
<circle r="3" fill="#4dd4e8" cx="641.6" cy="72.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="641.6;517.3;517.3;641.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="72.6;80.7;80.7;72.6"/></circle>
<circle r="3" fill="#1d6f7d" cx="713.0" cy="118.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="713.0;535.8;535.8;713.0"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="118.4;81.9;81.9;118.4"/></circle>
<circle r="3" fill="#4dd4e8" cx="91.0" cy="216.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="91.0;554.8;554.8;91.0"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="216.2;85.0;85.0;216.2"/></circle>
<circle r="3" fill="#4dd4e8" cx="629.6" cy="74.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="629.6;572.9;572.9;629.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="74.6;90.3;90.3;74.6"/></circle>
<circle r="3" fill="#4dd4e8" cx="732.4" cy="43.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="732.4;588.9;588.9;732.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="43.3;97.8;97.8;43.3"/></circle>
<circle r="3" fill="#1d6f7d" cx="610.6" cy="158.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="610.6;601.4;601.4;610.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="158.3;107.3;107.3;158.3"/></circle>
<circle r="3" fill="#1d6f7d" cx="305.1" cy="169.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="305.1;609.3;609.3;305.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="169.0;118.2;118.2;169.0"/></circle>
<text x="16" y="26" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="14" fill="#4dd4e8">S = 100.0 k·bits</text>
<text x="864" y="26" text-anchor="end" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="14" fill="#7ee2a8">dS/dt &lt; 0</text>
<text x="864" y="246" text-anchor="end" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="11" fill="#8b949e">bits sorted by visitors: 12</text>
</svg>

After

Width:  |  Height:  |  Size: 52 KiB

View file

@ -0,0 +1,120 @@
#!/usr/bin/env python3
"""Generate assets/entropy.svg — a SMIL-animated entropy-reversal field.
120 particles loop from a seeded chaos cloud into a (2,5) torus-knot
lattice, hold, and scatter back. State (bits sorted by visitors, chaos
generation) comes from state/demon.json. Stdlib only; deterministic for
a given generation so regenerated output is diffable.
"""
import hashlib
import json
import math
import os
import sys
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATE_PATH = os.path.join(ROOT, "state", "demon.json")
OUT_PATH = os.path.join(ROOT, "assets", "entropy.svg")
WIDTH, HEIGHT = 880, 260
MARGIN = 20
N_PARTICLES = 120
KNOT_R, KNOT_r = 150, 58
DUR = "11s"
KEY_TIMES = "0;0.64;0.82;1"
KEY_SPLINES = "0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1"
BG = "#010409"
BORDER = "#21262d"
CYAN = "#4dd4e8"
DEEP = "#1d6f7d"
GREEN = "#7ee2a8"
MUTED = "#8b949e"
def seeded_unit(index, generation, channel):
"""Deterministic float in [0, 1) from particle index + generation."""
digest = hashlib.sha256(f"{index}:{generation}:{channel}".encode()).digest()
return int.from_bytes(digest[:8], "big") / 2**64
def knot_points(n):
"""(2,5) torus knot sampled at n points, scaled/centered to the canvas."""
raw = []
for i in range(n):
t = 2 * math.pi * i / n
rad = KNOT_R + KNOT_r * math.cos(5 * t)
raw.append((rad * math.cos(2 * t), 0.62 * rad * math.sin(2 * t)))
xs, ys = [p[0] for p in raw], [p[1] for p in raw]
span_x, span_y = max(xs) - min(xs), max(ys) - min(ys)
scale = min((WIDTH - 2 * MARGIN) / span_x, (HEIGHT - 2 * MARGIN) / span_y)
cx, cy = (max(xs) + min(xs)) / 2, (max(ys) + min(ys)) / 2
return [
(WIDTH / 2 + (x - cx) * scale, HEIGHT / 2 + (y - cy) * scale)
for x, y in raw
]
def main():
with open(STATE_PATH) as fh:
state = json.load(fh)
bits = int(state.get("bits_sorted", 0))
generation = int(state.get("generation", 0))
entropy = max(12.7, 100 - 0.0002 * bits)
s_label = f"{entropy:.1f}"
lattice = knot_points(N_PARTICLES)
parts = [
f'<svg xmlns="http://www.w3.org/2000/svg" width="{WIDTH}" height="{HEIGHT}" '
f'viewBox="0 0 {WIDTH} {HEIGHT}" role="img" '
f'aria-label="Entropy-reversal field: S = {s_label} k-bits">',
f'<rect x="0.5" y="0.5" width="{WIDTH - 1}" height="{HEIGHT - 1}" '
f'rx="8" fill="{BG}" stroke="{BORDER}"/>',
]
for i, (lx, ly) in enumerate(lattice):
chaos_x = MARGIN + seeded_unit(i, generation, "x") * (WIDTH - 2 * MARGIN)
chaos_y = MARGIN + seeded_unit(i, generation, "y") * (HEIGHT - 2 * MARGIN)
fill = DEEP if seeded_unit(i, generation, "depth") < 0.3 else CYAN
cxv = f"{chaos_x:.1f};{lx:.1f};{lx:.1f};{chaos_x:.1f}"
cyv = f"{chaos_y:.1f};{ly:.1f};{ly:.1f};{chaos_y:.1f}"
parts.append(
f'<circle r="3" fill="{fill}" cx="{chaos_x:.1f}" cy="{chaos_y:.1f}">'
f'<animate attributeName="cx" dur="{DUR}" repeatCount="indefinite" '
f'calcMode="spline" keyTimes="{KEY_TIMES}" keySplines="{KEY_SPLINES}" '
f'values="{cxv}"/>'
f'<animate attributeName="cy" dur="{DUR}" repeatCount="indefinite" '
f'calcMode="spline" keyTimes="{KEY_TIMES}" keySplines="{KEY_SPLINES}" '
f'values="{cyv}"/>'
f'</circle>'
)
font = 'font-family="ui-monospace,SFMono-Regular,Menlo,monospace"'
parts.append(
f'<text x="16" y="26" {font} font-size="14" fill="{CYAN}">'
f'S = {s_label} k·bits</text>'
)
parts.append(
f'<text x="{WIDTH - 16}" y="26" text-anchor="end" {font} '
f'font-size="14" fill="{GREEN}">dS/dt &lt; 0</text>'
)
parts.append(
f'<text x="{WIDTH - 16}" y="{HEIGHT - 14}" text-anchor="end" {font} '
f'font-size="11" fill="{MUTED}">bits sorted by visitors: {bits}</text>'
)
parts.append("</svg>")
svg = "\n".join(parts) + "\n"
os.makedirs(os.path.dirname(OUT_PATH), exist_ok=True)
with open(OUT_PATH, "w") as fh:
fh.write(svg)
size = os.path.getsize(OUT_PATH)
print(f"wrote {OUT_PATH} ({size} bytes, S={s_label}, bits={bits}, gen={generation})")
if size > 200 * 1024:
print("error: SVG exceeds 200 KB budget", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()

264
engine/nightly.py Normal file
View file

@ -0,0 +1,264 @@
#!/usr/bin/env python3
"""Nightly telemetry refresh for the profile README.
Updates the marker-fenced sections of README.md:
FEED 4 newest Strange Quarks articles (RSS if populated, else the
server-rendered blog HTML)
STATS telemetry row with live star/repo totals
FEATURED star counts on the featured project cards
and bumps the entropy field's chaos generation so the field differs daily.
Every section is fail-safe: if a fetch or parse fails, that section is left
untouched and the script still exits 0. Stdlib only.
"""
import datetime
import html as htmllib
import json
import os
import re
import subprocess
import sys
import urllib.request
import xml.etree.ElementTree as ET
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
README = os.path.join(ROOT, "README.md")
STATE_PATH = os.path.join(ROOT, "state", "demon.json")
SITE = "https://stevenmilanese.com"
# The real feed. /feed.xml was a guess that 404'd for weeks while the HTML
# fallback silently matched nothing, so the FEED table quietly froze; it now
# also 301s here, but point at the canonical URL rather than lean on that.
FEED_URL = f"{SITE}/rss.xml"
BLOG_URL = f"{SITE}/blog"
# The site publishes read-time in its own namespace — valid for strict parsers,
# unambiguous for this one.
MANUSCRIPT_NS = "https://stevenmilanese.com/ns/manuscript"
FEATURED_REPOS = [
("anthropic-certs", "Verified Anthropic certifications — Claude, API, Claude Code CLI, MCP."),
("slTrain", "A steam locomotive for your terminal, smoke trail included."),
("meowchi-releases", "A desktop pet that evolves when you actually get work done."),
("mpl", "Mathematics Programming Language — write the equation, run the equation."),
]
def fetch(url, accept=None):
req = urllib.request.Request(url, headers={"User-Agent": "developtheweb-nightly/1.0"})
if accept:
req.add_header("Accept", accept)
token = os.environ.get("GITHUB_TOKEN")
if token and url.startswith("https://api.github.com"):
req.add_header("Authorization", f"Bearer {token}")
with urllib.request.urlopen(req, timeout=30) as resp:
return resp.read().decode("utf-8", errors="replace")
def gh_api(path):
return json.loads(fetch(f"https://api.github.com{path}", accept="application/vnd.github+json"))
def replace_section(text, marker, body):
start, end = f"<!-- {marker}:START -->", f"<!-- {marker}:END -->"
if start not in text or end not in text:
raise ValueError(f"missing {marker} markers")
pre = text.split(start)[0]
post = text.split(end)[1]
return f"{pre}{start}\n{body}\n{end}{post}"
def articles_from_rss():
"""Primary source: the site's real feed.
The feed carries read-time in the site's own namespace, so the meta column
comes from the publisher rather than being scraped back out of a page.
"""
root = ET.fromstring(fetch(FEED_URL))
items = []
for item in root.iter("item"):
title = (item.findtext("title") or "").strip()
link = (item.findtext("link") or "").strip()
pub = (item.findtext("pubDate") or "").strip()
date = None
try:
date = datetime.datetime.strptime(pub[:16].strip(), "%a, %d %b %Y")
except ValueError:
pass
mins = (item.findtext(f"{{{MANUSCRIPT_NS}}}readingMinutes") or "").strip()
meta = f"{mins} min read" if mins.isdigit() else ""
if title and link:
items.append({"title": title, "url": link, "date": date, "meta": meta})
return items
def articles_from_html():
"""Fallback: parse the blog index.
Written against the Manuscript's markup, which is regular enough not to
need heuristics each entry is a `row` div holding one anchor and one
`meta` span:
<div class="row">
<a href="/blog/<slug>">Title</a>
<span class="meta"> JUL 28, 2025 · 19 MIN </span>
</div>
The previous version looked for a thumbnail `alt=` attribute and a
Title-Case date. The redesign has neither no feature images on the index
and uppercase abbreviated months so it matched nothing and silently
returned an empty list for weeks.
"""
page = fetch(BLOG_URL)
skip = ("/blog/tag/", "/blog/author/")
articles, seen = [], set()
row_re = re.compile(
r'<a[^>]+href="(/blog/[a-z0-9][a-z0-9-]*)"[^>]*>(.*?)</a>'
r'.{0,400}?<span[^>]*class="meta"[^>]*>(.*?)</span>',
re.S,
)
for m in row_re.finditer(page):
slug, raw_title, raw_meta = m.group(1), m.group(2), m.group(3)
if slug.startswith(skip) or slug in seen:
continue
title = htmllib.unescape(re.sub(r"<[^>]+>", "", raw_title)).strip()
meta_text = htmllib.unescape(re.sub(r"<[^>]+>", " ", raw_meta))
meta_text = re.sub(r"\s+", " ", meta_text).strip()
# "JUL 28, 2025" — uppercase, abbreviated month.
date_m = re.search(r"([A-Za-z]{3,}) (\d{1,2}), (\d{4})", meta_text)
if not (title and date_m):
continue
month, day, year = date_m.groups()
date = None
for fmt in ("%b %d %Y", "%B %d %Y"):
try:
date = datetime.datetime.strptime(f"{month.title()} {day} {year}", fmt)
break
except ValueError:
continue
if date is None:
continue
mins_m = re.search(r"(\d+)\s*MIN", meta_text, re.I)
seen.add(slug)
articles.append({
"title": title,
"url": f"{SITE}{slug}",
"date": date,
"meta": f"{mins_m.group(1)} min read" if mins_m else "",
})
return articles
def update_feed(text):
articles = []
try:
articles = articles_from_rss()
except Exception as exc:
print(f"::warning title=nightly FEED rss::rss unusable ({exc}); falling back to html")
if not articles:
print("::warning title=nightly FEED fallback::rss yielded nothing; scraping /blog")
articles = articles_from_html()
dated = [a for a in articles if a["date"]]
dated.sort(key=lambda a: a["date"], reverse=True)
newest = dated[:4]
if len(newest) < 4:
raise ValueError(f"only {len(newest)} parseable articles")
rows = ["| Article | |", "|:---|---:|"]
for a in newest:
title = a["title"].replace("|", "\\|")
when = a["date"].strftime("%b %d, %Y").replace(" 0", " ")
meta = f"{when} · {a['meta']}" if a["meta"] else when
rows.append(f"| [{title}]({a['url']}) | {meta} |")
return replace_section(text, "FEED", "\n".join(rows))
def update_stats(text):
repos = gh_api("/users/developtheweb/repos?per_page=100&type=owner")
public = [r for r in repos if not r["private"]]
stars = sum(r["stargazers_count"] for r in public)
line = (
"<div align=\"center\">\n\n"
"`10¹⁰⁶ yr until heat death — the deadline` · "
"`2.9 zJ of order per bit sorted (kT ln 2, 300 K)` · "
f"`★ {stars} stars across {len(public)} public repos`\n\n"
"</div>"
)
return replace_section(text, "STATS", line)
def update_featured(text):
cards = []
for name, blurb in FEATURED_REPOS:
repo = gh_api(f"/repos/developtheweb/{name}")
cards.append(
f'<td width="50%" valign="top">\n'
f'<h3 align="center"><a href="{repo["html_url"]}">{name}</a></h3>\n'
f'<p align="center"><code>★ {repo["stargazers_count"]}</code></p>\n'
f'<p align="center">{blurb}</p>\n'
f'</td>'
)
table = (
'<div align="center">\n<table>\n'
f'<tr>\n{cards[0]}\n{cards[1]}\n</tr>\n'
f'<tr>\n{cards[2]}\n{cards[3]}\n</tr>\n'
'</table>\n</div>'
)
return replace_section(text, "FEATURED", table)
def bump_entropy():
with open(STATE_PATH) as fh:
state = json.load(fh)
state["generation"] += 1
with open(STATE_PATH, "w") as fh:
json.dump(state, fh, indent=2)
fh.write("\n")
subprocess.run(
[sys.executable, os.path.join(ROOT, "engine", "generate_entropy_svg.py")],
check=True,
)
def warn(label, exc):
"""Fail-safe, but never quiet.
Every section still degrades to 'leave it alone and exit 0' a broken
fetch must not wedge the profile. What changed is visibility: a section
that stops updating now announces itself as a GitHub Actions warning
annotation, which surfaces in the run summary instead of scrolling past in
a log nobody opens. The FEED table sat frozen for 37 days precisely
because a silent skip and a successful run looked identical.
"""
print(f"::warning title=nightly {label} skipped::{label} left untouched — {exc}")
print(f"{label}: left untouched ({exc})", file=sys.stderr)
def main():
with open(README) as fh:
text = fh.read()
failures = 0
for label, fn in (("FEED", update_feed), ("STATS", update_stats), ("FEATURED", update_featured)):
try:
text = fn(text)
print(f"{label}: updated")
except Exception as exc:
failures += 1
warn(label, exc)
with open(README, "w") as fh:
fh.write(text)
try:
bump_entropy()
print("ENTROPY: regenerated")
except Exception as exc:
failures += 1
warn("ENTROPY", exc)
if failures:
print(f"::warning title=nightly incomplete::{failures} of 4 sections did not update")
if __name__ == "__main__":
main()

6
state/demon.json Normal file
View file

@ -0,0 +1,6 @@
{
"bits_sorted": 12,
"generation": 52,
"demons": 1,
"last_sorted_at": "2026-07-08T02:02:03+00:00"
}