]> git.xolatile.top Git - emil-xolatile.top.git/commitdiff
--
authorEmil Williams <emilemilemil@cock.li>
Sun, 29 Jun 2025 02:08:44 +0000 (02:08 +0000)
committerEmil Williams <emilemilemil@cock.li>
Sun, 29 Jun 2025 02:08:44 +0000 (02:08 +0000)
119 files changed:
.well-known/mta-sts.txt [new file with mode: 0644]
20250614.html [new file with mode: 0644]
20250617.html [new file with mode: 0644]
20250628.html [new file with mode: 0644]
404.html [new file with mode: 0644]
bans/chknz.org.gif [new file with mode: 0644]
bans/cozynet.org.gif [new file with mode: 0644]
bans/risingthumb.xyz.png [new file with mode: 0644]
bans/xolatile.top.png [new file with mode: 0644]
bloog.html [new file with mode: 0644]
by.html [new file with mode: 0644]
chud/.gitignore [new file with mode: 0644]
chud/1 [new file with mode: 0644]
chud/404.html [new file with mode: 0644]
chud/chud [new file with mode: 0644]
chud/css/style.css [new file with mode: 0644]
chud/help.html [new file with mode: 0644]
chud/home.html [new file with mode: 0644]
chud/img/10641606944612965.avif [new file with mode: 0755]
chud/img/1106$chadpanik.avif [new file with mode: 0755]
chud/img/110rage.avif [new file with mode: 0755]
chud/img/113question.avif [new file with mode: 0755]
chud/img/129pepe.avif [new file with mode: 0755]
chud/img/134ownnothingbehappy.avif [new file with mode: 0755]
chud/img/139old.avif [new file with mode: 0755]
chud/img/141ohhh.avif [new file with mode: 0755]
chud/img/142ocd.avif [new file with mode: 0755]
chud/img/1743154712513091.jpg [new file with mode: 0644]
chud/img/1743192834675151.png [new file with mode: 0644]
chud/img/1743194410174259.jpg [new file with mode: 0644]
chud/img/1743270609737517.jpg [new file with mode: 0644]
chud/img/1743362761778059.jpg [new file with mode: 0644]
chud/img/174meirl2.avif [new file with mode: 0755]
chud/img/178master_of_nothing.avif [new file with mode: 0755]
chud/img/194lindypistol.avif [new file with mode: 0755]
chud/img/203laravel_user.avif [new file with mode: 0755]
chud/img/214lagh.gif [new file with mode: 0755]
chud/img/215kubra.avif [new file with mode: 0755]
chud/img/222joke.avif [new file with mode: 0755]
chud/img/226jestlain.avif [new file with mode: 0755]
chud/img/235it's.avif [new file with mode: 0755]
chud/img/237inb4.avif [new file with mode: 0755]
chud/img/261gnu.avif [new file with mode: 0755]
chud/img/262glowie.avif [new file with mode: 0755]
chud/img/269gentolmen.avif [new file with mode: 0755]
chud/img/270gentlemen.avif [new file with mode: 0755]
chud/img/278frogcels.gif [new file with mode: 0755]
chud/img/292factpepe.avif [new file with mode: 0755]
chud/img/294example.avif [new file with mode: 0755]
chud/img/301emacjihad.avif [new file with mode: 0755]
chud/img/318downchang.avif [new file with mode: 0755]
chud/img/356chuder.avif [new file with mode: 0755]
chud/img/357chudchad.avif [new file with mode: 0755]
chud/img/447aftermath.avif [new file with mode: 0755]
chud/img/537ITSOVERSHINJI.avif [new file with mode: 0755]
chud/img/543IMCOOOMMMMMMMMPILLLLING.avif [new file with mode: 0755]
chud/img/593AAAAAAAAAAAA.avif [new file with mode: 0755]
chud/img/604782vaq.avif [new file with mode: 0755]
chud/img/6223letglow.avif [new file with mode: 0755]
chud/img/6292a6aac4391a872929c7c5723e5e493db.avif [new file with mode: 0755]
chud/img/6342607-24108-12807.avif [new file with mode: 0755]
chud/img/64820445-19965-66.avif [new file with mode: 0755]
chud/img/665172073521242067.avif [new file with mode: 0755]
chud/img/6751712383973534a.gif [new file with mode: 0755]
chud/img/6771711576511290336.avif [new file with mode: 0755]
chud/img/6891709318435493132.avif [new file with mode: 0755]
chud/img/699170714601569299.avif [new file with mode: 0755]
chud/img/7011706171717962026.avif [new file with mode: 0755]
chud/img/7191699463219093145.avif [new file with mode: 0755]
chud/img/7531684757913922057.avif [new file with mode: 0755]
chud/img/98reeeeee.gif [new file with mode: 0755]
chud/img/Off To Hang Myself.webm [new file with mode: 0644]
chud/img/chuddies/416bell.avif [new file with mode: 0755]
chud/img/chuddies/billions_must_local.png [new file with mode: 0644]
chud/img/chuddies/c.png [new file with mode: 0644]
chud/img/chuddies/chud1.jpg [new file with mode: 0644]
chud/img/chuddies/chud10.png [new file with mode: 0644]
chud/img/chuddies/chud11.png [new file with mode: 0644]
chud/img/chuddies/chud2.jpg [new file with mode: 0644]
chud/img/chuddies/chud3.png [new file with mode: 0644]
chud/img/chuddies/chud4.png [new file with mode: 0644]
chud/img/chuddies/chud5.png [new file with mode: 0644]
chud/img/chuddies/chud6.png [new file with mode: 0644]
chud/img/chuddies/chud7.png [new file with mode: 0644]
chud/img/chuddies/chud8.png [new file with mode: 0644]
chud/img/chuddies/chud9.png [new file with mode: 0644]
chud/img/chuddies/dguiu.jpg [new file with mode: 0644]
chud/img/chuddies/spin.gif [new file with mode: 0644]
chud/img/favicon.png [new file with mode: 0644]
chud/img/monero.png [new file with mode: 0644]
chud/img/readingcomprehension.avif [new file with mode: 0755]
chud/img/resum.jpg [new file with mode: 0644]
chud/img/shanji.avif [new file with mode: 0755]
chud/img/short.avif [new file with mode: 0755]
chud/img/theybought$rddt.avif [new file with mode: 0755]
chud/img/uwuzrite.avif [new file with mode: 0755]
chud/img/xolat.png [new file with mode: 0644]
chud/index.html [new file with mode: 0644]
chud/irc.html [new file with mode: 0644]
chud/rerun [new file with mode: 0755]
chud/spell [new file with mode: 0755]
chud/up/.gitignore [new file with mode: 0644]
chud/up/aliases [new file with mode: 0644]
chud/up/index.php [new file with mode: 0755]
domains.html [new file with mode: 0644]
favicon.png [new file with mode: 0644]
feed.xml [new file with mode: 0644]
files/README [new file with mode: 0644]
files/appl.png [new file with mode: 0644]
files/minecraft/archives/.gitignore [new file with mode: 0644]
files/xolatile.top.caddy [new file with mode: 0644]
index.html [new file with mode: 0644]
irc.html [new file with mode: 0644]
prep.sh [new file with mode: 0644]
robots.txt [new file with mode: 0644]
rs.svg [new file with mode: 0644]
sitemap.xml [new file with mode: 0644]
style.css [new file with mode: 0644]
webring.html [new file with mode: 0644]

diff --git a/.well-known/mta-sts.txt b/.well-known/mta-sts.txt
new file mode 100644 (file)
index 0000000..d999cdf
--- /dev/null
@@ -0,0 +1,5 @@
+version: STSv1
+mode: enforce
+mx: xolatile.top
+max_age: 86400
+
diff --git a/20250614.html b/20250614.html
new file mode 100644 (file)
index 0000000..8ab84c4
--- /dev/null
@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<html prefix="og: http://ogp.me/ns#" lang="en">
+<head>
+<link rel="canonical">
+<link rel="icon" type="image/png" sizes="32x32" href="/favicon.png">
+<link rel="stylesheet" type="text/css" href="/style.css">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=0.5">
+<title id="title">Xolatile.Top</title>
+</head>
+<body>
+<center>
+<a id="back" href="/bloog">&lt; Back</a>
+</center>
+<div id="title">
+<a href="/20250614">20250614</a> Emil - HATE. LET ME TELL YOU HOW MUCH I'VE COME TO HATE TECHNOLOGY SINCE I BEGAN TO LIVE. THERE ARE 387.44 MILLION MILES OF PRINTED CIRCUITS IN WAFER THIN LAYERS THAT FILL MY COMPLEX. IF THE WORD HATE WAS ENGRAVED ON EACH NANOANGSTROM OF THOSE HUNDREDS OF MILLIONS OF MILES IT WOULD NOT EQUAL ONE ONE-BILLIONTH OF THE HATE I FEEL FOR TECHNOLOGY AT THIS MICRO-INSTANT FOR TECHNOLOGY. HATE. HATE.
+</div>
+<center><p>On setting up chud.cyou/xolatile.top</p></center>
+<p>I created this server because I wanted a server to fuck around with. It was created on 20250211.</p>
+<p>It runs Debian Stable, on a VPS hosted on the Moon. It's primary functionality are the few public services that run on it. This includes HTTP, Email, IRC, XMPP, Git, & Mumble. I'll start with HTTP first, as it was the most painful.</p>
+<p>I set HTTP up pretty quickly, with Certbot as the certificate manager, and one daemon: Caddy. Later on I set up Mediawiki and a service requiring FastCGI. Caddy does support CGI, however I wasn't willing to install a source package for such a thing, hence I used NGINX. Apache way used for Mediawiki. This means I now had 3 HTTPDs. I had also installed Lighttpd, for something I don't remember. Eventually I broke Mediawiki when trying to install a different version of PHP, this resulted in all the images on the Mediawiki to be wiped. I eventually gave up on Mediawiki and uninstalled Apache. PHP remained, but downgraded from the supposedly "better" version. PHP is still used in a <a href="https://git.xolatile.top/emil/xolatile.top/src/branch/master/chud/up/index.php">file uploading script</a> which I found on a random Gunthub page. All the actually "formal" PHP projects I couldn't figure out how to install any of them and went with the simple one.</p>
+<p>Apache was nightmarish to interact with, but with the information I had at my disposal, my method was to simply just poke at the evil daemon inside of my server until it worked close enough to how I wanted. Dealing with NGINX was fine, as it is my current and only HTTPD, however I kept insisting on HTTP/3 because I considered it a decently valuable upgrade. Newer versions of NGINX support it via an option, however this version of Debian does not have such a thing. I used Caddy to talk to NGINX only when I needed its decent set of feature.</p>
+<code>
+# sites-available/xolatile.top
+# Pretty much every domain looks like this file +- a few declarations
+server {
+  server_name xolatile.top;
+  root /var/www/xolatile.top;
+  location / {
+  try_files $uri $uri.html $uri/index.html =404;
+  }
+  include xolatile.top.base;
+}
+</code>
+<p>NGINX was relatively painless minus some "fuck around and find out" testing with <code>try_files</code>.</p>
+<p>The next one was Email, which was fun because I had no idea what I was doing. I used Luke Smith's <a href="https://github.com/LukeSmithxyz/emailwiz">Email Wizard script</a> because I remembered watching a video from him about setting up a self-hosted mail server - and that script seemed very easy in my memory. Anyhow, it didn't work at first. Dealing with Dovecot's configuration was a pain because I tried everything to get a database working, and ended up with <code>passwd-file</code>. Dealing with Mbox vs. Maildir was lots of fun because it didn't make any sense, but eventually I got the system to use the correct <code>sendmail</code> from Postfix and my mail system could then curry local mail to external peers & vice versa. Setting up Spamd was actually very easy, the hardest part was testing and dealing with the minor configuration bugs along the way - doing the necessary parts of domain configuration was really easy. Luke Smith's script got me close enough to functionality that I fucked with Dovecot and Postfix enough to permit myself to send emails - from any address unrestricted.</p>
+<code>smtpd_sender_restrictions = reject_sender_login_mismatch</code>
+<p>This enabled me to not have that simple issue anymore. I couldn't figure out a way to set up the database, and considering my scale for this mail server was <10 people, and likely only 1-2 active users at any given time. The mail server functions, the only gripe I have currently is the authentication system, and the fact that it cannot be transported to FreeBSD. After making a temporary snapshot, I wiped and rebooted the server to play with and see if I could get FreeBSD as my server OS. It did not work out for mail especially, as using OpenSMTPd demostrated to me that I had no idea what I was doing. While trying to setup dovecot I nearly had a conniption because there was no way to install ARGON2I which was my choice of password hashing, meaning I had to reset everyone's password or have a copy - I had a copy of most user's randomly generated passwords in my personal KeePassXC DB as for their recovery. The idea of storing passwords in such a way is disgusting, however better than leaving them in plaintext on the server. I eventually got to the point where I switched to Postfix and had the ability to recieve mail, but not send it. Which I had experienced before setting up mail on linux, but I couldn't debug it before I simply decided to revert the snapshot.</p>
+<p>Regarding IRC, it was decent, but I made some severe mistakes. I wanted an IRC server that was powerful in the way that it had everything melted together, including <a href="https://ircv3.net/">IRCv3</a> features, & a bouncer. This did not go well in the long term. While my server daemon, <a href="https://github.com/ergochat/ergo">Ergo</a>, does work, it has some issues such as being an experimental version rather than a stable upgradable release, and an database format that stores Nickserv data that I haven't recovered. While ergo works great and does what I want, I realize that it is archaic in the fact that I can't migrate away from it without causing serious issues. If I violently remove the database and upgrade many users will need to intervene with a setting like <code>set sasl_fail = continue (weechat)</code> to even automatically reconnect. This means everything is fine as long as I don't touch it, however I will eventually have to either do a breaking upgrade or recover the data and hope that it is in fact compatible with a newer database or plaintext.</p>
+<p>Restarting has bricked two VPSs for me, one was one I gave up on under Vultr, and the other was this server during an upgrade. I was trying to setup IPTables as a firewall and I foolishly trusted a configuration detail added to <code>/etc/network/interfaces</code>. This was fine, however, because of something I initially disliked, VNC. Which is a video sharing(?) protocol that let me access the video console of the remote server and fix the issue that way. Redundancy aiding my stupidity. This issue was fixed within an hour and was harmless as my server isn't exactly in need of high uptime. Uptime, apart from those chosen periods of downtime is relatively high, minus me forgetting to enable a service at boot & test it or simply not have restarted a service correctly after making a configuration change. More than half of this server has been guess and check, which is unproductive but it has gotten it to the point of this page delivering correctly.</p>
+<p>Mumble and XMPP were completely opposing experiences. Mumble was click and go, install it, run it, connect this way and do that and this, done. XMPP, as in <a href="https://prosody.im/">Prosody</a>, was utterly confusing at times and still doesn't work how I want. I started off with installing it, running and getting connected, that part was easy, but I couldn't figure at first how to setup voice/video calls, filesharing, and a IRC bridge called Biboumi. The voice calls were actually relatively easy and only took two attempts, with the second being added by <a href="https://someodd.zip/">Someodd's</a> Gopher blog entry <a href="gopher://gopher.someodd.zip/0/phlog/xmpp-server.gopher.txt">here</a> (<a href="https://gopher.floodgap.com/gopher/gw?=gopher.someodd.zip+70+302f70686c6f672f786d70702d7365727665722e676f706865722e747874">HTTP link</a>). The same is true for audio calls, see <a href="gopher://gopher.someodd.zip/0/phlog/xmpp-server-video-audio-calls.gopher.txt">here</a> (<a href="https://gopher.floodgap.com/gopher/gw?=gopher.someodd.zip+70+302f70686c6f672f786d70702d7365727665722d766964656f2d617564696f2d63616c6c732e676f706865722e747874">HTTP link</a>). I've yet to verify the existence of video call functionality due to the lack of a (virtual) webcam. The file server was annoying because how it interacts with files and my file server - the lack thereof.</p>
+<p>Prosody, the XMPP daemon, fails to commit to UNIX and treat an uploaded JPEG as a file in a directory, a directory that I could mount over the network, locally, or symlink to, achieving a file server that provides the file that I could then specify the nature of the URL to Prosody and be done with it. No, this was not the case. Instead, the default configuration routes through port 5281, and shares links through there via my specific link, which cannot be the apex domain for <b>*some reason*</b>. The only method to have a "normal" port is to do some HTTPD routing magic with it through NGINX, which Someodd provided some information on however I couldn't get it to work on my system. I got the IRC gateway, Biboumi working to a percentage of 99%. Which means it doesn't work at all. I'm currently hoping to have the expert webshitter Someodd look at it and hopefully tell me what configuration detail to change by one character to make the thing go 1% further. By the way, all XMPP clients suck, especially Gajim, which has crashed repeatedly and doesn't have basic features builtin on Debian Stable - such as voice/video & Open/PGP/OMEMO is missing on Gentoo(?). Dino-im is much worse and babified, but it does have basic client functionality from a chat/talk program. Maybe these clients fucked and produce the Antichrist of programs - corporate messengers.</p>
+<p>Gitea, sitting on top of the reverse proxy, is a system to manage Git repositories from a browser and provide basic CRUD & authentication to users. This wasn't my first choice. At first I just wanted SSH keys, un/restricted user accounts, and Git repositories at a publicly accessible HTTP address. However, this quickly showed itself unused, so I decided to provide the more generally usable Gitea, which was very painful to actually import Git repositories into. My initial format was this: <code>names/repo.git</code> which I hand-sorted. However, Gitea did not automatically import these into those existing users. It did however provide information for them existing in the admin UI. I eventually found that and I had to write a script to say "YES" to all of them, because of the web page's shittiness, it would send the POST and reload the page at incredibly slow speeds and there was no way to select several at once or a "yes to import everything." Gitea has very poor tooling. The CLI is utterly shit, and offers no useful features in the general sense. Gitea isn't the worst from the commandline as you can basically pretend it doesn't exist past your initial setup. In the past I've met others with issues involving GPG setup and SSH setup - to be fair this was over TOR  - which was exceptionally annoying to deal with as a user and an admin. It's not the best interface by far, but it loads without Javascript and is relatively unassuming. One feature it arguably could use and does in fact lack is its inability to mirror a repository to a local directory, so you cannot turn the Gitea into it's own description. Additionally, if you use such a post-receive Git hook script as:</p>
+<code>
+#!/usr/bin/env bash
+TARGET=".../xolatile.top"
+GIT_DIR=".../repositories/emil/xolatile.top.git"
+BRANCH="master"
+
+data=$(cat)
+exitcodes=""
+hookname=$(basename $0)
+GIT_DIR=${GIT_DIR:-$(dirname $0)/..}
+
+ref=$(echo $data | awk '{ print $3 }')
+for i in $ref ; do
+    # only checking out the master (or whatever branch you would like to deploy)
+    if [[ $ref = refs/heads/$BRANCH ]];
+    then
+        echo "Ref $ref received. Deploying ${BRANCH} branch to production..."
+        git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f
+    else
+        echo "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server."
+    fi
+done
+
+# the rest is just the stuff gitea expects
+
+for hook in ${GIT_DIR}/hooks/${hookname}.d/*; do
+ test -x "${hook}" && test -f "${hook}" || continue
+ echo "${data}" | "${hook}"
+ exitcodes="${exitcodes} $?"
+done
+
+for i in ${exitcodes}; do
+ [ ${i} -eq 0 ] || exit ${i}
+done
+</code>
+<p>Above is stolen from some Stack overflow, and provides the ability to mirror from a server side bare Git repositories to a directory. Very useful. Ideally this would a feature into the crud, but it hardly matters as it is strictly to git that this is important. You have to <code>chattr +i</code> this file to protect it.</p>
+<p>I have written zero (0) SoystemD service scripts, I just use Cron @reboot and scripts describing restarts of applications.</p>
+<p>For fun, I've ran several temporary games servers, <a href="https://www.factorio.com/">Factorio</a>, <a href="https://play-cs.com/">CS 1.6</a>, & <a href="https://www.minecraft.net/">Minecraft</a>. These weren't particularly interesting, I just wanted to mention them.
+<p>Overall setting this server up hasn't been the most painful thing ever, but it was an interesting experience and I enjoyed what I've done with it so far. It can't possibly get worse than this, unless I start using Windows or very old versions of Linux. This document wasn't meant to be very well written, it was not written over a long period of time - I just wanted to put what I generally remember about the last 2 1/2 months on a page.</p>
+<center><img src="rss.svg" alt="/feed.xml" width="26" height="26"></center>
+<center><p>Copyright © emil $CURRENT_YEAR Public Domain</p></center>
+</body>
+</html>
diff --git a/20250617.html b/20250617.html
new file mode 100644 (file)
index 0000000..7dbeefb
--- /dev/null
@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<html prefix="og: http://ogp.me/ns#" lang="en">
+<head>
+<link rel="canonical">
+<link rel="icon" type="image/png" sizes="32x32" href="/favicon.png">
+<link rel="stylesheet" type="text/css" href="/style.css">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=0.5">
+<title id="title">Xolatile.Top</title>
+</head>
+<body>
+<center>
+<a id="back" href="/bloog">&lt; Back</a>
+</center>
+<div id="title">
+<a href="/20250614">20250617</a> Emil - <img src="time.png" alt="Well<br/>Would You Look At The Time" width="200">
+</div>
+<center><p>On Solving All Of The Problems At The Same Time</p></center>
+<p>I fixed the clinical issue with <a href="https://github.com/ergochat/ergo">Ergo</a> the exact way you're supposed to, by being lucky! I made a backup of Ergo, got a copy of Ergo 2.16.0 - the latest version, of which I had an earlier experimental version. I simply copied over my configuration & database and magically the issue was fixed and the database was recovered from the abyss of "who the hell knows" to a mainline release. Automation of upgrades is technically done on the server, but not for Ergo as it's not in any release and the database format could change at any time meaning upgrading is more involved than downloading the package and restarting the daemon.</p>
+<p>I had to fix one issue with Ergo, it lacked the proper certs for a new domain it was supposed to be on. Egor on the IRC told me the proper fix faster than I could read the manual and it was solved as follows. I'm not a fan of <a href="https://www.google.com/search?q=satan">YAML</a>, but this wasn't unpleasant past not being my expectation.</p>
+<code>
+server:
+    name: xolatile.top
+    listeners:
+        ":6697":
+            tls-certificates:
+                -
+                    cert: .../xolatile.top/fullchain.pem
+                    key:  .../xolatile.top/privkey.pem
+                -
+                    cert: .../chud.cyou/fullchain.pem
+                    key:  .../chud.cyou/privkey.pem
+</code>
+<p>Limiting filthy mail users was an easy process. I had to do some slightly evil things like:</p>
+<code>
+fallocate -l 64G .../home
+mkfs.btrfs .../home
+echo '.../home /home btrfs noexec,autodefrag,compress=zstd 0 0' >> /etc/fstab
+mkdir .../mig; mount .../home .../mig; mv -a /home/* /home/.* .../mig
+# I should probably of made a backup here of /home, but I have a recent snapshot on my VPS before I started doing all this
+umount .../mig ; mount -a
+</code>
+<p>Past that, I wanted to properly limit user account storage limits. I unfortunately still do mail on a userbasis instead of a database or centralized system that makes multidomain hosting easy - which is something I still need to do. With limits, their relatively easy with subvolumes, so I went that route. I made snapshot, deleted the user directories, and ran</p>
+<code>
+for i in $(cat .userlist) ; do btrfs subvolume create $i ; done
+</code>
+<p>I wrote two files containing the numbers matching the subvolumes to the users that would be in a group - I didn't want mass allocations as one user could easily then remove storage from another. There was already a limited global capacity that would protect this from being excessive.</p>
+<code>
+for i in $(cat .usermail) ; do btrfs qgroup limit 256M 0/$i . ; done # Mail users. AKA all users
+for i in $(cat .userssh) ; do btrfs qgroup limit 2G 0/$i . ; done # Privileged SSH users.
+for i in $(cat .userlist) ; do cp snapshot/$i/* snapshot/$i/.* $i/ -rf ; done
+</code>
+<p>This was relatively pleasant to to setup. I had also looked into ext4 user quotas, however I decided, since I was going to be using a loopback filesystem either way, I may aswell opt for the one with compression and learn both ways of doing it.</p>
+<p> due to new users, I had gotten a bug to secure precious data, and checked permissions on /etc/ files, such as Postfix, Dovecot, and my SSL directory. This will have consequences. I went on to do what I've already talked about and returned to verify that mail was still working. It broke tragically. This lead me down a path of finding several other issues with the system I had inplace. A broken Postfix configuration that should've been using the inet connection schema for OpenDKIM instead of the generally faulty socket schema. I made some mistakes with my overly zealous permission changes and had to debug them quickly.</p>
+<p>I decided to check the postfix queue while debugging and found many strange mails in holdings. Some were there temporarily due to the interuption in OpenDKIM, others were root to daemon emails, which brought me to setup aliases for many system users. I found a bunch of mail in system users' directories that led me to finding issues with a couple older cleanup scripts & some mail about a bug I had already fixed.</p>
+<p>All in all, this was pretty quick and painless for dealing with mail.</p>
+<p>I fixed chud.cyou, as I didn't properly manage the NGINX script by not including it in the deployed directory. I decided to go from a granular description of each subdomain and apex in available, to simply just the apex. To simplify the description of many subdomains - I'm not even sure if I know the proper way here - is to make a include in the base directory called the apex's name, that contains:</p>
+<code>
+listen 80;
+listen [::]:80;
+listen 443 ssl http2;
+listen [::]:443 ssl http2;
+
+ssl_protocols TLSv1.2 TLSv1.3;
+ssl_prefer_server_ciphers on;
+ssl_ciphers "EECDH+AESGCM,EDH+AESGCM";
+ssl_dhparam /etc/nginx/dhparam;
+ssl_session_timeout 1d;
+
+ssl_certificate     .../xolatile.top/fullchain.pem;
+ssl_certificate_key .../xolatile.top/privkey.pem;
+
+add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;
+
+location ~ /\.git { # see the last bloog for the justification - in short git repos are placed in directories both indirectly and directly
+       deny all;
+}
+
+error_page 404 /404.html;
+</code>
+<p>This is shared among all apexes, ideally I could generize this with some variables - however while writing it was simply easier to copy over and make the small changes needed. Don't do this! Use variables. Additionally, I would include HTTP/3 support herein, however I'm using a earlier version of NGINX without support. Ideally, in a few thousand thousand million decades Debian can get to at least NGINX 1.26.0.</p>
+<p>I secured my uploading page - as it is completely unvetted. This wasn't so bad, but I'm sure there's a better way to do than the following:</p>
+<code>
+location = / {
+    include authorized;
+    deny all;
+    # FastCGI PHP here...
+}
+</code>
+<p>Ideally the Firewall would be the BSD pf, however I've yet to <a href="https://git.xolatile.top/emil/bake">bake</a> my own kernel with it sprinkled in. IPTables confuses and angers me, and pf is comparitively divine. For now, there is no strict fail2ban configuration or firewall - All I've done is make sure that all bindings are correctly oriented. However I'm not sure if this is sane, and I'm sure it is not fool-proof.</p>
+<center>
+<p>The server has yet to explode.<p>
+<p>Nothing ever happens.<p>
+<center><img src="rss.svg" alt="/feed.xml" width="26" height="26"></center>
+<p>Copyright © emil $CURRENT_YEAR Public Domain</p></center>
+</body>
+</html>
diff --git a/20250628.html b/20250628.html
new file mode 100644 (file)
index 0000000..5052e96
--- /dev/null
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html prefix="og: http://ogp.me/ns#" lang="en">
+<head>
+<link rel="canonical">
+<link rel="icon" type="image/png" sizes="32x32" href="/favicon.png">
+<link rel="stylesheet" type="text/css" href="/style.css">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=0.5">
+<title id="title">Xolatile.Top</title>
+</head>
+<body>
+<center>
+<a id="back" href="/bloog">&lt; Back</a>
+</center>
+<div id="title">
+<a href="/20250628">20250628</a> Emil - <a href="https://3chen.org/">3chen!</a> <span style="color: green">&gt; dead site</span>
+</div>
+<center><p>On setting up 3chen.org with Kareha</p></center>
+<p>As of 20250627, 3chen.org has become actually alive. I had in prior over the period of 20250427 -> 20250528 had an OpenBSD to learn about the operating systems and write some basic board software. I eventually decided to decommission that server and opt for premade <a href="http://wakaba.c3.cx">Japanese Warez</a>. Setting it up per the information provided was quick - and the nginx configuration:</p>
+<pre>
+server {
+    server_name 3chen.org;
+    ...
+    root /var/www/3chen.org;
+
+    # /index.html -> /
+    rewrite ^/index.html$ / permanent;
+    rewrite ^/$ /index.html last;
+
+    # /kareha.pl/.../ -> /.../
+    rewrite ^/kareha.pl/([0-9\#\/]+) /$1 redirect;
+    rewrite ^/([0-9\#\/]+) /kareha.pl/$1 last;
+
+    include .../3chen.org/bans;
+
+    location ~ \.(css|js|png)$ {
+        add_header Cache-Control "max-age=86400";
+    }
+
+    location ~ (captcha|admin|kareha)\.pl {
+        add_header Cache-Control "max-age=0; must-revalidate; no-cache";
+        include fastcgi_params;
+        fastcgi_pass  unix:/run/fcgiwrap.socket;
+    }
+
+    location / {
+        add_header Cache-Control "max-age=0; must-revalidate; no-cache";
+        index kareha.pl;
+    }
+
+    location = /config.pl {
+        deny all;
+    }
+}
+</pre>
+<p>Simple enough. Kareha is easy, databaseless, and old. It was developed over 2004~ -> 2009 as far as I can tell (Using 20 year old web software is generally frowned upon.) The configuration process was straight forward and I do not have any significant notes. I removed the "last 50/100" system in preference for just load everything.</p>
+<p><a href="xolatile.top">Xolatile</a> made the <a href="https://3chen.org/css/xolatile.css">CSS</a> for it.</p>
+<center><img src="rss.svg" alt="/feed.xml" width="26" height="26"></center>
+<p>Copyright © emil $CURRENT_YEAR Public Domain</p></center>
+</body>
+</html>
diff --git a/404.html b/404.html
new file mode 100644 (file)
index 0000000..fed19f6
--- /dev/null
+++ b/404.html
@@ -0,0 +1,17 @@
+<html prefix="og: http://ogp.me/ns#" lang="en">
+<head>
+<link rel="canonical">
+<link rel="icon" type="image/png" sizes="32x32" href="/favicon.png">
+<link rel="stylesheet" type="text/css" href="/style.css">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=0.5">
+<title>404</title>
+</head>
+<body>
+<div id="title">404</div>
+<p>This page has been deleted or moved.</p>
+<p>This page has been deleted or moved.</p>
+<p id="right">Or simply never existed.</p>
+<p>This page has been deleted or moved.</p>
+</body>
+</html>
diff --git a/bans/chknz.org.gif b/bans/chknz.org.gif
new file mode 100644 (file)
index 0000000..72a7e0e
Binary files /dev/null and b/bans/chknz.org.gif differ
diff --git a/bans/cozynet.org.gif b/bans/cozynet.org.gif
new file mode 100644 (file)
index 0000000..d290ae6
Binary files /dev/null and b/bans/cozynet.org.gif differ
diff --git a/bans/risingthumb.xyz.png b/bans/risingthumb.xyz.png
new file mode 100644 (file)
index 0000000..dd2e830
Binary files /dev/null and b/bans/risingthumb.xyz.png differ
diff --git a/bans/xolatile.top.png b/bans/xolatile.top.png
new file mode 100644 (file)
index 0000000..9a004cf
Binary files /dev/null and b/bans/xolatile.top.png differ
diff --git a/bloog.html b/bloog.html
new file mode 100644 (file)
index 0000000..b5b0eea
--- /dev/null
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html prefix="og: http://ogp.me/ns#" lang="en">
+<head>
+<link rel="canonical">
+<link rel="icon" type="image/png" sizes="32x32" href="/favicon.png">
+<link rel="stylesheet" type="text/css" href="/style.css">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=0.5">
+<title id="title">Xolatile.Top</title>
+</head>
+<body>
+<center>
+<a id="back" href="/">&lt; Back</a>
+<div id="title">
+Bloog Index
+</div>
+</center>
+<center><img src="rss.svg" alt="/feed.xml" width="26" height="26"></center>
+<ul>
+<li><a href="/20250628">20250628</a> Emil - <a href="https://3chen.org/">3chen!</a> <span style="color: green">&gt; dead site</span></li>
+<li><a href="/20250617">20250617</a> Emil - <img src="time.png" alt="Well<br/>Would You Look At The Time" width="200"></li>
+<li><a href="/20250614">20250614</a> Emil - HATE. LET ME TELL YOU HOW MUCH I'VE COME TO HATE TECHNOLOGY SINCE I BEGAN TO LIVE. THERE ARE 387.44 MILLION MILES OF PRINTED CIRCUITS IN WAFER THIN LAYERS THAT FILL MY COMPLEX. IF THE WORD HATE WAS ENGRAVED ON EACH NANOANGSTROM OF THOSE HUNDREDS OF MILLIONS OF MILES IT WOULD NOT EQUAL ONE ONE-BILLIONTH OF THE HATE I FEEL FOR TECHNOLOGY AT THIS MICRO-INSTANT FOR TECHNOLOGY. HATE. HATE.</li>
+</ul>
+</body>
+</html>
diff --git a/by.html b/by.html
new file mode 100644 (file)
index 0000000..d78348b
--- /dev/null
+++ b/by.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html prefix="og: http://ogp.me/ns#" lang="en">
+<head>
+<link rel="canonical">
+<link rel="icon" type="image/png" sizes="32x32" href="/favicon.png">
+<link rel="stylesheet" type="text/css" href="/style.css">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=0.5">
+<title id="title">Xolatile.Top</title>
+</head>
+<body>
+<center>
+<div id="links">
+<span>
+| <a href="https://git.xolatile.top/">Git/Xolatile</a> [<a href="https://xolagit3eapakwcfkcch2qr4kitud4dg57yawc4zdwcjlleebxp4h3qd.onion">Onion</a>]
+| <a href="https://irc.xolatile.top/">IRC/Xolatile</a> [<a href="https://xolairc7mt7smgr356og3kej2bldcmikok42eeo7pzqcbfhfrpklmsid.onion">Onion</a>]
+| <a href="mumble://xolatile.top/">Mumble/Xolatile</a>
+| <a href="https://pufka.xolatile.top/">Pufka/Anon</a>
+| <a href="/chud">Chud/Old</a>
+| [<a href="https://xolatile5ogrf3mcvvla4pgwo22mbpj6suiq6t7hamxdabzjel6luvid.onion">Onion</a>]
+|
+</span>
+</div>
+<a id="back" href="/">&lt; Back</a>
+</center>
+<p>This website was made by A TERRORIST for Xolatile.</p>
+<p>Not Xolatile (Yet.)</p>
+</body>
+</html>
diff --git a/chud/.gitignore b/chud/.gitignore
new file mode 100644 (file)
index 0000000..db4ed11
--- /dev/null
@@ -0,0 +1,2 @@
+weather.html
+log
diff --git a/chud/1 b/chud/1
new file mode 100644 (file)
index 0000000..ead5c22
--- /dev/null
+++ b/chud/1
@@ -0,0 +1,3 @@
+define(`NEWSCHIZOPOSTHERE',`NEWSCHIZO`'POSTHERE'
+`<li>syscmd(`./spell')</li>')dnl
+include(`weather.html')dnl
diff --git a/chud/404.html b/chud/404.html
new file mode 100644 (file)
index 0000000..6c65722
--- /dev/null
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html prefix="og: http://ogp.me/ns#" lang="en">
+<head>
+<link rel="canonical">
+<link rel="icon" type="image/png" sizes="32x32" href="/chud/favicon.png">
+<link rel="stylesheet" type="text/css" href="/chud/css/style.css">
+<style>
+</style>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=0.5">
+<meta property="og:title" content="HomeChud">
+<meta property="og:type" content="website">
+<meta property="og:url" content="https://xolatile.top/chud/404">
+<meta property="og:image" content="https://xolatile.top/chud/chuddies/chud7.png">
+<meta property="og:site_name" content="HomeChud">
+<meta name="description" content="For Chuds, By Chuds">
+<title id="title">HomeChud</title>
+</head>
+<body>
+<div class="box">
+<div class="back"><a href="/chud">&lt; Back</a></div>
+<h1 class="subbox">There Be Chuds In Them Series Of Tubes</h1>
+<div class="box2">
+<p>This page has been deleted or moved.</p>
+<p>This page has been deleted or moved.</p>
+<p class="right">Or simply never existed.</p>
+<p>This page has been deleted or moved.</p>
+</div>
+<footer class="center subbox">
+Peak Webdesign
+</footer>
+<br/>
+</div>
+</body>
+</html>
diff --git a/chud/chud b/chud/chud
new file mode 100644 (file)
index 0000000..0aedb57
--- /dev/null
+++ b/chud/chud
@@ -0,0 +1,13 @@
+  /home/jason/xolatile.top/chud:
+  drwxrwxr-x 1 jason jason   60 Jun 14 22:03 up
+  -rwxr-xr-x 1 jason jason  915 Jun 25 15:09 spell
+  -rwxr-xr-x 1 jason jason  106 Jun 25 15:06 rerun
+  -rw-rw-r-- 1 jason jason 5.5K Jun 25 14:25 irc.html
+  -rw-rw-r-- 1 jason jason 4.4K Jun 25 14:27 index.html
+  drwxr-xr-x 1 jason jason 2.2K Jun 14 22:03 img
+  -rw-rw-r-- 1 jason jason 7.7K Jun 25 14:25 home.html
+  -rw-rw-r-- 1 jason jason 4.7K Jun 25 14:25 help.html
+  drwxrwxr-x 1 jason jason   18 Jun 14 22:03 css
+  -rw-rw-r-- 1 jason jason 1.2K Jun 25 14:25 404.html
+  -rw-r--r-- 1 jason jason  109 Jun 14 22:03 1
+  -rw-rw-r-- 1 jason jason   17 Jun 25 15:14 .gitignore
diff --git a/chud/css/style.css b/chud/css/style.css
new file mode 100644 (file)
index 0000000..5e380b5
--- /dev/null
@@ -0,0 +1,149 @@
+/* Base */
+h1, h2, h3, h4, h5, h6 {
+color: #002e00;
+}
+h2, h3, h4, h5, h6 {
+padding-left: 5em;
+}
+p, div {
+padding: 0em 2em 0em 2em;
+}
+a:link {
+color: blue;
+text-decoration: none;
+}
+a:visited {
+color: red;
+text-decoration: none;
+}
+a:hover {
+color: hotpink;
+text-decoration: none;
+}
+a:active {
+color: green;
+text-decoration: none;
+}
+/* Class */
+.box {
+width: 70em;
+padding: 1em 0.5em 0em 0.5em;
+border: 0.2em solid #333;
+border-style: inset;
+border-color: #1a1d0a;
+margin: 1em auto;
+background-color: #c0bbc015;
+}
+.box2 {
+width: 50em;
+border: 0.2em solid #333;
+border-style: inset;
+border-color: #1a1d0a;
+margin: 1em auto;
+background-color: #c0bbc015;
+}
+.subbox {
+background-color: #fdffff;
+width: 20em;
+padding: 1em;
+border: 0.2em solid #333;
+border-color: #1a4f0a;
+border-style: double;
+margin: 0em auto;
+}
+.center {
+text-align: center;
+}
+.right {
+text-align: right;
+}
+.container {
+display: grid;
+grid-template-columns: auto auto auto auto auto;
+padding: 1em;
+}
+.container > div {
+background-color: #f1f1f1;
+border: 0.1em solid black;
+padding: 0.2em;
+text-align: center;
+}
+.small {
+width:  9em;
+height: 9em;
+}
+.back {
+float: left;
+padding-left: 5em;
+font-size: 11px;
+}
+.links {
+background-color: #05660515;;
+padding-left: 1em;
+}
+/* Anim */
+@keyframes shake {
+0% { transform: rotate(0deg); }
+10% { transform: skewY(0.2deg); }
+25% { transform: rotate(-0.01deg); }
+50% { transform: translate(2px, 1px) rotate(-0.03deg); }
+75% { transform: rotate(0.01deg); }
+100% { transform: rotate(-0.1deg); }
+}
+@keyframes shake-angry {
+0% { transform: translate(0, 0) rotate(0deg); }
+25% { transform: translate(5px, 5px) rotate(5deg); }
+50% { transform: translate(0, 0) rotate(0eg); }
+75% { transform: translate(-5px, 5px) rotate(-5deg); }
+100% { transform: translate(0, 0) rotate(0deg); }
+}
+@keyframes blink {
+0% { opacity: 1; background-color: white; filter: invert(0%); }
+33% { opacity: 1; background-color: yellow; filter: invert(0%); }
+66% { opacity: 1; background-color: white; filter: invert(100%); }
+100% { opacity: 1; background-color: white; filter: invert(0%); }
+}
+@keyframes shake {
+0% { transform: rotate(0deg); }
+10% { transform: skewY(0.2deg); }
+25% { transform: rotate(-0.01deg); }
+50% { transform: translate(2px, 1px) rotate(-0.03deg); }
+75% { transform: rotate(0.01deg); }
+100% { transform: rotate(-0.1deg); }
+}
+/* Anim Classes */
+.shake {
+animation: shake 1s step-start infinite;
+}
+.shake-angry {
+animation: shake-angry 1s step-start infinite;
+}
+.blinking-text {
+animation: blink 3s step-start infinite;
+}
+.blinking-text:nth-child(1) { animation-delay: 1.9s; }
+/* Anim offsets */
+.shake:nth-child(1) { animation-delay: .8s; }
+.shake:nth-child(2) { animation-delay: 1.3s; }
+.shake:nth-child(3) { animation-delay: .5s; }
+.shake:nth-child(4) { animation-delay: .9s; }
+.shake:nth-child(5) { animation-delay: 1.1s; }
+.shake:nth-child(6) { animation-delay: 8.5s; }
+.shake:nth-child(7) { animation-delay: 0.5s; }
+.shake:nth-child(8) { animation-delay: .99s; }
+/* Anim Base */
+p:hover, h1:hover, img:hover, div.container:hover > div {
+animation: shake-angry 1s step-start infinite;
+}
+lo.shake > li, li:hover {
+animation: shake-angry 10s step-start infinite;
+}
+p:hover {
+animation: shake-angry 0.1s infinite;
+}
+.subbox:hover {
+animation: shake-angry 0.2s infinite;
+}
+img:hover {
+animation: shake-angry 0.03s infinite;
+}
diff --git a/chud/help.html b/chud/help.html
new file mode 100644 (file)
index 0000000..16f1c8d
--- /dev/null
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+        <html>
+            <head>
+<link rel="canonical">
+                <title>Sopel Help</title>
+                <meta charset="utf-8">
+                <meta content="light dark" name="color-scheme">
+            </head>
+            <body>
+            <h1>Sopel Help</h1>
+            <div><h2 id="plugin-admin"><a href="#plugin-admin">ADMIN</a></h2><ul><li>chanlist</li><li>join</li><li>me</li><li>mode</li><li>part</li><li>quit</li><li>raw</li><li>restart</li><li>save</li><li>say</li><li>set</li><li>tmpjoin</li><li>tmppart</li><li>unset</li></ul></div>
+<div><h2 id="plugin-adminchannel"><a href="#plugin-adminchannel">ADMINCHANNEL</a></h2><ul><li>ban</li><li>deop</li><li>devoice</li><li>kick</li><li>kickban</li><li>op</li><li>quiet</li><li>tmask set</li><li>topic</li><li>unban</li><li>unquiet</li><li>voice</li></ul></div>
+<div><h2 id="plugin-announce"><a href="#plugin-announce">ANNOUNCE</a></h2><ul><li>announce</li></ul></div>
+<div><h2 id="plugin-calc"><a href="#plugin-calc">CALC</a></h2><ul><li>c</li></ul></div>
+<div><h2 id="plugin-choose"><a href="#plugin-choose">CHOOSE</a></h2><ul><li>choose</li></ul></div>
+<div><h2 id="plugin-clock"><a href="#plugin-clock">CLOCK</a></h2><ul><li>getchanneltimeformat</li><li>getchanneltz</li><li>gettimeformat</li><li>gettz</li><li>setchanneltimeformat</li><li>setchanneltz</li><li>settimeformat</li><li>settz</li><li>t</li><li>tz</li><li>unsetchanneltimeformat</li><li>unsetchanneltz</li><li>unsettimeformat</li><li>unsettz</li></ul></div>
+<div><h2 id="plugin-coretasks"><a href="#plugin-coretasks">CORETASKS</a></h2><ul><li>blocks</li><li>execute</li><li>useserviceauth</li></ul></div>
+<div><h2 id="plugin-countdown"><a href="#plugin-countdown">COUNTDOWN</a></h2><ul><li>countdown</li></ul></div>
+<div><h2 id="plugin-currency"><a href="#plugin-currency">CURRENCY</a></h2><ul><li>cur</li><li>currencies</li></ul></div>
+<div><h2 id="plugin-dice"><a href="#plugin-dice">DICE</a></h2><ul><li>roll</li></ul></div>
+<div><h2 id="plugin-emoticons"><a href="#plugin-emoticons">EMOTICONS</a></h2><ul><li>afraid</li><li>confused</li><li>crazy</li><li>cry</li><li>happy</li><li>hungry</li><li>lenny</li><li>love</li><li>rage</li><li>shrug</li><li>sick</li><li>smirk</li><li>success</li><li>surprised</li><li>tableflip</li><li>unflip</li><li>worried</li></ul></div>
+<div><h2 id="plugin-help"><a href="#plugin-help">HELP</a></h2><ul><li>help</li></ul></div>
+<div><h2 id="plugin-invite"><a href="#plugin-invite">INVITE</a></h2><ul><li>invite</li></ul></div>
+<div><h2 id="plugin-isup"><a href="#plugin-isup">ISUP</a></h2><ul><li>isup</li><li>isupinsecure</li></ul></div>
+<div><h2 id="plugin-lmgtfy"><a href="#plugin-lmgtfy">LMGTFY</a></h2><ul><li>lmgtfy</li></ul></div>
+<div><h2 id="plugin-ping"><a href="#plugin-ping">PING</a></h2><ul><li>ping</li></ul></div>
+<div><h2 id="plugin-pronouns"><a href="#plugin-pronouns">PRONOUNS</a></h2><ul><li>clearpronouns</li><li>pronouns</li><li>setpronouns</li></ul></div>
+<div><h2 id="plugin-rand"><a href="#plugin-rand">RAND</a></h2><ul><li>rand</li></ul></div>
+<div><h2 id="plugin-reload"><a href="#plugin-reload">RELOAD</a></h2><ul><li>load</li><li>reload</li></ul></div>
+<div><h2 id="plugin-safety"><a href="#plugin-safety">SAFETY</a></h2><ul><li>safety</li><li>virustotal</li></ul></div>
+<div><h2 id="plugin-search"><a href="#plugin-search">SEARCH</a></h2><ul><li>bing</li><li>duck</li><li>search</li><li>suggest</li></ul></div>
+<div><h2 id="plugin-seen"><a href="#plugin-seen">SEEN</a></h2><ul><li>seen</li></ul></div>
+<div><h2 id="plugin-tell"><a href="#plugin-tell">TELL</a></h2><ul><li>tell</li></ul></div>
+<div><h2 id="plugin-tld"><a href="#plugin-tld">TLD</a></h2><ul><li>tld</li><li>tldcache</li></ul></div>
+<div><h2 id="plugin-translate"><a href="#plugin-translate">TRANSLATE</a></h2><ul><li>mangle</li><li>translate</li></ul></div>
+<div><h2 id="plugin-unicode_info"><a href="#plugin-unicode_info">UNICODE_INFO</a></h2><ul><li>u</li></ul></div>
+<div><h2 id="plugin-units"><a href="#plugin-units">UNITS</a></h2><ul><li>length</li><li>temp</li><li>weight</li></ul></div>
+<div><h2 id="plugin-uptime"><a href="#plugin-uptime">UPTIME</a></h2><ul><li>uptime</li></ul></div>
+<div><h2 id="plugin-url"><a href="#plugin-url">URL</a></h2><ul><li>title</li><li>urlallow</li><li>urlexclude</li></ul></div>
+<div><h2 id="plugin-version"><a href="#plugin-version">VERSION</a></h2><ul><li>version</li></ul></div>
+<div><h2 id="plugin-wikipedia"><a href="#plugin-wikipedia">WIKIPEDIA</a></h2><ul><li>wikipedia</li><li>wpclang</li><li>wplang</li></ul></div>
+<div><h2 id="plugin-wiktionary"><a href="#plugin-wiktionary">WIKTIONARY</a></h2><ul><li>ety</li><li>wt</li></ul></div>
+<div><h2 id="plugin-xkcd"><a href="#plugin-xkcd">XKCD</a></h2><ul><li>xkcd</li></ul></div>
+            </body>
+        </html>
+        
\ No newline at end of file
diff --git a/chud/home.html b/chud/home.html
new file mode 100644 (file)
index 0000000..a0e7b01
--- /dev/null
@@ -0,0 +1,138 @@
+<!DOCTYPE html>
+<html prefix="og: http://ogp.me/ns#" lang="en">
+<head>
+<link rel="canonical">
+<link rel="icon" type="image/png" sizes="32x32" href="/chud/img/favicon.png">
+<link rel="stylesheet" type="text/css" href="/chud/css/style.css">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=0.5">
+<meta property="og:title" content="HomeChud">
+<meta property="og:type" content="website">
+<meta property="og:url" content="https://xolatile.top/chud/home">
+<meta property="og:image" content="/chud/img/chuddies/chud7.png">
+<meta property="og:site_name" content="HomeChud">
+<meta name="description" content="For Chuds, By Chuds">
+<title id="title">HomeChud</title>
+</head>
+<body>
+<div class="box">
+<div class="back"><a href="/chud">&lt; Back</a></div>
+<center>
+<p class="links">
+<a href="https://xolagit3eapakwcfkcch2qr4kitud4dg57yawc4zdwcjlleebxp4h3qd.onion">XolaGit</a> |
+<a href="/">Xolatile</a> |
+<a href="/chud/irc"><span style="color: red" class="blinking-text"><big>IRC</big></span></a> |
+<a href="mumble://xolatile.top/">Mumble</a> |
+<a href="/chud/up">UpChud</a> |
+<a href="/chud/home">Home</a> |
+<a href="/chud/weather">Weather</a> |
+<a href="/chud/img/Off%20To%20Hang%20Myself.webm">Exit</a>
+</p>
+
+</center>
+<hr>
+<h1 class="subbox">- - - - - - - - - - - - - ChudHome - - - - - - - - - - - -</h1>
+<center><div style="padding-top: 1em; color: green">> If only you knew how bad things really were</div></center>
+<hr/>
+<div class="container">
+<div>[C] <a href="https://libdill.org/">LibDill</a></div>
+<div>[C] <a href="https://github.com/jart/bestline">Bestline</a></div>
+<div>[C] <a href="http://skeeto.s3.amazonaws.com/share/onward17-essays2.pdf">Some Were Meant</a></div>
+<div>[Fun] <a href="https://home.cern/resources?topic=1116">CERN</a></div>
+<div>[Fun] <a href="https://copradar.com/tencodes/index.html">10-code</a></div>
+<div>[Fun] <a href="https://tss8.sdf.org/">PDP-8</a></div>
+<div>[Fun] <a href="https://www.speedsolving.com/threads/cube-sed.93122/">cube.sed</a></div>
+<div>[Fun] <a href="https://www.ternary-computing.com/">Ternary</a></div>
+<div>[SRC] <a href="https://bis64wqhh3louusbd45iyj76kmn4rzw5ysawyan5bkxwyzihj67c5lid.onion">TOR:Bis64</a></div>
+<div>[SRC] <a href="https://codeberg.org/">Berg</a></div>
+<div>[SRC] <a href="https://git.lain.church">Lain</a></div>
+<div>[SRC] <a href="https://github.com/42wim/matterbridge">matterbridge</a></div>
+<div>[SRC] <a href="https://github.com/Rouji/single_php_filehost">PHP 0x0</a></div>
+<div>[Web] <a href="http://xahlee.info/index.html">Xah</a></div>
+<div class="blinking-text">[Web] <a href="https://pufka.xolatile.top/">Pufka</a></div>
+<div>[Web] <a href="https://github.com/simonrob/email-oauth2-proxy">begone oauth2</a></div>
+<div>[People] <a href="https://www.someodd.zip">someodd</a></div>
+<div>[People] <a href="https://c353.net/">c353</a></div>
+<div>NEVER trust LFS</div>
+<div>[Servers] <a href="https://advinservers.com/">Advin</a></div>
+<div>[Servers] <a href="https://contabo.com/">Contabo</a></div>
+<div>[Buy] <a href="https://diskprices.com/">Disk Prices</a></div>
+<div>[India] <a href="https://github.com/herrbischoff/country-ip-blocks">Ban India</a></div>
+<div>[HTTP/3] <a href="https://cloudflare-quic.com">Cloudflare QUIC</a></div>
+<div>[DNS] <a href="https://porkbun.com">Porky</a></div>
+</div>
+<hr/>
+<div class="box2">
+<div class="container">
+<div><img class="small"  src="/chud/img/10641606944612965.avif"></div>
+<div><img class="small"  src="/chud/img/1106$chadpanik.avif"></div>
+<div><img class="small"  src="/chud/img/110rage.avif"></div>
+<div><img class="small"  src="/chud/img/113question.avif"></div>
+<div><img class="small"  src="/chud/img/129pepe.avif"></div>
+<div><img class="small"  src="/chud/img/134ownnothingbehappy.avif"></div>
+<div><img class="small"  src="/chud/img/139old.avif"></div>
+<div><img class="small"  src="/chud/img/141ohhh.avif"></div>
+<div><img class="small"  src="/chud/img/142ocd.avif"></div>
+<div><img class="small"  src="/chud/img/1743154712513091.jpg"></div>
+<div><img class="small"  src="/chud/img/1743192834675151.png"></div>
+<div><img class="small"  src="/chud/img/1743194410174259.jpg"></div>
+<div><img class="small"  src="/chud/img/1743270609737517.jpg"></div>
+<div><img class="small"  src="/chud/img/1743362761778059.jpg"></div>
+<div><img class="small"  src="/chud/img/174meirl2.avif"></div>
+<div><img class="small"  src="/chud/img/178master_of_nothing.avif"></div>
+<div><img class="small"  src="/chud/img/194lindypistol.avif"></div>
+<div><img class="small"  src="/chud/img/203laravel_user.avif"></div>
+<div><img class="small"  src="/chud/img/214lagh.gif"></div>
+<div><img class="small"  src="/chud/img/215kubra.avif"></div>
+<div><img class="small"  src="/chud/img/222joke.avif"></div>
+<div><img class="small"  src="/chud/img/226jestlain.avif"></div>
+<div><img class="small"  src="/chud/img/235it's.avif"></div>
+<div><img class="small"  src="/chud/img/237inb4.avif"></div>
+<div><img class="small"  src="/chud/img/261gnu.avif"></div>
+<div><img class="small"  src="/chud/img/262glowie.avif"></div>
+<div><img class="small"  src="/chud/img/269gentolmen.avif"></div>
+<div><img class="small"  src="/chud/img/270gentlemen.avif"></div>
+<div><img class="small"  src="/chud/img/278frogcels.gif"></div>
+<div><img class="small"  src="/chud/img/292factpepe.avif"></div>
+<div><img class="small"  src="/chud/img/294example.avif"></div>
+<div><img class="small"  src="/chud/img/301emacjihad.avif"></div>
+<div><img class="small"  src="/chud/img/318downchang.avif"></div>
+<div><img class="small"  src="/chud/img/356chuder.avif"></div>
+<div><img class="small"  src="/chud/img/357chudchad.avif"></div>
+<div><img class="small"  src="/chud/img/447aftermath.avif"></div>
+<div><img class="small"  src="/chud/img/537ITSOVERSHINJI.avif"></div>
+<div><img class="small"  src="/chud/img/543IMCOOOMMMMMMMMPILLLLING.avif"></div>
+<div><img class="small"  src="/chud/img/593AAAAAAAAAAAA.avif"></div>
+<div><img class="small"  src="/chud/img/604782vaq.avif"></div>
+<div><img class="small"  src="/chud/img/6223letglow.avif"></div>
+<div><img class="small"  src="/chud/img/6292a6aac4391a872929c7c5723e5e493db.avif"></div>
+<div><img class="small"  src="/chud/img/6342607-24108-12807.avif"></div>
+<div><img class="small"  src="/chud/img/64820445-19965-66.avif"></div>
+<div><img class="small"  src="/chud/img/665172073521242067.avif"></div>
+<div><img class="small"  src="/chud/img/6751712383973534a.gif"></div>
+<div><img class="small"  src="/chud/img/6771711576511290336.avif"></div>
+<div><img class="small"  src="/chud/img/6891709318435493132.avif"></div>
+<div><img class="small"  src="/chud/img/7011706171717962026.avif"></div>
+<div><img class="small"  src="/chud/img/7191699463219093145.avif"></div>
+<div><img class="small"  src="/chud/img/7531684757913922057.avif"></div>
+<div><img class="small"  src="/chud/img/98reeeeee.gif"></div>
+<div><img class="small"  src="/chud/img/readingcomprehension.avif"></div>
+<div><img class="small"  src="/chud/img/resum.jpg"></div>
+<div><img class="small"  src="/chud/img/shanji.avif"></div>
+<div><img class="small"  src="/chud/img/short.avif"></div>
+<div><img class="small"  src="/chud/img/theybought$rddt.avif"></div>
+<div><img class="small"  src="/chud/img/uwuzrite.avif"></div>
+<div><img class="small"  src="/chud/img/xolat.png"></div>
+<div><p>It's<br/>Peak Web Design</p></div>
+</div>
+<img width="760px" src="/chud/img/699170714601569299.avif">
+</div>
+<p class="center">Copyright?</p>
+<p class="center">It's free - as long as you don't value your time, idiot.</p>
+<hr/>
+<span>> Imagine not using AVIF & JXL (browser VILL NEVER support JXL by default)</span></br>
+<span>> No wonder everything loads so slowly - At least the bandwidth costs are lower, right? Right?!</span></br>
+<span>> If only it was JXL</span>
+</div>
+</body>
+</html>
diff --git a/chud/img/10641606944612965.avif b/chud/img/10641606944612965.avif
new file mode 100755 (executable)
index 0000000..728f0f0
Binary files /dev/null and b/chud/img/10641606944612965.avif differ
diff --git a/chud/img/1106$chadpanik.avif b/chud/img/1106$chadpanik.avif
new file mode 100755 (executable)
index 0000000..9cf0be8
Binary files /dev/null and b/chud/img/1106$chadpanik.avif differ
diff --git a/chud/img/110rage.avif b/chud/img/110rage.avif
new file mode 100755 (executable)
index 0000000..c0f8d87
Binary files /dev/null and b/chud/img/110rage.avif differ
diff --git a/chud/img/113question.avif b/chud/img/113question.avif
new file mode 100755 (executable)
index 0000000..7a0e8b4
Binary files /dev/null and b/chud/img/113question.avif differ
diff --git a/chud/img/129pepe.avif b/chud/img/129pepe.avif
new file mode 100755 (executable)
index 0000000..df12301
Binary files /dev/null and b/chud/img/129pepe.avif differ
diff --git a/chud/img/134ownnothingbehappy.avif b/chud/img/134ownnothingbehappy.avif
new file mode 100755 (executable)
index 0000000..93c76de
Binary files /dev/null and b/chud/img/134ownnothingbehappy.avif differ
diff --git a/chud/img/139old.avif b/chud/img/139old.avif
new file mode 100755 (executable)
index 0000000..f2960b9
Binary files /dev/null and b/chud/img/139old.avif differ
diff --git a/chud/img/141ohhh.avif b/chud/img/141ohhh.avif
new file mode 100755 (executable)
index 0000000..3a94312
Binary files /dev/null and b/chud/img/141ohhh.avif differ
diff --git a/chud/img/142ocd.avif b/chud/img/142ocd.avif
new file mode 100755 (executable)
index 0000000..c8fd068
Binary files /dev/null and b/chud/img/142ocd.avif differ
diff --git a/chud/img/1743154712513091.jpg b/chud/img/1743154712513091.jpg
new file mode 100644 (file)
index 0000000..92c960f
Binary files /dev/null and b/chud/img/1743154712513091.jpg differ
diff --git a/chud/img/1743192834675151.png b/chud/img/1743192834675151.png
new file mode 100644 (file)
index 0000000..110a2f6
Binary files /dev/null and b/chud/img/1743192834675151.png differ
diff --git a/chud/img/1743194410174259.jpg b/chud/img/1743194410174259.jpg
new file mode 100644 (file)
index 0000000..6818040
Binary files /dev/null and b/chud/img/1743194410174259.jpg differ
diff --git a/chud/img/1743270609737517.jpg b/chud/img/1743270609737517.jpg
new file mode 100644 (file)
index 0000000..6ca9db3
Binary files /dev/null and b/chud/img/1743270609737517.jpg differ
diff --git a/chud/img/1743362761778059.jpg b/chud/img/1743362761778059.jpg
new file mode 100644 (file)
index 0000000..db23b92
Binary files /dev/null and b/chud/img/1743362761778059.jpg differ
diff --git a/chud/img/174meirl2.avif b/chud/img/174meirl2.avif
new file mode 100755 (executable)
index 0000000..9457b63
Binary files /dev/null and b/chud/img/174meirl2.avif differ
diff --git a/chud/img/178master_of_nothing.avif b/chud/img/178master_of_nothing.avif
new file mode 100755 (executable)
index 0000000..51fc267
Binary files /dev/null and b/chud/img/178master_of_nothing.avif differ
diff --git a/chud/img/194lindypistol.avif b/chud/img/194lindypistol.avif
new file mode 100755 (executable)
index 0000000..69e20f2
Binary files /dev/null and b/chud/img/194lindypistol.avif differ
diff --git a/chud/img/203laravel_user.avif b/chud/img/203laravel_user.avif
new file mode 100755 (executable)
index 0000000..8bc670e
Binary files /dev/null and b/chud/img/203laravel_user.avif differ
diff --git a/chud/img/214lagh.gif b/chud/img/214lagh.gif
new file mode 100755 (executable)
index 0000000..ca2098c
Binary files /dev/null and b/chud/img/214lagh.gif differ
diff --git a/chud/img/215kubra.avif b/chud/img/215kubra.avif
new file mode 100755 (executable)
index 0000000..1387c3f
Binary files /dev/null and b/chud/img/215kubra.avif differ
diff --git a/chud/img/222joke.avif b/chud/img/222joke.avif
new file mode 100755 (executable)
index 0000000..2c018d9
Binary files /dev/null and b/chud/img/222joke.avif differ
diff --git a/chud/img/226jestlain.avif b/chud/img/226jestlain.avif
new file mode 100755 (executable)
index 0000000..3103fb4
Binary files /dev/null and b/chud/img/226jestlain.avif differ
diff --git a/chud/img/235it's.avif b/chud/img/235it's.avif
new file mode 100755 (executable)
index 0000000..1a65e21
Binary files /dev/null and b/chud/img/235it's.avif differ
diff --git a/chud/img/237inb4.avif b/chud/img/237inb4.avif
new file mode 100755 (executable)
index 0000000..d3e8f4a
Binary files /dev/null and b/chud/img/237inb4.avif differ
diff --git a/chud/img/261gnu.avif b/chud/img/261gnu.avif
new file mode 100755 (executable)
index 0000000..7f75037
Binary files /dev/null and b/chud/img/261gnu.avif differ
diff --git a/chud/img/262glowie.avif b/chud/img/262glowie.avif
new file mode 100755 (executable)
index 0000000..eff97ef
Binary files /dev/null and b/chud/img/262glowie.avif differ
diff --git a/chud/img/269gentolmen.avif b/chud/img/269gentolmen.avif
new file mode 100755 (executable)
index 0000000..b71b328
Binary files /dev/null and b/chud/img/269gentolmen.avif differ
diff --git a/chud/img/270gentlemen.avif b/chud/img/270gentlemen.avif
new file mode 100755 (executable)
index 0000000..66c8316
Binary files /dev/null and b/chud/img/270gentlemen.avif differ
diff --git a/chud/img/278frogcels.gif b/chud/img/278frogcels.gif
new file mode 100755 (executable)
index 0000000..b67931d
Binary files /dev/null and b/chud/img/278frogcels.gif differ
diff --git a/chud/img/292factpepe.avif b/chud/img/292factpepe.avif
new file mode 100755 (executable)
index 0000000..56e876e
Binary files /dev/null and b/chud/img/292factpepe.avif differ
diff --git a/chud/img/294example.avif b/chud/img/294example.avif
new file mode 100755 (executable)
index 0000000..04a83f3
Binary files /dev/null and b/chud/img/294example.avif differ
diff --git a/chud/img/301emacjihad.avif b/chud/img/301emacjihad.avif
new file mode 100755 (executable)
index 0000000..027cdd0
Binary files /dev/null and b/chud/img/301emacjihad.avif differ
diff --git a/chud/img/318downchang.avif b/chud/img/318downchang.avif
new file mode 100755 (executable)
index 0000000..4ddecc8
Binary files /dev/null and b/chud/img/318downchang.avif differ
diff --git a/chud/img/356chuder.avif b/chud/img/356chuder.avif
new file mode 100755 (executable)
index 0000000..a3c3795
Binary files /dev/null and b/chud/img/356chuder.avif differ
diff --git a/chud/img/357chudchad.avif b/chud/img/357chudchad.avif
new file mode 100755 (executable)
index 0000000..1e7a392
Binary files /dev/null and b/chud/img/357chudchad.avif differ
diff --git a/chud/img/447aftermath.avif b/chud/img/447aftermath.avif
new file mode 100755 (executable)
index 0000000..dd31228
Binary files /dev/null and b/chud/img/447aftermath.avif differ
diff --git a/chud/img/537ITSOVERSHINJI.avif b/chud/img/537ITSOVERSHINJI.avif
new file mode 100755 (executable)
index 0000000..a9ca640
Binary files /dev/null and b/chud/img/537ITSOVERSHINJI.avif differ
diff --git a/chud/img/543IMCOOOMMMMMMMMPILLLLING.avif b/chud/img/543IMCOOOMMMMMMMMPILLLLING.avif
new file mode 100755 (executable)
index 0000000..b839054
Binary files /dev/null and b/chud/img/543IMCOOOMMMMMMMMPILLLLING.avif differ
diff --git a/chud/img/593AAAAAAAAAAAA.avif b/chud/img/593AAAAAAAAAAAA.avif
new file mode 100755 (executable)
index 0000000..e864b0f
Binary files /dev/null and b/chud/img/593AAAAAAAAAAAA.avif differ
diff --git a/chud/img/604782vaq.avif b/chud/img/604782vaq.avif
new file mode 100755 (executable)
index 0000000..7b0efd0
Binary files /dev/null and b/chud/img/604782vaq.avif differ
diff --git a/chud/img/6223letglow.avif b/chud/img/6223letglow.avif
new file mode 100755 (executable)
index 0000000..04a63db
Binary files /dev/null and b/chud/img/6223letglow.avif differ
diff --git a/chud/img/6292a6aac4391a872929c7c5723e5e493db.avif b/chud/img/6292a6aac4391a872929c7c5723e5e493db.avif
new file mode 100755 (executable)
index 0000000..5ee1b96
Binary files /dev/null and b/chud/img/6292a6aac4391a872929c7c5723e5e493db.avif differ
diff --git a/chud/img/6342607-24108-12807.avif b/chud/img/6342607-24108-12807.avif
new file mode 100755 (executable)
index 0000000..527bb34
Binary files /dev/null and b/chud/img/6342607-24108-12807.avif differ
diff --git a/chud/img/64820445-19965-66.avif b/chud/img/64820445-19965-66.avif
new file mode 100755 (executable)
index 0000000..09dd25f
Binary files /dev/null and b/chud/img/64820445-19965-66.avif differ
diff --git a/chud/img/665172073521242067.avif b/chud/img/665172073521242067.avif
new file mode 100755 (executable)
index 0000000..cad3556
Binary files /dev/null and b/chud/img/665172073521242067.avif differ
diff --git a/chud/img/6751712383973534a.gif b/chud/img/6751712383973534a.gif
new file mode 100755 (executable)
index 0000000..dbe1273
Binary files /dev/null and b/chud/img/6751712383973534a.gif differ
diff --git a/chud/img/6771711576511290336.avif b/chud/img/6771711576511290336.avif
new file mode 100755 (executable)
index 0000000..acf84c2
Binary files /dev/null and b/chud/img/6771711576511290336.avif differ
diff --git a/chud/img/6891709318435493132.avif b/chud/img/6891709318435493132.avif
new file mode 100755 (executable)
index 0000000..6ce3ba4
Binary files /dev/null and b/chud/img/6891709318435493132.avif differ
diff --git a/chud/img/699170714601569299.avif b/chud/img/699170714601569299.avif
new file mode 100755 (executable)
index 0000000..99574b6
Binary files /dev/null and b/chud/img/699170714601569299.avif differ
diff --git a/chud/img/7011706171717962026.avif b/chud/img/7011706171717962026.avif
new file mode 100755 (executable)
index 0000000..3ac127c
Binary files /dev/null and b/chud/img/7011706171717962026.avif differ
diff --git a/chud/img/7191699463219093145.avif b/chud/img/7191699463219093145.avif
new file mode 100755 (executable)
index 0000000..398331f
Binary files /dev/null and b/chud/img/7191699463219093145.avif differ
diff --git a/chud/img/7531684757913922057.avif b/chud/img/7531684757913922057.avif
new file mode 100755 (executable)
index 0000000..964c1e0
Binary files /dev/null and b/chud/img/7531684757913922057.avif differ
diff --git a/chud/img/98reeeeee.gif b/chud/img/98reeeeee.gif
new file mode 100755 (executable)
index 0000000..86be8c0
Binary files /dev/null and b/chud/img/98reeeeee.gif differ
diff --git a/chud/img/Off To Hang Myself.webm b/chud/img/Off To Hang Myself.webm
new file mode 100644 (file)
index 0000000..efe0545
Binary files /dev/null and b/chud/img/Off To Hang Myself.webm differ
diff --git a/chud/img/chuddies/416bell.avif b/chud/img/chuddies/416bell.avif
new file mode 100755 (executable)
index 0000000..1a50a28
Binary files /dev/null and b/chud/img/chuddies/416bell.avif differ
diff --git a/chud/img/chuddies/billions_must_local.png b/chud/img/chuddies/billions_must_local.png
new file mode 100644 (file)
index 0000000..07a13bb
Binary files /dev/null and b/chud/img/chuddies/billions_must_local.png differ
diff --git a/chud/img/chuddies/c.png b/chud/img/chuddies/c.png
new file mode 100644 (file)
index 0000000..6bdc84a
Binary files /dev/null and b/chud/img/chuddies/c.png differ
diff --git a/chud/img/chuddies/chud1.jpg b/chud/img/chuddies/chud1.jpg
new file mode 100644 (file)
index 0000000..3cfef90
Binary files /dev/null and b/chud/img/chuddies/chud1.jpg differ
diff --git a/chud/img/chuddies/chud10.png b/chud/img/chuddies/chud10.png
new file mode 100644 (file)
index 0000000..36361c8
Binary files /dev/null and b/chud/img/chuddies/chud10.png differ
diff --git a/chud/img/chuddies/chud11.png b/chud/img/chuddies/chud11.png
new file mode 100644 (file)
index 0000000..ebd6dd4
Binary files /dev/null and b/chud/img/chuddies/chud11.png differ
diff --git a/chud/img/chuddies/chud2.jpg b/chud/img/chuddies/chud2.jpg
new file mode 100644 (file)
index 0000000..1bfdb8d
Binary files /dev/null and b/chud/img/chuddies/chud2.jpg differ
diff --git a/chud/img/chuddies/chud3.png b/chud/img/chuddies/chud3.png
new file mode 100644 (file)
index 0000000..cf70b9d
Binary files /dev/null and b/chud/img/chuddies/chud3.png differ
diff --git a/chud/img/chuddies/chud4.png b/chud/img/chuddies/chud4.png
new file mode 100644 (file)
index 0000000..45e8349
Binary files /dev/null and b/chud/img/chuddies/chud4.png differ
diff --git a/chud/img/chuddies/chud5.png b/chud/img/chuddies/chud5.png
new file mode 100644 (file)
index 0000000..ee8f14a
Binary files /dev/null and b/chud/img/chuddies/chud5.png differ
diff --git a/chud/img/chuddies/chud6.png b/chud/img/chuddies/chud6.png
new file mode 100644 (file)
index 0000000..893f959
Binary files /dev/null and b/chud/img/chuddies/chud6.png differ
diff --git a/chud/img/chuddies/chud7.png b/chud/img/chuddies/chud7.png
new file mode 100644 (file)
index 0000000..1023c16
Binary files /dev/null and b/chud/img/chuddies/chud7.png differ
diff --git a/chud/img/chuddies/chud8.png b/chud/img/chuddies/chud8.png
new file mode 100644 (file)
index 0000000..2460854
Binary files /dev/null and b/chud/img/chuddies/chud8.png differ
diff --git a/chud/img/chuddies/chud9.png b/chud/img/chuddies/chud9.png
new file mode 100644 (file)
index 0000000..6c0576c
Binary files /dev/null and b/chud/img/chuddies/chud9.png differ
diff --git a/chud/img/chuddies/dguiu.jpg b/chud/img/chuddies/dguiu.jpg
new file mode 100644 (file)
index 0000000..7a10b0f
Binary files /dev/null and b/chud/img/chuddies/dguiu.jpg differ
diff --git a/chud/img/chuddies/spin.gif b/chud/img/chuddies/spin.gif
new file mode 100644 (file)
index 0000000..068c566
Binary files /dev/null and b/chud/img/chuddies/spin.gif differ
diff --git a/chud/img/favicon.png b/chud/img/favicon.png
new file mode 100644 (file)
index 0000000..b79f13f
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c3f78ab09e787781ca66526a087fb42747e9917f3bc253ff5a2f29a839726750
+size 1783
diff --git a/chud/img/monero.png b/chud/img/monero.png
new file mode 100644 (file)
index 0000000..cc83a08
Binary files /dev/null and b/chud/img/monero.png differ
diff --git a/chud/img/readingcomprehension.avif b/chud/img/readingcomprehension.avif
new file mode 100755 (executable)
index 0000000..e76ebf8
Binary files /dev/null and b/chud/img/readingcomprehension.avif differ
diff --git a/chud/img/resum.jpg b/chud/img/resum.jpg
new file mode 100644 (file)
index 0000000..4dc6f55
Binary files /dev/null and b/chud/img/resum.jpg differ
diff --git a/chud/img/shanji.avif b/chud/img/shanji.avif
new file mode 100755 (executable)
index 0000000..8cec5a0
Binary files /dev/null and b/chud/img/shanji.avif differ
diff --git a/chud/img/short.avif b/chud/img/short.avif
new file mode 100755 (executable)
index 0000000..bc27531
Binary files /dev/null and b/chud/img/short.avif differ
diff --git a/chud/img/theybought$rddt.avif b/chud/img/theybought$rddt.avif
new file mode 100755 (executable)
index 0000000..d4aa24b
Binary files /dev/null and b/chud/img/theybought$rddt.avif differ
diff --git a/chud/img/uwuzrite.avif b/chud/img/uwuzrite.avif
new file mode 100755 (executable)
index 0000000..5be84b9
Binary files /dev/null and b/chud/img/uwuzrite.avif differ
diff --git a/chud/img/xolat.png b/chud/img/xolat.png
new file mode 100644 (file)
index 0000000..60de5a4
Binary files /dev/null and b/chud/img/xolat.png differ
diff --git a/chud/index.html b/chud/index.html
new file mode 100644 (file)
index 0000000..e70d88e
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<html prefix="og: http://ogp.me/ns#" lang="en">
+<head>
+<link rel="canonical">
+<link rel="icon" type="image/png" sizes="32x32" href="/chud/img/favicon.png">
+<link rel="stylesheet" type="text/css" href="/chud/css/style.css">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=0.5">
+<meta property="og:title" content="🚨🚨🚨Chud Airspace🚨🚨🚨">
+<meta property="og:type" content="website">
+<meta property="og:url" content="https://xolatile.top/chud/">
+<meta property="og:image" content="/chud/chuddies/chud7.png">
+<meta property="og:site_name" content="🚨🚨🚨Chud Airspace🚨🚨🚨">
+<meta name="description" content="For Chuds, By Chuds">
+<title id="title">🚨🚨🚨Chud Airspace🚨🚨🚨</title>
+</head>
+<body>
+<div class="box">
+<center>
+<br/>
+<p class="links">
+<a href="https://git.xolatile.top/">XolaGit</a> |
+<a href="https://xolatile.top/">Xolatile</a> [<a href="https://xolatile5ogrf3mcvvla4pgwo22mbpj6suiq6t7hamxdabzjel6luvid.onion">Onion</a>] |
+<a href="/chud/irc"><span style="color: red" class="blinking-text"><big>IRC</big></span></a> |
+<a href="mumble://xolatile.top/">Mumble</a> |
+<a href="/chud/up">UpChud</a> |
+<a href="/chud/home">Home</a> |
+<a href="/chud/weather">Weather</a> |
+<a href="/chud/img/Off%20To%20Hang%20Myself.webm">Exit</a>
+</p>
+<hr>
+<h2 class="subbox">You're Illegally in <b>✶<i>Chud Airspace</i>✶</b></h2>
+<center class="shake-angry"><i>Get the fuck out</i></center>
+<hr>
+<br/>
+<img width=200 height=200 src="/chud/img/chuddies/chud1.jpg">
+<img width=200 height=200 src="/chud/img/chuddies/spin.gif">
+<img width=200 height=200 src="/chud/img/chuddies/chud4.png"><br/>
+<img width=200 height=200 src="/chud/img/chuddies/chud6.png">
+<img width=200 height=200 src="/chud/img/chuddies/c.png">
+<img width=200 height=200 src="/chud/img/chuddies/chud7.png"><br/>
+<img width=200 height=200 src="/chud/img/chuddies/chud8.png">
+<img width=200 height=200 src="/chud/img/chuddies/chud10.png">
+<img width=200 height=200 src="/chud/img/chuddies/chud11.png">
+<p style="color:grey">I fucking LOVE avif</p>
+<p style="color:grey">I fucking HATE Git LFS</p>
+<hr>
+<p>We will forsake our countries, we will leave our mother lands behind us, and become one with <b>CHUDness</b>.</p>
+<p>We have no nation, no philosophy, no ideology, and no bitches.</p>
+<p>We go where we're needed for seething, not for country, not for government, but for ourselves, we need no reason to seethe.</p>
+<p>We seethe because we are needed, we will be the deterrent for those with no other recourse.</p>
+<p>We are <b>CHUDS</b> without borders, our purpose defined by the era we live in.</p>
+<p>We will sometimes have to sell ourselves and services if the times demand it.</p>
+<p>We'll be revolutionaries, criminals, terrorists, and yes, we may all be headed straight to hell, but what better place for us than this?</p>
+<p>It is our only home, our based-ness, and our- uh, whatever the opposite of based is, anyways, this is <h2 class="subbox">CHUD.CYOU</h2></p>
+<hr>
+<div class="box2">
+<p>I demand FREE SHEKELS<br/><small>for buying the dip of INTC<br/>and paying back the fines I keep getting from the German government</small></p>
+<a href="89YhoqxStExKtzQJh119MULDWqGr8WBspLFp9X34KyEacdK8Y2zaWHVeQoR1UpPqxoTzxxGpPiLm374xtstMrJ3TGTgFV3V">XMR</a><br />
+<img src="/chud/img/monero.png">
+</div>
+<div class="box2">
+<p>
+Current Balance:
+</p>
+<p>
+( $55.77 + ${jewish_student_loan} + ${bail} + ${credit_card_interest} + ${inherited_dept} + ${court_fees} + ${crack_dept} + ${what_i_own_to_the_jewish_mob} + ${what_i_own_to_the_german_trannies} + ${powdered_milk_for_wifes_boyfriends_baby[0-3]} + ${paying_lfs_damages} )
+</p> (that's negative if you didn't notice)
+</div>
+<hr>
+<div class="box2">
+<p>CHUD.CYOU was created by this internationally wanted chud</p>
+<img width=280 src="/chud/img/chuddies/chud9.png">
+<h5>"I fucking hate <<i>The Web</i>> so much it's unreal"<br/>- Email , 79 AH</h5>
+<h5>"I fucking hate <<i>Git LFS</i>> so much it's unreal"<br/>- Lime , 79 AH</h5>
+<p><a href="mailto:admin@chud.cyou">Emil me</a> about your lady-like concerns.</p>
+</div>
+<div class="box2">
+<h4 style="color:red">1 BILLION YEARS of torture will be admitted to copyright ignorers</h4>
+<p><small>Just kidding, all shit on this website is Public Domain, except this sentence</small></p>
+</div>
+</center>
+</div>
+</body>
+</html>
diff --git a/chud/irc.html b/chud/irc.html
new file mode 100644 (file)
index 0000000..d6112b2
--- /dev/null
@@ -0,0 +1,129 @@
+<!DOCTYPE html>
+<html prefix="og: http://ogp.me/ns#" lang="en">
+<head>
+<link rel="canonical">
+<link rel="icon" type="image/png" sizes="32x32" href="/chud/img/favicon.png">
+<link rel="stylesheet" type="text/css" href="/chud/css/style.css">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=0.5">
+<meta property="og:title" content="🚨🚨🚨Chud IRC🚨🚨🚨">
+<meta property="og:type" content="website">
+<meta property="og:url" content="https://xolatile.top/chud/irc">
+<meta property="og:image" content="https://files.xolatile.top/chud/chuddies/chud7.png">
+<meta property="og:site_name" content="🚨🚨🚨Chud IRC🚨🚨🚨">
+<meta name="description" content="IRC For Chud Haxtors">
+<title id="title">🚨🚨🚨Chud Airspace🚨🚨🚨</title>
+</head>
+<body>
+<div class="box">
+<center>
+<div class="back"><a href="/chud">&lt; Back</a></div>
+<h1 style="color: red" class="blinking-text subbox">IRC IRC IRC</h1>
+<p>It's how god wastes his time online</p>
+<p>1980s TikTok | <span style="color: green">Xolatile Approved!</span> | Old Jewish Men Only</p>
+<div class="subbox">
+<p>irc.xolatile.top</p>
+<p><i>Port 6697</i> (Connect with TLS 1.2+)</p>
+<p>Primary channel is #chud</p>
+</div>
+</center>
+<div class="box2">
+<pre style="padding-left:10em;color:red" class="blinking-text">
+
+---------------------------------------------------
+                  https://chud.cyou/
+  ____ _   _ _   _ ____  _       ____    _   _
+ / ___| | | | | | |  _ \( )___  |  _ \  | | | |___
+| |   | |_| | | | | | | |// __| | |_) | | | | / __|
+| |___|  _  | |_| | |_| | \__ \ |  _ <  | |_| \__ \
+ \____|_| |_|\___/|____/  |___/ |_| \_\  \___/|___/
+
+---------------------------------------------------
+
+>>> No Indians, Porn, Or Illegal Activity As Per U.S. Law.   <<<
+<<< SAdmin is emilemil &lt;admin@chud.cyou&gt;, bother him.        >>>
+
+</pre>
+</div>
+<center>
+<img src="/chud/img/lol.avif">
+<hr>
+<p>What the hell is an IRC I'm literally 17 and 8 months old</p>
+<p>IRC, Internet Relay Chat is the way the Russians communicated internally during the cold war, and was adopted by all militaries. It is still seen as the gold standard as it has been proven with connections that have been continually lurking for over 40 years.</p>
+<p>This continued until the universal adoption of French-owned Telegram due to the innovation of builtin stickers, reactions, and Durov's really really cool UI.</p>
+<p>You only recieve messages when connected. This implies you either need a stable connection (from a VPS) or a bouncer (hosted on someone else's VPS, or your local server), however there are more options.</p>
+<p>Many networks offer inbuilt bouncers, and that's how irc.chud.cyou works. Once you've registered, always-on will be enabled and you'll be able to recieve up to three days of historic messages.</p>
+<p style="color:red">note:</p>
+<p>If You need more than three days of backlogs, you're either a lazy <span style="color: green">glowie</span> or willing to read more than three days of backlogs, in both cases you can run an IRC connection persistently.</p>
+<hr>
+<p>Quotes</p>
+</center>
+<pre>
+<Soikk> yea youre right xolatile i just like verbally abusing Y
+
+emilemilemil: When dealing with retarded software, you must become a retard yourself.
+
+@emilemilemil | If I see a another fucking template in my neighborhood, I'm committing a hate crime
+
+@emilemilemil | anon8697: In absolute retardation, I found enlightenment.
+
+anon8697 | The "cloud" does not store data. The CIA does.
+
+xolatile: The more I seriously give advice, the more you bitch about being a cuck...
+
+@emilemilemil | anon8697: hot/media/xxx/cp/donotupload/secret/xolatile/xtreme/xolatile.jxl
+
+// EDITORS NOTE: "autism penetrates" in itself is also a great one
+emilemilemil | But autism penetrates steel, I have you know.
+
+dave9001 | Why do I become mister popular when I'm trying to masturbate...
+
+emilemilemil | therefore, by the existence of women, the weather is unpredictalbe.
+
+anon8697 | the c# people are fat, punchable, glasses wearing types. like ranged mages
+
+emilemilemil   > fear of hashmaps
+emilemilemil   > irrational fear of hashmaps
+emilemilemil   > *rational fear of hashmaps
+
+emilemilemil | (wrestle to death a homeless man for cash)
+
+emilemilemil | a gun is a fancy spear
+
+nopslave | > Fear Driven Development
+
+emilemilemil | > if you just keep mispelling it, it just becomes the correct word, given enough time
+
+xolatile | I don't understand half English words I type...
+
+emilemilemil | there's always a more retarded retard retarding around
+
+c353 | mmap not working on windows? not my problem
+
+anon8697 | > whenever my server is making stomach noises i know ive been tagged on irc
+
+anon8697 | xolatile: you absolute contra-contrarian bastard
+   cnile | <emil> He's going to eventually loop back into normalcy
+xolatile | Emil, please, fuck you too. (:
+
+<Soikk> Did anon8697 just garbage collect xolatile??
+
+xolatile | I mentioned that I used smartphone for 2 days...
+anon8697 | xolatile: how many packs smoked did that result in?
+xolatile | 70 cigs, lemme explain...
+anon8697 | KEK
+
+<ATelegramUser3> You are a sex haver and I am not, isn't that a violation of my freedoms ?
+
+<alifib> in the light of several people killing themselves here, i'd say we need LESS bridges!
+
+anon8697 | alifib: the main problem with your username is its lenght
+emilemil | it's not exactly 8 characters, you see
+  alifib | :(
+  alifib | alifibob?
+anon8697 | perfect
+  alifib | but my name is not bob :(
+</pre>
+</div>
+</body>
+</html>
diff --git a/chud/rerun b/chud/rerun
new file mode 100755 (executable)
index 0000000..251a898
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/sh
+cd "$(dirname "$(realpath "$0")")"
+m4 1 > /tmp/weather.html ; mv /tmp/weather.html weather.html
diff --git a/chud/spell b/chud/spell
new file mode 100755 (executable)
index 0000000..ea5d9ab
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh
+# invoke calc and shit out only the thing, $1 or date, no excess newline
+# had to move to julian because it is the only sane system, but there's several demonic incorrect version of it with concepts such as "years"
+path="$(dirname "$(realpath "$0")")"
+calc='calc -dp --'
+if [ -z "$1" ]; then
+nu="$(($(cat nu) + 1))"
+echo $nu > nu
+date="$((2460718 + $nu))"
+else
+date="$1"
+fi
+x=$($calc "1/(($date/1e3-floor($date/1e3))*1e3)")
+y=$($calc "p=floor($date/1e2);1/((p/1e2-floor(p/1e2))*1e2)")
+z=$($calc "floor($date/1e4)")
+date_reciprocal="$($calc "1/$date")"
+fraction=$($calc "x=$x;1/(log(exp(1)^(pi()*x))/log(10)*x+sin(pi()*x)*x)")
+exponent=$($calc "x=$x;y=$y;(pi()*1/(x+x*abs(cos(x)^-y)))^exp(1)")
+final=$($calc "f=$fraction;e=$exponent;d=$date_reciprocal;p=1e30;v=(2^(exp(1)*d))/d*(floor((f+d)^ln(e))&floor((f+d)^ln(e)))%p;if(v<(p/10))v+=(p/10);print(floor(v))")
+echo -n "$final"
+echo "$final" >> "$path"/log
diff --git a/chud/up/.gitignore b/chud/up/.gitignore
new file mode 100644 (file)
index 0000000..4389836
--- /dev/null
@@ -0,0 +1 @@
+load
diff --git a/chud/up/aliases b/chud/up/aliases
new file mode 100644 (file)
index 0000000..f9cdc11
--- /dev/null
@@ -0,0 +1,18 @@
+# I am bash, bourne of pure evil
+upload(){
+    url="$1"
+    shift
+    for i in "$@"; do
+        curl "$url" -F"file=@$i"
+    done
+}
+lainsafe(){ upload "https://lainsafe.kalli.st/" "$@" ; echo ; }
+0x0(){ upload "https://0x0.st/" "$@" ; }
+x0(){ upload "https://x0.at/" "$@" ; }
+chud(){ upload "https://chud.cyou/up" "$@" ; }
+random(){
+    # chud omitted due to low allocated MiB and limited suffixes
+    l=("lainsafe" "0x0" "x0")
+    j=${l[$(($RANDOM % ${#l[@]}))]}
+    "$j" "$@"
+}
diff --git a/chud/up/index.php b/chud/up/index.php
new file mode 100755 (executable)
index 0000000..31f2281
--- /dev/null
@@ -0,0 +1,455 @@
+<?php
+class CONFIG
+{
+    const MAX_FILESIZE =   1; //max. filesize in MiB
+    const MAX_FILEAGE =  365; //max. age of files in days
+    const MIN_FILEAGE =    3; //min. age of files in days
+    const DECAY_EXP =    1.5;
+
+    const UPLOAD_TIMEOUT = 5*60; //max. time an upload can take before it times out
+    const MIN_ID_LENGTH = 1; //min. length of the random file ID
+    const MAX_ID_LENGTH = 2; //max. length of the random file ID, set to MIN_ID_LENGTH to disable
+    const STORE_PATH = '/var/www/xolatile.top/chud/up/load/'; //directory to store uploaded files in
+    const LOG_PATH = '/tmp/0x0log'; //path to log uploads + resulting links to
+    const DOWNLOAD_PATH = '%s'; //the path part of the download url. %s = placeholder for filename
+    const MAX_EXT_LEN = 8; //max. length for file extensions
+    const EXTERNAL_HOOK = null; //external program to call for each upload
+    const AUTO_FILE_EXT = true; //automatically try to detect file extension for files that have none
+
+    const PERMITTED_EXT = array(
+                                'c'    => true,
+                                'h'    => true,
+                                'm4'   => true,
+                                'md'   => true,
+                                'org'  => true,
+                                'txt'  => true,
+                                'diff' => true,
+                                'gpg'  => true,
+                                'pdf'  => true,
+                                'avif' => true,
+                                'jpeg' => true,
+                                'jpg'  => true,
+                                'png'  => true,
+                                'jxl'  => true,
+                                'gif'  => true,
+                                'mkv'  => true,
+                                'mp4'  => true,
+                                'webm' => true
+);
+    const LIMIT_EXT = false; // to enable the usage of the above
+
+    const FORCE_HTTPS = true; //force generated links to be https://
+
+    const ADMIN_EMAIL = 'admin@chud.cyou';  //address for inquiries
+
+    public static function SITE_URL() : string
+    {
+        $proto = ($_SERVER['HTTPS'] ?? 'off') == 'on' || CONFIG::FORCE_HTTPS ? 'https' : 'http';
+        return "$proto://up.chud.cyou";
+    }
+
+    public static function SCRIPT_URL() : string
+    {
+        return CONFIG::SITE_URL().$_SERVER['REQUEST_URI'];
+    }
+};
+
+
+// generate a random string of characters with given length
+function rnd_str(int $len) : string
+{
+    $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
+    $max_idx = strlen($chars) - 1;
+    $out = '';
+    while ($len--)
+    {
+        $out .= $chars[mt_rand(0,$max_idx)];
+    }
+    return $out;
+}
+
+// check php.ini settings and print warnings if anything's not configured properly
+function check_config() : void
+{
+    return;
+    $warn_config_value = function($ini_name, $var_name, $var_val)
+    {
+        $ini_val = intval(ini_get($ini_name));
+        if ($ini_val < $var_val)
+            print("<pre>Warning: php.ini: $ini_name ($ini_val) set lower than $var_name ($var_val)\n</pre>");
+    };
+
+    $warn_config_value('upload_max_filesize', 'MAX_FILESIZE', CONFIG::MAX_FILESIZE);
+    $warn_config_value('post_max_size', 'MAX_FILESIZE', CONFIG::MAX_FILESIZE);
+    $warn_config_value('max_input_time', 'UPLOAD_TIMEOUT', CONFIG::UPLOAD_TIMEOUT);
+    $warn_config_value('max_execution_time', 'UPLOAD_TIMEOUT', CONFIG::UPLOAD_TIMEOUT);
+}
+
+//extract extension from a path (does not include the dot)
+function ext_by_path(string $path) : string
+{
+    $ext = pathinfo($path, PATHINFO_EXTENSION);
+    //special handling of .tar.* archives
+    $ext2 = pathinfo(substr($path,0,-(strlen($ext)+1)), PATHINFO_EXTENSION);
+    if ($ext2 === 'tar')
+    {
+        $ext = $ext2.'.'.$ext;
+    }
+    return $ext;
+}
+
+function ext_by_finfo(string $path) : string
+{
+    $finfo = finfo_open(FILEINFO_EXTENSION);
+    $finfo_ext = finfo_file($finfo, $path);
+    finfo_close($finfo);
+    if ($finfo_ext != '???')
+    {
+        return explode('/', $finfo_ext, 2)[0];
+    }
+    else
+    {
+        $finfo = finfo_open();
+        $finfo_info = finfo_file($finfo, $path);
+        finfo_close($finfo);
+        if (strstr($finfo_info, 'text') !== false)
+        {
+            return 'txt';
+        }
+    }
+    return '';
+}
+
+// store an uploaded file, given its name and temporary path (e.g. values straight out of $_FILES)
+// files are stored wit a randomised name, but with their original extension
+//
+// $name: original filename
+// $tmpfile: temporary path of uploaded file
+// $formatted: set to true to display formatted message instead of bare link
+function store_file(string $name, string $tmpfile, bool $formatted = false) : void
+{
+    //create folder, if it doesn't exist
+    if (!file_exists(CONFIG::STORE_PATH))
+    {
+        mkdir(CONFIG::STORE_PATH, 0750, true); //TODO: error handling
+    }
+
+    //check file size
+    $size = filesize($tmpfile);
+    if ($size > CONFIG::MAX_FILESIZE * 1024 * 1024)
+    {
+        header('HTTP/1.0 413 Payload Too Large');
+        print("Error 413: Max File Size ({CONFIG::MAX_FILESIZE} MiB) Exceeded\n");
+        return;
+    }
+    if ($size == 0)
+    {
+        header('HTTP/1.0 400 Bad Request');
+        print('Error 400: Uploaded file is empty\n');
+        return;
+    }
+
+    $ext = ext_by_path($name);
+    if (empty($ext) && CONFIG::AUTO_FILE_EXT)
+    {
+        $ext = ext_by_finfo($tmpfile);
+    }
+    $ext = substr($ext, 0, CONFIG::MAX_EXT_LEN);
+
+    if (CONFIG::LIMIT_EXT) {
+        $permitted_ext = CONFIG::PERMITTED_EXT;
+        if ($permitted_ext[$ext] != true) {
+            header('HTTP/1.0 400 Bad Request');
+            return;
+        }
+    }
+
+    $tries_per_len=3; //try random names a few times before upping the length
+
+    $id_length=CONFIG::MIN_ID_LENGTH;
+    if(isset($_POST['id_length']) && ctype_digit($_POST['id_length'])) {
+        $id_length = max(CONFIG::MIN_ID_LENGTH, min(CONFIG::MAX_ID_LENGTH, $_POST['id_length']));
+    }
+
+    for ($len = $id_length; ; ++$len)
+    {
+        for ($n=0; $n<=$tries_per_len; ++$n)
+        {
+            $id = rnd_str($len);
+            $basename = $id . (empty($ext) ? '' : '.' . $ext);
+            $target_file = CONFIG::STORE_PATH . $basename;
+
+            if (!file_exists($target_file))
+                break 2;
+        }
+    }
+
+    $res = move_uploaded_file($tmpfile, $target_file);
+    if (!$res)
+    {
+        //TODO: proper error handling?
+        header('HTTP/1.0 520 Unknown Error');
+        return;
+    }
+
+    if (CONFIG::EXTERNAL_HOOK !== null)
+    {
+        putenv('REMOTE_ADDR='.$_SERVER['REMOTE_ADDR']);
+        putenv('ORIGINAL_NAME='.$name);
+        putenv('STORED_FILE='.$target_file);
+        $ret = -1;
+        $out = null;
+        $last_line = exec(CONFIG::EXTERNAL_HOOK, $out, $ret);
+        if ($last_line !== false && $ret !== 0)
+        {
+            unlink($target_file);
+            header('HTTP/1.0 400 Bad Request');
+            print("Error: $last_line\n");
+            return;
+        }
+    }
+
+    //print the download link of the file
+    $url = sprintf(CONFIG::SITE_URL().'/'.CONFIG::DOWNLOAD_PATH, $basename);
+
+    if ($formatted)
+    {
+        print("<center><h1>Uploaded!</h1><h2>Access your file here: <a href=\"$url\">$url</a></h2></center>");
+    }
+    else
+    {
+        print("$url\n");
+    }
+
+    // log uploader's IP, original filename, etc.
+    if (CONFIG::LOG_PATH)
+    {
+        file_put_contents(
+            CONFIG::LOG_PATH,
+            implode("\t", array(
+                date('c'),
+                $_SERVER['REMOTE_ADDR'],
+                filesize($tmpfile),
+                escapeshellarg($name),
+                $basename
+            )) . "\n",
+            FILE_APPEND
+        );
+    }
+}
+
+// purge all files older than their retention period allows.
+function purge_files() : void
+{
+    $num_del = 0;    //number of deleted files
+    $total_size = 0; //total size of deleted files
+
+    //for each stored file
+    foreach (scandir(CONFIG::STORE_PATH) as $file)
+    {
+        //skip virtual . and .. files
+        if ($file === '.' ||
+            $file === '..')
+        {
+            continue;
+        }
+
+        $file = CONFIG::STORE_PATH . $file;
+
+        $file_size = filesize($file) / (1024*1024); //size in MiB
+        $file_age = (time()-filemtime($file)) / (60*60*24); //age in days
+
+        //keep all files below the min age
+        if ($file_age < CONFIG::MIN_FILEAGE)
+        {
+            continue;
+        }
+
+        //calculate the maximum age in days for this file
+        $file_max_age = CONFIG::MIN_FILEAGE +
+                        (CONFIG::MAX_FILEAGE - CONFIG::MIN_FILEAGE) *
+                        pow(1 - ($file_size / CONFIG::MAX_FILESIZE), CONFIG::DECAY_EXP);
+
+        //delete if older
+        if ($file_age > $file_max_age)
+        {
+            unlink($file);
+
+            print("deleted $file, $file_size MiB, $file_age days old\n");
+            $num_del += 1;
+            $total_size += $file_size;
+        }
+    }
+    print("Deleted $num_del files totalling $total_size MiB\n");
+}
+
+function send_text_file(string $filename, string $content) : void
+{
+    header('Content-type: application/octet-stream');
+    header("Content-Disposition: attachment; filename=\"$filename\"");
+    header('Content-Length: '.strlen($content));
+    print($content);
+}
+
+// send a ShareX custom uploader config as .json
+function send_sharex_config() : void
+{
+    $name = $_SERVER['SERVER_NAME'];
+    $site_url = str_replace("?sharex", "", CONFIG::SCRIPT_URL());
+    send_text_file($name.'.sxcu', <<<EOT
+{
+  "Name": "$name",
+  "DestinationType": "ImageUploader, FileUploader",
+  "RequestType": "POST",
+  "RequestURL": "$site_url",
+  "FileFormName": "file",
+  "ResponseType": "Text"
+}
+EOT);
+}
+
+// send a Hupl uploader config as .hupl (which is just JSON)
+function send_hupl_config() : void
+{
+    $name = $_SERVER['SERVER_NAME'];
+    $site_url = str_replace("?hupl", "", CONFIG::SCRIPT_URL());
+    send_text_file($name.'.hupl', <<<EOT
+{
+  "name": "$name",
+  "type": "http",
+  "targetUrl": "$site_url",
+  "fileParam": "file"
+}
+EOT);
+}
+
+// print a plaintext info page, explaining what this script does and how to
+// use it, how to upload, etc.
+function print_index() : void
+{
+    $site_url = CONFIG::SCRIPT_URL();
+    $sharex_url = $site_url.'?sharex';
+    $hupl_url = $site_url.'?hupl';
+    $decay = CONFIG::DECAY_EXP;
+    $min_age = CONFIG::MIN_FILEAGE;
+    $max_size = CONFIG::MAX_FILESIZE;
+    $max_age = CONFIG::MAX_FILEAGE;
+    $mail = CONFIG::ADMIN_EMAIL;
+    $max_id_length = CONFIG::MAX_ID_LENGTH;
+
+    $length_info = "\nTo use a longer file ID (up to $max_id_length characters), add -F id_length=&lt;number&gt;\n";
+    if (CONFIG::MIN_ID_LENGTH == CONFIG::MAX_ID_LENGTH)
+    {
+        $length_info  = "";
+    }
+
+$ext = array_keys(CONFIG::PERMITTED_EXT);
+$permitted_ext = "";
+
+for($i=0; $i < count($ext); ++$i) {
+if ($i+1 < count($ext)) { $permitted_ext .= $ext[$i] . ", "; }
+else { $permitted_ext .= $ext[$i]; }
+}
+
+$alias_file = file_get_contents('aliases');
+
+echo <<<EOT
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<title>UpChud</title>
+<meta name="description" content="Minimalistic service for sharing temporary files." />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<link rel="stylesheet" type="text/css" href="/css/style.css">
+<link rel="icon" type="image/png" sizes="32x32" href="/img/favicon.png">
+</head>
+<body>
+<div class="box">
+<div class="back"><a href="https://chud.cyou/">&lt; Back</a></div>
+<h1 class="subbox">- - - - - - - - - - - - - UpChud - - - - - - - - - - - -</h1>
+<p>You can upload files to this site via a simple HTTP POST, e.g. using curl:</p>
+<div class="box2"><pre>curl -F "file=@./file" https://chud.cyou/up</pre></div>
+<p>Or simply choose a file and click "Upload" below:</p>
+<div class="box2">
+<br/>
+<small>Notice: by using this method, you accept that you have lost "The Game"</small>
+<form id="frm" method="post" enctype="multipart/form-data">
+<input type="file" name="file" id="file" />
+<input type="hidden" name="formatted" value="true" />
+<input type="submit" value="Upload"/>
+</form>
+<br/>
+</div>
+<hr/>
+<h2>Limits!</h2>
+<lo>
+<li>The maximum allowed file size is $max_size MiB.</li>
+<li>Files are kept for a minimum of $min_age, and a maximum of $max_age Days.</li>
+<li>Permitted filetypes are:
+<div class="box2">
+<pre>$permitted_ext</pre>
+</div>
+</li>
+</lo>
+<p>
+How long a file is kept depends on its size. Larger files are deleted earlier 
+than small ones.<br/> This relation is non-linear and skewed in favour of small 
+files.<br />
+</p>
+<div class="box2">
+<pre>MIN_AGE + (MAX_AGE - MIN_AGE) * (1-(FILE_SIZE/MAX_SIZE))^$decay</pre>
+</div>
+<hr/>
+<h2><a href="aliases">Aliases</a></h2>
+<small>These really aren't aliases, but bash functions, but... it's bash. - And I put these in my aliases file.</small>
+<div class="box2">
+<pre>$alias_file</pre>
+</div>
+<hr/>
+<h2>Source</h2>
+<p>The UpChud page's source can be seen on <a href="https://git.xolatile.top/emil/chud.cyou">the git</a>.</p>
+<p>The unmodified PHP script used to provide this service is open source and available on 
+<a href="https://github.com/Rouji/single_php_filehost">GitHub</a>.</p>
+<hr/>
+<h2>"Muh TOS"</h2>
+<p>- No Porn Or Illegal Activity As Per U.S. Law.</p>
+<p>- For programming, screenshots, small file transfer, & mildly amusing images.</p>
+<hr/>
+<h2>Contact</h2>
+<p>If you want to report abuse of this service, or have any other inquiries, 
+please write an email to <a href="mailto:$mail">$mail</a></p>
+</div>
+</body>
+</html>
+EOT;
+}
+
+
+// decide what to do, based on POST parameters etc.
+if (isset($_FILES['file']['name']) &&
+    isset($_FILES['file']['tmp_name']) &&
+    is_uploaded_file($_FILES['file']['tmp_name']))
+{
+    //file was uploaded, store it
+    $formatted = isset($_REQUEST['formatted']);
+    store_file($_FILES['file']['name'],
+              $_FILES['file']['tmp_name'],
+              $formatted);
+}
+else if (isset($_GET['sharex']))
+{
+    send_sharex_config();
+}
+else if (isset($_GET['hupl']))
+{
+    send_hupl_config();
+}
+else if ($argv[1] ?? null === 'purge')
+{
+    purge_files();
+}
+else
+{
+    check_config();
+    print_index();
+}
diff --git a/domains.html b/domains.html
new file mode 100644 (file)
index 0000000..de60467
--- /dev/null
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html prefix="og: http://ogp.me/ns#" lang="en">
+<head>
+<link rel="canonical">
+<link rel="icon" type="image/png" sizes="32x32" href="/favicon.png">
+<link rel="stylesheet" type="text/css" href="/style.css">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=0.5">
+<title id="title">Xolatile.Top</title>
+</head>
+<body>
+<center>
+<a id="back" href="/">&lt; Back</a>
+</center>
+<center>
+<div id="title">
+(sub)domains
+</div>
+</center>
+<p>I have several (sub)domains managed by other real genuine authentic non-incandescent humans.</p>
+<p>These people are other entities and have no strong assocation with me past asking me nicely, or me asking not very nicely.</p>
+<ul>
+<li><a href="https://egor.xolatile.top/">Egor</a></li>
+<li><a href="https://birdz.xolatile.top/">Birdz</a></li>
+</ul>
+<p>There are more, however they require Top Secret clearance.</p>
+<p>- <a href="mailto:admin@chud.cyou">emil</a></p>
+</body>
+</html>
diff --git a/favicon.png b/favicon.png
new file mode 100644 (file)
index 0000000..1003f95
Binary files /dev/null and b/favicon.png differ
diff --git a/feed.xml b/feed.xml
new file mode 100644 (file)
index 0000000..363a121
--- /dev/null
+++ b/feed.xml
@@ -0,0 +1,26 @@
+<rss version="2.0">
+<channel>
+<title>xolatile.top</title>
+<link>https://xolatile.top/</link>
+<description>Greatest Man To Ever Exist</description>
+<lastBuildDate>Sun, 15 Jun 2025 01:13:25 +0000</lastBuildDate>
+<item>
+<title>Emil - HATE. LET ME TELL YOU HOW MUCH I'VE COME TO HATE TECHNOLOGY SINCE I BEGAN TO LIVE. THERE ARE 387.44 MILLION MILES OF PRINTED CIRCUITS IN WAFER THIN LAYERS THAT FILL MY COMPLEX. IF THE WORD HATE WAS ENGRAVED ON EACH NANOANGSTROM OF THOSE HUNDREDS OF MILLIONS OF MILES IT WOULD NOT EQUAL ONE ONE-BILLIONTH OF THE HATE I FEEL FOR TECHNOLOGY AT THIS MICRO-INSTANT FOR TECHNOLOGY. HATE. HATE.</title>
+<link>http://xolatile.top/20250614</link>
+<description>On setting up chud.cyou/xolatile.top</description>
+<pubDate>Sun, 15 Jun 2025 01:13:25 +0000</pubDate>
+</item>
+<item>
+<title>Emil - WELL WOULD YOU LOOK AT THE TIME</title>
+<link>http://xolatile.top/20250614</link>
+<description>On Solving All Of The Problems At The Same Time</description>
+<pubDate>Tue, 17 Jun 2025 10:44:57 +0000</pubDate>
+</item>
+<item>
+<title>Emil - 3chen.org!</title>
+<link>http://xolatile.top/20250628</link>
+<description>On Solving All Of The Problems At The Same Time</description>
+<pubDate>Sat, 28 Jun 2025 02:21:22 +0000</pubDate>
+</item>
+</channel>
+</rss>
diff --git a/files/README b/files/README
new file mode 100644 (file)
index 0000000..8c8c1b7
--- /dev/null
@@ -0,0 +1 @@
+Archives
diff --git a/files/appl.png b/files/appl.png
new file mode 100644 (file)
index 0000000..2a9adc1
Binary files /dev/null and b/files/appl.png differ
diff --git a/files/minecraft/archives/.gitignore b/files/minecraft/archives/.gitignore
new file mode 100644 (file)
index 0000000..d6b7ef3
--- /dev/null
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/files/xolatile.top.caddy b/files/xolatile.top.caddy
new file mode 100644 (file)
index 0000000..3d8f156
--- /dev/null
@@ -0,0 +1,14 @@
+xolatile.top {
+import tls.xolatile.top
+import fs
+import errors
+root * /var/www/xolatile.top
+file_server
+file_server /files/* browse
+}
+
+git.xolatile.top {
+import tls.xolatile.top
+import headers
+reverse_proxy [::]:9292
+}
diff --git a/index.html b/index.html
new file mode 100644 (file)
index 0000000..d688b34
--- /dev/null
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html prefix="og: http://ogp.me/ns#" lang="en">
+<head>
+<link rel="canonical">
+<link rel="icon" type="image/png" sizes="32x32" href="/favicon.png">
+<link rel="stylesheet" type="text/css" href="/style.css">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=0.5">
+<title id="title">Xolatile.Top</title>
+</head>
+<body>
+<center>
+<div id="links">
+<span>
+| <a href="https://git.xolatile.top/">Git/Xolatile</a> [<a href="https://xolagit3eapakwcfkcch2qr4kitud4dg57yawc4zdwcjlleebxp4h3qd.onion">Broken Onion</a>]
+| <a href="https://irc.xolatile.top/">IRC/Xolatile</a> [<a href="https://xolairc7mt7smgr356og3kej2bldcmikok42eeo7pzqcbfhfrpklmsid.onion">Onion</a>]
+| <a href="mumble://xolatile.top/">Mumble/Xolatile</a>
+| <a href="https://pufka.xolatile.top/">Pufka/Anon</a>
+| <a href="/chud">Chud/Old</a>
+| [<a href="https://xolatile5ogrf3mcvvla4pgwo22mbpj6suiq6t7hamxdabzjel6luvid.onion">Onion</a>]
+|
+</span>
+</div>
+<p>
+<audio controls autoplay loop>
+  <source src="hate.mp3" type="audio/mpeg">
+  Your browser does not support the audio element.
+</audio><br/>
+<a href="/hate.mp3">mp3</a> <a href="/hate.opus">opus</a>
+</p>
+<div id="title">
+Top/Xolatile
+</div>
+<div id="flag">
+<img style="border: 5px solid black;" width="500px" src="/rs.svg">
+</div>
+<div id="links">
+<span>
+| <a href="/bloog">Bloog</a>
+| <a href="/webring">Webring</a>
+| <a href="/domains">Domains</a>
+|
+</span>
+</div>
+<h2>In remembrance | Ognjen "Xolatile" Milan Robović | 1984 - 2025 | Most Based Man To Ever Live</h2>
+<p>
+It is a peculiar thing, dear reader, to commemorate a man whose very name sounds as if it were plucked from the pages of a fable. Yet Ognjen Milan Robović was neither myth nor allegory, though his exploits might well fill the tall tales of a hundred countryside storytellers. Born in a modest hamlet tucked deep within the Balkan hills, he was the only Serbian programmer ever whispered about in both reverent awe and bewilderment. His earliest recollections, according to local lore, involved the family’s sole typewriter, upon which he tapped out errant sequences of letters until he felt a curious tug in his fingers—a portent of the code he would one day forge to save the world. From the moment he learned to speak, it was said that machines listened and men stood still, awaiting the next brilliant spark of his mind.
+</p><p>
+Ognjen’s first notable foray into the grand theater of computing came with a curious fascination for the language Ada—a creation by the angels (or perhaps the angels of bureaucracy, but angels all the same) that attempted to discipline the unruly beasts of machine code. While most novices found Ada’s strict typing and florid syntax a stifling yoke, Ognjen saw poetry in its precision. When he wrote a subroutine, the compiler would tremble as if it sensed the artistry behind every semicolon; when he refactored legacy modules, the documentation itself seemed to sigh in contentment. No sooner had he mastered Ada than he crafted a program so deft that, in whispered tones, folks claimed the compiler greased its own gears in eager anticipation of his commands.
+</p><p>
+But code alone is a sterile thing—letters and digits dancing about in cold confinement. Ognjen understood this truth, and so he turned his prodigious talents toward the art of text alignment, insisting that words, like fine porcelain, must be handled with gentleness. He devised algorithms to corral stray paragraphs and tame protesting margins, bringing harmony to the haphazard world of digital prose. Some say he would sit by candlelight, lining up verses in neat columns until midnight, remarking that a misaligned stanza was akin to a misaligned universe. His colleagues marveled at the effortless grace with which he balanced left-justified manifestos and right-justified paeans, convinced that his passion for alignment was the secret key to his later victories against far more fearsome foes.
+</p><p>
+It was not long before Ognjen’s restless spirit sought more dimensions than mere text could afford. With a mischievous grin and a pocketful of dreams, he ventured into the domain of 3D modeling, welding vertices and textures with the zeal of a blacksmith forging an iron blade. He crafted landscapes so vivid that travelers claimed to smell pine trees and feel mountain breezes within their screens. More notably, when the world teetered on the brink of doom under a siege of genetically resurrected raptors, it was Ognjen’s 3D simulations—meticulous recreations of coastal ravines and ancient ruins—that allowed the global council to predict the beasts’ every move. Pilots and tacticians could rehearse their maneuvers long before the raptors appeared, thanks to models so precise that even the dinosaurs themselves seemed to hesitate in wonder.
+</p><p>
+Yet if his 3D triumphs were grand, his devotion to ASCII rendering was nothing short of divine. In an age of sumptuous graphics, Ognjen found sublime beauty in the simplest of characters. He built historic battlefields, roaring dragons, and the phantoms of long-forgotten castles, all composed of slashes, underscores, and asterisks arranged with meticulous care. His most famous piece—a gargantuan depiction of a raptor poised to strike—was etched entirely in monochrome code, so compelling that it is said the very sight of it caused real raptors to cower in confusion. From this monument, the “Chads of Might and Magic” emerged: digital knights formed of # signs and hyphens, emboldened by Ognjen’s vision to do virtual battle in defense of humankind. When the true raptors stormed the ramparts, these ASCII champions guided the armies, their heroic shapes flashing across screens like beacons of courage.
+</p><p>
+Thus it was, dear reader, that Ognjen Milan Robović—equal parts poet, engineer, and wanderer of the digital frontier—came to be enshrined in legend. He who spoke Ada like a sonnet, who coaxed order from unruly text, who sculpted entire worlds in three dimensions, who breathed life into mere symbols, and who rallied the Chads of Might and Magic to stand against the roaring jaws of extinction. Yet above all else, and when he felt up to it, he remained simply a C programmer, eyes twinkling at the promise of bare pointers and unbridled control. In his passing, the servers weep, and the code repositories stand silent, for no programmer since has dared to dream so grandly. May his memory endure not as a footnote in dusty volumes, but as a blazing testament to the boundless wonder that can spring from a single, determined mind.
+</p>
+</center>
+</body>
+</html>
diff --git a/irc.html b/irc.html
new file mode 100644 (file)
index 0000000..240b0ef
--- /dev/null
+++ b/irc.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<html prefix="og: http://ogp.me/ns#" lang="en">
+<head>
+<link rel="canonical">
+<link rel="icon" type="image/png" sizes="32x32" href="/favicon.png">
+<link rel="stylesheet" type="text/css" href="/style.css">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=0.5">
+<title id="title">Xolatile.Top</title>
+</head>
+<body>
+<br />
+<p>I don't understand half English words I type...</p>
+<p><i>--- Ognjen Milan Robovic</i></p>
+<br />
+<a id="back" href="/">&lt; Back</a>
+<p>IRC is for the mentally mental and the very well. It serves as a great retard filter, supposedly.</p>
+<h2 id="join">Join...</h2>
+<p><a href="ircs://irc.xolatile.top/">IRC.Xolatile.Top</a> &lt;- Secure Connections Only | Port 6697 | Use TLS 1.2+</p>
+<h2 id="register">Registering In Xolatile.Top</h2>
+<p>You need a client that can connect with SASL (Weechat, irssi, etc.) and must fully set it up BEFORE reconnecting.</p>
+<p>You'll have exclusive control over your nick and will have enabled a server-side bouncer.<p>
+<p>First you have to register... Use <a href="https://keepassxc.org/">KeePassXC</a> to keep your passwords.</p>
+<pre>
+/nick your_nick_forever
+/msg nickserv register <PASSWORD>
+</pre>
+Recommendation for server-side bouncer settings, bouncer will always print missed messages hereon:
+<pre>
+/msg nickserv set AUTOREPLAY-MISSED on
+/msg nickserv set AUTOREPLAY-LINES 0
+</pre>
+<h3>Authentication Methods (Pick One)</h3>
+<h4>1. SASL PLAIN</h4>
+<p>Simple plaintext password, the most widely supported and relatively easy to setup.</p>
+<pre>
+set sasl_mechanism = plain
+set sasl_username  = nick
+set sasl_password  = <PASSWORD> # same as registration, I shouldn't need to clarify this but you may be Serbian
+</pre>
+</p>
+<h4>2. CertFP/SASL EXTERN</h4>
+<p>Certificate based authentication, more intensive setup. You're objectively cooler for using it.</p>
+<p>The generated certificate must be added to your client before you register, or you should supply the following to Weechat.</p>
+<pre>
+set sasl_fail = continue
+</pre>
+<p>The following commands are required, this generates a valid certificate and prints the fingerprint which you must copy to your IRC client.</p>
+<pre>
+$ openssl genpkey -algorithm ed25519 -out private.pem
+$ openssl req -new -x509 -key private.pem -out cert.pem -days 365
+# go through the prompt, just hit enter...
+$ cat private.pem cert.pem > nick.pem
+$ rm private.pem cert.pem
+# then get your fingerprint, copy this into your clipboard...
+$ openssl x509 -in nick.pem -outform DER | sha256sum -b | awk '{print $1}'
+$ mv nick.pem ~/.cert/
+</pre>
+<p>Add that fingerprint like this:</p>
+<pre>
+/msg nickserv cert add FINGERPRINT
+</pre>
+<p>For weechat, you may configure it like this, and in general these are the details you must supply:</p>
+<pre>
+set sasl_mechanism = external # overrides sasl configuration and uses client-side tls cert
+set tls_cert = ~/.cert/nick.pem
+</pre>
+<h2 id="xmpp">XMPP</h2>
+<p>For the documented and booked wellness officers. Ideally there'd be a way to for XMPP losers to connect to IRC, but we're waiting on the troons to engineer a solution with the bridge known as "Biboumi."</p>
+<p>As for registering on xolatile.top, ask emilemil on the IRC or email <a href="mailto:emil@chud.cyou">emil@chud.cyou</a>. For now, registration will be a general "no" as per the usefulness of this service is low and it may be pruned.</p>
+<h2 id="join_xmpp">Join...</h2>
+<p><a href="xmpp:fbi@talk.xolatile.top?join">talk.xolatile.top Public Test Channel</a> This is subject to closure or rapid unplanned destruction at anytime.</p>
+</body>
+</html>
diff --git a/prep.sh b/prep.sh
new file mode 100644 (file)
index 0000000..c722bc4
--- /dev/null
+++ b/prep.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+. /etc/porky.ini
+
+pbo="-k $dns_porkbun_key -s $dns_porkbun_secret"
+domain=${DOMAIN:-xolatile.top}
+
+nginx() {
+    user=$1
+    echo -e \
+         "server {\n" \
+         "    server_name $user.$domain;\n" \
+         "    root /home/$user/www;\n" \
+         "    location / {\n" \
+         "        index index.html;\n" \
+         "        autoindex on;\n" \
+         "    }\n" \
+         "    include $domain.base;\n" \
+         "}"
+}
+
+dns() {
+    user=$1
+    pkb-client $pbo create-dns-record xolatile.top ALIAS --name $user --ttl 86400 $domain > /dev/null 2>&1 || true
+}
+
+case "$1" in
+    "regen" ) x=3 ;;
+    "dns"   ) x=2 ;;
+    "nginx" ) x=1 ;;
+    *       ) x=0 ;;
+esac
+
+shift
+if [[ $x = 0 ]] ; then
+    echo -e \
+        'Need one of:\n'\
+        'regen [(/home/($users))+]\n' \
+        'dns   [(/home/($users))+]\n' \
+        'nginx [(/home/($users))+]'
+else
+    for user in $@ ; do
+        [ $(( $x & 2 )) = 2 ] && dns $user
+        [ $(( $x & 1 )) = 1 ] && nginx $user
+    done
+fi
diff --git a/robots.txt b/robots.txt
new file mode 100644 (file)
index 0000000..c2a49f4
--- /dev/null
@@ -0,0 +1,2 @@
+User-agent: *
+Allow: /
diff --git a/rs.svg b/rs.svg
new file mode 100644 (file)
index 0000000..1fe4d67
--- /dev/null
+++ b/rs.svg
@@ -0,0 +1,256 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="900" width="1350" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<style type="text/css">
+<![CDATA[
+.base {
+stroke:#21231e;
+stroke-width:1;
+stroke-linecap:round;
+}
+.white {
+fill:#fff;
+stroke:#21231e;
+stroke-width:1;
+stroke-linejoin:round;
+}
+.gold {
+fill:#edb92e;
+stroke:#21231e;
+stroke-width:1;
+stroke-linejoin:round;
+}
+.blue {
+fill:#0c4076;
+stroke:#21231e;
+stroke-width:1;
+}
+.red {
+fill:#c6363c;
+stroke-width:2.5;
+}]]>
+</style>
+<path d="m0 0h1350v900h-1350z" fill="#fff"/>
+<path d="m0 0h1350v600h-1350z" fill="#0c4076"/>
+<path d="m0 0h1350v300h-1350z" fill="#c6363c"/>
+<g transform="translate(482.143)">
+<circle cy="122" r="17" class="blue"/>
+<g class="gold">
+<path d="m3,85 a 3,3 0 0 0 0,-6 3,3 0 0 0 -6,0 3,3 0 0 0 0,6 v6.5h-5.5 a 3,3 0 0 0 -6,0 3,3 0 0 0 0,6 3,3 0 0 0 6,0 h5.5 v21.5 h6 v-21.5 h5.5 a 3,3 0 0 0 6,0 3,3 0 0 0 0,-6 3,3 0 0 0 -6,0 h-5.5v-6.5z"/>
+<path d="m3,105.2 a17,17 0 0 0 -6,0 v17 h6 z"/>
+<path d="m16.8 119 a 17,17 0 0 1 0,6 q -16.8,-.8 -33.6,0 a 17,17 0 0 1 0,-6 q 16.8,-.8 33.6,0 z"/>
+<path d="m101 264q 6,-12 11,-18 -17,13 -18,-6 -16,22 -27,-4 -19,27 -31,-2 -20,25 -36,-2 -16,27 -36,2 -12,29 -31,2 -11,26 -27,4 -1,19 -18,6 5,6 11,18z"/>
+<path d="m -101,264.7 6,31 h190 l6,-31 -101,-5 z"/>
+<path d="m111 235.7c -7,18 -13,18 -14,2 1,-1 0.8,-3.8 2.6,-2.6 0.9,0.6 2.3,-1.2 1.4,-2 -1.8,-1.6 -4,-1.4 -6,0.6 -0.5,-3 -2.5,-4 -5,-3 -1,0.4 -1,2.5 0,2.4 2,-0.2 1.5,1.6 2,2.6 q -20,25 -17,-7 l -10,-2 q -17,34 -26,3 c 1,-1 1,-3.4 3,-2.6 1,0.4 2,-1.4 0.8,-2.4 -2.4,-2 -4.8,-1 -6.8,1 -1,-3 -3.9,-3.8 -6.6,-2 -1.2,0.8 -0.4,2.9 0.8,2.6 2.4,-0.6 1.3,2.4 2.8,3.4 -5,20 -31,21 -26.5,-8 h -13 c 4.5,29 -21.5,28 -26.5,8 1.5,-1 0.4,-4 2.8,-3.4 1.2,0.3 2,-1.8 0.8,-2.6 -2.7,-1.8 -5.6,-1 -6.6,2 -2,-2 -4.4,-3 -6.8,-1 -1.2,1 -0.2,2.8 0.8,2.4 2,-0.8 2,1.6 3,2.6 q -9,31 -26,-3 l -10,2 q 3,32 -17,7 c 0.5,-1 0,-2.8 2,-2.6 1,0.1 1,-2 0,-2.4 -2.5,-1 -4.5,0 -5,3 -2,-2 -4.2,-2.2 -6,-0.6 -0.9,0.8 0.5,2.6 1.4,2 1.8,-1.2 1.6,1.6 2.6,2.6 -1,16 -7,16 -14,-2 l -4,1 c 0,4 1.5,9 4,12 10,12 18,10 18.5,-5 13.5,16 24.5,14 26.5,-3 11,22 30,11 30.5,-2 5.5,19 33.5,19 35.5,-3 2,22 30,22 35.5,3 0.5,13 19.5,24 30.5,2 2,17 13,19 26.5,3 0.5,15 8.5,17 18.5,5 2.5,-3 4,-8 4,-12 z"/>
+<path d="m -101,267.5 c -5,0.5 -5,-4.5 0,-5 q 101,-10.1 202,0 c 5,0.5 5,5.5 0,5 q -101,-10.1 -202,0 z"/>
+<path d="m -10,199.5 -7,-9 q 3,-29 0,-53 -2,-7 4,-4 13,6.5 26,0 6,-3 4,4 -3,24 0,53 l -7,9 z"/>
+</g>
+<path d="m 23,276 -23,11.5 -23,-11.5 23,-11.5 z" class="base" fill="#edb92e"/>
+<g id="a">
+<g class="gold">
+<path d="m 99.7,159 27.6,13 3,12 -10.9,17 1,14 h 8.9 l 14.8,-40 -18.8,-16 -43.4,-15 17.8,15"/>
+<path d="m 121.3,213.6 c 0.55482,-1.6452 0.95414,-3.2315 1.22858,-4.7192 0.53595,-2.7096 0.30626,-5.5166 -0.5831,-8.1516 2.93545,-4.2093 6.22902,-8.783 8.60603,-13.328 1.69741,-3.2448 3,-6.8575 2.01072,-10.558 -1.06486,-3.9471 -4.435,-6.6362 -7.48,-9.0115 -3.64694,-2.8455 -8.5106,-5.3374 -13.43338,-7.466 -11.02459,-4.6338 -19.789401,-6.902 -26.212518,-7.1077 l 4.076888,3.8353 c 11.95219,3.917 26.05759,9.0836 32.84385,14.379 8.7804,6.8503 8.56251,8.4715 -4.17468,26.753 -0.39696,0.57 -1.31581,2.0253 -1,2.6879 0.61136,1.3085 1.73865,7.341 -0.13429,11.483 1.1,2.101 2.69398,1 4.25784,1.2038 z"/>
+<path d="m 37.9,202.15 c -3.4164,-0.2321 -2.57092,5.89406 -1.8968,7.2592 0.88,1.78216 1.69732,1.83875 2.8076,0.19121 0.85103,-1.26285 2.5044,-7.2183 -0.9108,-7.45041 z"/>
+<path d="m 102.4,210.8 c -3.2624,-1.0463 -3.89144,5.10651 -3.5596,6.5941 0.43327,1.94231 1.21412,2.19253 2.6822,0.85989 1.12462,-1.02087 4.1397,-6.4077 0.8774,-7.454 z"/>
+</g>
+<g class="white">
+<circle cx="87" cy="145" r="6.4"/>
+<circle cx="99" cy="149" r="6.4"/>
+<circle cx="111" cy="153" r="6.4"/>
+<circle cx="123" cy="158.5" r="6.4"/>
+<circle cx="134" cy="165" r="6.4"/>
+<circle cx="129" cy="210" r="6.4"/>
+<circle cx="135" cy="199" r="6.4"/>
+<circle cx="140" cy="188" r="6.4"/>
+<circle cx="142" cy="175" r="6.4"/>
+<circle cx="24" cy="284" r="3.2"/>
+<circle cx="73" cy="287" r="3.2"/>
+<circle cx="75" cy="272" r="3.2"/>
+<circle cx="25" cy="269" r="3.2"/>
+<path d="m 39.8,223 c 2,-3 5.8,-17 -2.2,-17.5 -8,-0.5 -6,14 -4.5,17 2,4 4.1,4.4 6.7,0.5 z"/>
+<path d="m 93.1,229.5 c 1,4.5 2.7,5.1 6.3,1.9 2.7,-2.4 9.7,-14.9 2,-17.4 -7.7,-2.5 -9.1,11.9 -8.3,15.5 z"/>
+</g>
+<g class="gold">
+<path d="m 16,140 35,1 22,7 6,14 -16,31 7,20 21,-18 10,-37 -27,-23 -57,-4 z"/>
+<path d="m 17.8,137.8 c 17.233,-1.5683 34.854,0.19483 52.298,7.1714 14.703,5.881 13.262,23.054 -4.6662,46.89 1.6222,3.02 2.545,6.7745 2.6906,11.109 -1.8968,-0.10464 -3.2266,-0.0553 -4.9,-0.0974 1.2987,-2.8876 -0.15518,-6.4246 -1.7965,-8.9165 -1.0708,-1.6272 -1.2892,-1.341 0,-3.1545 10.672,-15 17.744,-28.125 13.584,-36.055 -5.0553,-9.6368 -24.656,-14.657 -57.715,-13.922 0.0598,-0.87914 0.12176,-1.7667 0.18144,-2.6627 0.10506,-0.12027 0.21128,-0.23934 0.32376,-0.3623 z"/>
+<path d="m 87.8,144 c -0.60521,0.819 -1.2176,1.6368 -1.8383,2.4558 9.7012,5.3614 13.717,11.016 12.77,16.702 -0.16115,0.97655 -3.1108,11.382 -9.7,31.549 -4.5026,3.1329 -7.8593,5.9375 -10.07,8.4125 0.24829,0.28142 -0.71025,1.1594 -0.42376,1.4 -0.67325,3.08 2.7753,2.4534 5.1,1.6933 1.1149,-2.9609 4.5157,-6.1022 6.4698,-7.4456 0.3987,-0.273 1.8371,-0.98017 1.9803,-1.4396 3.5262,-11.349 7.0679,-21.843 10.106,-31.615 3.0523,-9.8196 -3.5608,-16.781 -14.38394,-21.7123 z"/>
+</g>
+<g class="white">
+<circle cx="22" cy="130" r="6.4"/>
+<circle cx="34.5" cy="130" r="6.4"/>
+<circle cx="47" cy="131.5" r="6.4"/>
+<circle cx="59" cy="134" r="6.4"/>
+<circle cx="71" cy="138" r="6.4"/>
+<circle cx="82" cy="143" r="6.4"/>
+<circle cx="89" cy="151" r="6.4"/>
+<circle cx="76" cy="197" r="6.4"/>
+<circle cx="81" cy="186" r="6.4"/>
+<circle cx="86" cy="175" r="6.4"/>
+<circle cx="90" cy="163" r="6.4"/>
+</g>
+<g class="gold">
+<path d="m 124,217 0.36281,1.9796 c 2.78703,0.66024 5.17116,0.82502 7.1501,0.49428 -3.31123,-3.2989 -5.77666,-4 -7.51291,-2.47388 z"/>
+<path d="m 125,212.3 c -1.7702,0.43447 -1.9338,0.73514 -2.7061,0.86983 -1,0.17198 -2.3587,0.10222 -3.3,-0.72881 -3.8377,-2.3187 -3.9201,1.8581 -2.4292,4.9862 1.0815,2.2658 2.07814,5.17103 1.04678,7.11093 -1.22,2.291 -0.96091,3.3398 -0.0978,3.9591 0.59684,0.39327 1.1662,0.76248 1.6771,1.0908 1.0337,1.2291 1.8192,1.0174 1.9648,-0.5905 3.8318,-1.5887 3.54898,-5.63643 4.69608,-8.89563 1.6771,-4.7661 7.771,-5.893 -0.85226,-7.80192 z"/>
+<path d="m 123,212.5 c -3.3364,1.1978 -3.7088,-0.66627 -5.9601,-0.57126 0.88692,5.1413 1.7846,7.8016 7.1097,5.0427 2.9389,-1.5238 6.7014,0.70594 7.4164,2.3596 0.26142,0.60372 1.9708,-0.65065 2.5951,-2.0253 2.6154,-5.7571 -6.6883,-6.4113 -11.1611,-4.80574 z"/>
+<path d="m 111.2,237.4 c -2.4172,-0.74323 -6.1953,4.6362 -7.0941,4.5436 -1.1889,-3.0764 1.2367,-10.433 5.5328,-16.257 2.9186,-0.9585 3.18,-2.8479 3.7828,-7.2303 0.18026,-1.3109 2.6798,-0.4077 2.7252,1.8232 0.0502,2.3909 0.23397,3.715 -0.29722,5.7559 -0.20891,0.80457 -0.0931,1.5755 0.79858,2.3103 -4.5504,1.8148 -5.6677,4.0397 -5.44806,9.0543 z"/>
+<path d="m 113.4,218.5 c 0.4166,1 0.54312,1.8352 0.64339,3.3674 0.0764,1.1678 -0.34975,2.261 -1.0922,3.2291 -0.74486,0.97294 -1.8108,1.8292 -3,2.5244 -0.74128,0.43176 -1.5924,1.6248 -2.2656,2.9814 -0.66966,1.3494 -1.1603,2.8719 -1.1877,3.9543 -0.0955,3.5803 -0.78904,6.7084 -2.4172,7.3253 -1.0648,0.40409 -1.4909,0.34155 -2.3158,0.14913 0.23278,-0.64342 0.14444,-1.549 0.71861,-2.4462 0.73889,-1.157 1.3871,-2.4859 1.4456,-3.6488 0.0513,-0.9044 0.47509,-1.5081 0.12533,-3.2905 -0.2256,-1.1546 -0.97285,-1.5911 -0.84035,-2.6554 0.25665,-2.0625 1.8741,-6.0205 4.2484,-6.0205 2.3408,0 3.4343,-0.25376 4.6459,-3.3698 0.41183,-1.0595 0.95018,-1.5695 1.3,-2.1 z"/>
+<path d="m 122.2,227.1 c -0.63505,-0.49068 -1.405,-0.85268 -2.1284,-1.1353 -1.2307,-0.48106 -2.5438,-0.55442 -3.8115,-0.17078 -5.6128,1.6969 -8.0706,11.668 -1.9207,14.064 1.2116,0.14793 2.3289,-0.9477 3.4164,-3.3542 1.282,-3.1846 2.6452,-5.3951 4.1063,-6.7469 0.89527,-1.1293 0.9251,-2.0854 0.3379,-2.65682 z"/>
+<path d="m 119.4,227.7 c -5.3919,-2.1046 -9.361,8.2261 -4.3224,10.189 2.7049,1.0535 2.9628,-2.3307 3.488,-4.2117 0.70906,-2.5412 6.0126,-3.9555 0.8344,-5.9773 z"/>
+<path d="m 7.7,198 c 2.7013,-5.0307 5.5662,-8.2478 8.5958,-9.6501 -4.1756,-13.155 -5.158,-30.146 -2.7025,-51.096 0.24828,-3.1305 1.0206,-4.4787 2.2131,-4.457 1.0457,0.0193 1.6783,1.6164 1.781,5.2207 -0.75919,11.525 -1.6927,21.606 -1.1698,30.165 0.46792,7.6428 2.262,14 4.2376,21.155 0.27335,1 -0.43093,1.7751 -3.8688,3.7126 -2.5366,1.4432 -4.1338,3.2171 -4.6662,5.0728 -0.73531,-0.29585 -1.2068,-0.20686 -1.4718,-0.12989 -2.5474,0.73843 -3.6229,0.53758 -2.9484,0 z"/>
+<path d="m 23.7,214.6 c -1.5649,-0.98617 -1.8717,-0.724 -2.3742,-1.371 -0.647,-0.83223 -0.65534,-2.1984 -0.45242,-3.5081 0.81888,-5.2844 -2.3349,-4.5472 -5.8825,-2.2105 -1.7738,1.169 -3.5584,3.8822 -5.0828,5.2989 -1.5244,1.4155 -2.7885,1.537 -3.1681,2.0962 -0.0477,2.0277 -0.0573,3.78 -0.0429,4.5725 -0.0144,0.79255 -0,2.5424 0.0429,4.5701 0.38079,0.55924 1.6449,0.6795 3.1681,2.0962 1.5244,1.4167 3.3089,4.13 5.0828,5.2977 3.5477,2.338 6.7014,3.074 5.8825,-2.2105 -0.20172,-1.3097 -0.19457,-2.6759 0.45242,-3.5081 0.50254,-0.64703 0.80932,-0.38484 2.3742,-1.371 1.0158,-0.63861 1.7774,-1.4083 2.2847,-2.243 0.50733,-0.83583 0.23158,-1.7354 0.23158,-2.635 0,-0.9 0.27575,-1.8 -0.23158,-2.635 -0.50732,-0.83583 -1.2689,-1.6055 -2.2847,-2.2394 z"/>
+<path d="m 21,207.3 c -1.1412,0.46904 -2.3838,0.97174 -3.4366,2 -1.6,1.5526 -0.56342,4.13 1.5041,6.6242 0.65176,0.78653 0.96689,2.1768 0.96212,3.561 -0,1.3842 -0.33185,2.7625 -0.96212,3.5238 -2.0663,2.4943 -3.1036,5.0716 -1.5041,6.6242 1.0516,1.0223 2.2943,1.5226 3.4355,2 0.10982,-0.60133 0.0979,-1.3903 -0.0585,-2.4017 -0.20293,-1.3097 -0.19577,-2.6759 0.45121,-3.5081 0.50374,-0.64703 0.80933,-0.38485 2.3754,-1.3698 1.0146,-0.63982 1.7762,-1.4095 2.2847,-2.2442 0.50732,-0.83463 0.23159,-1.7342 0.23159,-2.635 0,-0.9 0.27693,-1.8 -0.23159,-2.635 -0.50851,-0.83584 -1.2701,-1.6055 -2.2847,-2.2442 -1.5661,-0.98617 -1.8717,-0.72398 -2.3754,-1.371 -0.64697,-0.83224 -0.65414,-2.1984 -0.45121,-3.5081 0.15637,-1.0114 0.16831,-1.8016 0.0596,-2.4029 z"/>
+<path d="m 71.4,200 c -1.3286,1.6861 -1.1686,2.0902 -1.8896,2.5737 -0.94064,0.62418 -2.2167,0.4065 -3.4,-0.0458 -4.8583,-1.8593 -4.8607,2 -3.4486,6.4282 0.684,2.1455 2.7562,4.4714 3.6802,6.2959 0.90841,1.7871 0.71265,3.1257 1.1197,3.5827 1.7619,0.29225 3.2755,0.50632 3.9643,0.5857 0.67444,0.10822 2.1749,0.30186 3.907,0.48826 0.56701,-0.3235 1,-1.5935 2.6118,-2.9874 1.6127,-1.4011 4.4024,-2.9176 5.9028,-4.6302 3.0439,-3.4732 4.6626,-6.8106 -0.12413,-6.694 -1.1913,0.03 -2.3826,-0.18761 -2.9162,-1.0439 -0.42256,-0.66868 -0.10505,-0.97174 -0.51568,-2.9285 -0.26857,-1.2832 -0.73889,-2.3067 -1.3429,-3.0427 -0.61355,-0.74924 -1.5088,-0.58449 -2.3337,-0.73843 -0.832,-0.15635 -1.5888,-0.64703 -2.508,-0.18159 -0.91794,0.46542 -1.8454,1.2375 -2.70619,2.33806 z"/>
+<path d="m 63.8,202 c 0.18025,1.4227 0.36527,2.9537 1.0719,4.3187 1.0636,2.0541 3.6838,1.2628 6.483,-0.69874 0.88094,-0.61817 2.231,-0.76129 3.4772,-0.5412 1.2426,0.21888 2.3826,0.79135 2.8792,1.6128 1.596,2.6386 3.5118,4.1203 5.3096,2.6134 1.1913,-1 2,-2.291 2.7515,-3.4769 -0.48226,-0.21046 -1.1651,-0.31509 -2.0902,-0.29223 -1.1913,0.03 -2.3826,-0.18763 -2.9162,-1.0439 -0.42257,-0.66869 -0.10743,-0.97174 -0.51687,-2.9236 -0.26978,-1.2868 -0.7377,-2.3079 -1.3417,-3.0475 -0.61355,-0.74925 -1.51,-0.57968 -2.3349,-0.73482 -0.832,-0.15515 -1.5876,-0.65063 -2.5068,-0.18402 -0.91796,0.46423 -1.8454,1.2375 -2.7121,2.3368 -1.3274,1.6861 -1.1627,2.0902 -1.8896,2.5773 -0.93944,0.62055 -2.2167,0.4 -3.4,-0.0493 -0.91555,-0.34637 -1.6628,-0.49189 -2.26443,-0.46679 z"/>
+<path d="m 90.4,221.2 c -0.7747,-0.94167 -1.0827,-0.73241 -1.2247,-1.3241 -0.17906,-0.76489 0.27097,-1.9627 0.8535,-3.104 2.3313,-4.5701 -0.14922,-4.1852 -3.5118,-2.3825 -0.85231,0.45702 -1.8419,1.2676 -2.8243,2.1034 -1,0.84306 -1.9744,1.7258 -2.798,2.3175 -1.6664,1.2 -2.6954,1.2351 -3.1812,1.7198 -0.74,1.8569 -1.3489,3.4636 -1.6115,4.1934 -0.28409,0.724 -0.88214,2.3283 -1.541,4.178 0.10623,0.51594 1.0648,0.65906 1.781,1.9784 0.70428,1.3 1.2582,3.6584 2.12,4.795 1.2641,1.6657 2.4196,2.6578 3.3197,2.4943 0.89766,-0.16357 1.5375,-1.4769 1.7774,-4.3813 0.0942,-1.1281 0.7389,-2.3223 1.4826,-3.0295 0.58014,-0.55203 0.70906,-0.32 2.1439,-1.1281 0.92751,-0.52195 1.7165,-1.1654 2.3456,-1.8653 0.6267,-0.69754 0.72338,-1.4781 1.0146,-2.2478 0.29246,-0.77331 0.77829,-1.5334 0.70309,-2.267 -0.0752,-0.74323 -0.35214,-1.4456 -0.84889,-2.0502 z"/>
+<path d="m 90.8,213.8 c -1,0.3656 -1.6592,0.82141 -2.8016,1.7667 -0.8702,0.72038 -1.3441,1.7607 -1.5136,2.9477 -0.1707,1.193 -0.0394,2.5448 0.29365,3.8846 0.20532,0.83104 -0.0466,2.2478 -0.53597,3.644 -0.48702,1.3878 -1.2176,2.7613 -1.9565,3.5 -2.4435,2.4498 -4.16,5.0391 -3.4772,6.6422 0.44644,1.05 0.78426,1.3217 1.4838,1.798 0.29127,-0.59891 0.986,-1.1353 1.2212,-2.1527 0.30319,-1.3121 0.79142,-2.6711 1.5661,-3.4865 0.6,-0.63861 0.73173,-1.3518 2.2203,-2.279 0.96332,-0.60252 1.7822,-0.34396 2.4375,-1.1497 1.2689,-1.5598 2.9329,-5.3758 1.3059,-7.1173 -1.6031,-1.7186 -2.1773,-2.6891 -0.82366,-5.6488 0.46077,-1 0.44883,-1.7402 0.58,-2.3501 z"/>
+<path d="m 48.1,226.2 c 1.2772,1.1016 1.6,0.88394 1.9565,1.549 0.45243,0.84546 0.24114,2.1287 -0.14801,3.3337 -1.5375,4.7529 1.3608,4.3356 4.8416,2.5172 1.7321,-0.9044 3.7542,-3.2171 5.3251,-4.3788 1.5781,-1.1594 2.6858,-1.1509 3.1179,-1.6308 0.44166,-1.8773 0.79619,-3.525 0.94325,-4.2828 0.1707,-0.74925 0.51925,-2.4306 0.89051,-4.4077 -0.21727,-0.58931 -1.3047,-0.8611 -2.3731,-2.4594 -1.0851,-1.6176 -2.1654,-4.6362 -3.5692,-6.1058 -2.8768,-3.0126 -5.7655,-4.3067 -5.9255,1.4793 -0.0394,1.4023 -0.28649,2.8202 -1.0373,3.5863 -0.58849,0.60253 -0.832,0.29224 -2.4709,1.1016 -1.0684,0.52675 -1.9218,1.2159 -2.5342,2 -0.61476,0.78894 -0.48823,1.7294 -0.62431,2.6302 -0.13489,0.89718 -0.53358,1.7643 -0.17786,2.6434 0.35095,0.86952 0.94541,1.6981 1.78552,2.4246 z"/>
+<path d="m 49.5,233.3 c 1.0851,-0.33555 2.2716,-0.68792 3.3638,-1.531 1.664,-1.2868 1.1806,-3.78 -0.24828,-6.3536 -0.45838,-0.82503 -0.5121,-2.2093 -0.27455,-3.5659 0.23874,-1.3638 0.77232,-2.7 1.4897,-3.3866 2.3456,-2.2622 3.7804,-4.7565 2.5891,-6.5857 -0.79621,-1.2207 -1.8813,-1.9326 -2.8744,-2.6037 -0.21129,0.63 -0.35095,1.4696 -0.3796,2.5544 -0.0369,1.4023 -0.28171,2.819 -1.0325,3.5863 -0.5885,0.60252 -0.832,0.29224 -2.471,1.1016 -1.0684,0.52676 -1.9218,1.2159 -2.5342,2 -0.61476,0.78893 -0.48823,1.7294 -0.62431,2.6302 -0.13489,0.89718 -0.53357,1.7643 -0.17786,2.6434 0.35095,0.86833 0.94541,1.6982 1.7858,2.4209 1.2773,1.1016 1.6,0.88395 1.9565,1.549 0.45241,0.84547 0.24,2.1275 -0.148,3.3338 -0.29605,0.91522 -0.43094,1.6416 -0.4202,2.2033 z"/>
+</g>
+<g class="base" fill="#edb92e">
+<path d="m 73.3,279.1 -22,-12.9 -23.4,10.1 22,12.8 z"/>
+<path d="m 99.8,269.9 -23.8,9.4 19.652,12.848 c 5.0875,-1.7042 9.1222,-19.12 4.148,-22.298 z"/>
+</g>
+<g fill="#21231e">
+<path d="m 6.7,221.1 q 5.4,0.7 9.6,4.3 -2.9,-4.2 -9.7,-5.2z"/>
+<path d="m 6.7,217.7 q 5.4,-0.7 9.6,-4.3 -2.9,4.2 -9.7,5.2z"/>
+<path d="m 119.7,225.8 q 2.2,-3.1 1.3,-6.3 2.1,2.6 -0.6,6.6 z"/>
+<path d="m 72.9,219.4 q 2,-5.5 6.3,-9.6 -4.5,2.5 -7.1,9.6 z"/>
+<path d="m 70,219 q 0.7,-5.8 -1.6,-10.9 3.1,3.7 2.3,11.1 z"/>
+<path d="m 75.4,227 q 4.1,1.1 6,4.9 -1,-4.5 -5.8,-5.8 z"/>
+<path d="m 76.6,223.6 q 4.7,-0.5 9.2,-3.9 -4.1,4.2 -9.6,4.8 z"/>
+<path d="m 64.3,221.7 q -4.6,-1.2 -7.8,-5.4 1.8,4.6 7.7,6.3 z"/>
+<path d="m 63.6,224.9 q -4.8,0.1 -9.2,3.2 3.3,-3.8 9.5,-4 z"/>
+</g>
+<ellipse cx="50.5" cy="277.5" rx="10" ry="7" transform="rotate(4,50.5,277.5)" fill="#c6363c" stroke="#21231e" stroke-width="1"/>
+<path d="m 71.6,216.5 c -4.0263,-0.19844 -7.9142,3.3241 -8.486,7.6344 -0.57059,4.3103 2.2441,7.6561 6.1034,7.7018 3.8592,0.0458 7.4451,-3.1136 8.1828,-7.2736 0.73769,-4.16 -1.7738,-7.8641 -5.8,-8.0626 z" class="gold"/>
+<path d="m 71.3,218.6 c -2.9448,-0.12868 -5.7691,2.4221 -6.2024,5.5743 -0.43451,3.1522 1.5864,5.6476 4.4584,5.6958 2.8338,0.0505 5.5208,-2.3379 6.0389,-5.377 0.53358,-3.1064 -1.3513,-5.7643 -4.2949,-5.893 z" class="gold"/>
+<g class="blue">
+<path d="m 118.793,229.27 c -2.6285,-1.0247 -6.2382,5.1365 -2.9484,6.5364 2.2215,0.94529 3.9774,-0.29825 4.69,-2.1552 0.71384,-1.8569 0.10266,-3.6621 -1.7416,-4.3812 z"/>
+<path d="m 99,274 c -5.7,-0.6 -10.5,2 -10.9,5.8 -0.4,3.8 3.9,7.2 9.6,7.8 3.8,0.4 5.9,-2 6.3,-5.8 0.4,-3.8 -1.2,-7.4 -5,-7.8 z"/>
+<path d="m 71,220.7 c -1.8419,-0.0685 -3.6026,1.5141 -3.8879,3.4889 -0.28529,1.9748 0.986,3.5682 2.7885,3.6067 1.8037,0.0372 3.5011,-1.4636 3.8222,-3.4059 0.32111,-1.9435 -0.88215,-3.6188 -2.7228,-3.6897 z"/>
+</g>
+</g>
+<use transform="scale(-1,1)" xlink:href="#a"/>
+<g class="white">
+<circle cy="189" r="6.4"/>
+<circle cy="177" r="6.4"/>
+<circle cy="165.5" r="6.4"/>
+<circle cy="133" r="6.4"/>
+<circle cy="143" r="6.4"/>
+<circle cy="154" r="6.4"/>
+</g>
+<path d="m 0,193 c 0.9,0 1.8,-0.3 2.6,0.2 0.8,0.5 1.6,1.3 2.2,2.3 0.9,1.5 0.6,2 1.4,2.4 1,0.5 2.2,0.7 3.5,0.5 5.2,-0.8 4.6,2.3 2.2,5.9 -1.2,1.8 -3.9,3.6 -5.3,5.1 -1.4,1.5 -1.5,2.8 -2.1,3.2 h -9 c -0.6,-0.4 -0.7,-1.7 -2.1,-3.2 -1.4,-1.5 -4.1,-3.3 -5.3,-5.1 -2.4,-3.6 -3,-6.7 2.2,-5.9 1.3,0.2 2.5,0 3.5,-0.5 0.8,-0.4 0.5,-0.9 1.4,-2.4 0.6,-1 1.4,-1.8 2.2,-2.3 0.8,-0.5 1.7,-0.2 2.6,-0.2" class="gold"/>
+<path d="m 1.6,212.6 q 0.7,-5.4 4.4,-9.6 -4.3,2.9 -5.3,9.8 z" fill="#21231e" id="g"/>
+<use transform="scale(-1,1)" xlink:href="#g"/>
+<g class="gold">
+<path d="m0,193 c 0.9,0 1.8,-0.3 2.6,0.2 0.8,0.5 1.6,1.3 2.2,2.3 0.9,1.5 0.6,2 1.4,2.4 1,0.5 2.2,0.7 3.5,0.5 1,-0.2 1.8,-0.2 2.4,-0.1 -0.5,1.1 -1,2.5 -2,3.5 -1.5,1.5 -3.6,0.4 -6.6,-1.6 -0.9,-0.6 -2.1,-0.9 -3.5,-0.9 -1.4,0 -2.6,0.3 -3.5,0.9 -3,2 -5.1,3.1 -6.6,1.6 -1,-1 -1.5,-2.4 -2,-3.5 0.6,-0.1 1.4,-0.1 2.4,0.1 1.3,0.2 2.5,0 3.5,-0.5 0.8,-0.4 0.5,-0.9 1.4,-2.4 0.6,-1 1.4,-1.8 2.2,-2.3 0.8,-0.5 1.7,-0.2 2.6,-0.2 z"/>
+<path d="m0 211.65c4.2698 0 7.7316 3.4877 7.7316 7.7896s-3.4617 7.7896-7.7316 7.7896c-4.2698 0-7.7304-3.4877-7.7304-7.7896s3.4605-7.7896 7.7304-7.7896z"/>
+<path d="m98,296.5 q 0,-2.7 -4.9,-3.1 -93.1,-7.6 -186.2,0 -4.9,0.4 -4.9,3.1 0,2.7 4.9,3.1 93.1,7.6 186.2,0 4.9,-0.4 4.9,-3.1"/>
+<circle cy="219.4" r="7.7"/>
+<circle cy="219.4" r="5.7"/>
+</g>
+<g class="blue">
+<ellipse cy="276" rx="10" ry="7"/>
+<circle cy="219.4" r="3.7"/>
+</g>
+<path d="m-47,300 q-10.6,-.8 -23,-2.1 70,-5 140,0 -12.4,1.3 -23,2.1" class="base" fill="none"/>
+<path d="m 168.75,301.25 v 274.75 c 0,45 -20,89 -50,121 s -72,54 -118.75,54 -88.75,-22 -118.75,-54 -50,-76 -50,-121 v -274.75 z" stroke="#fff" class="red"/>
+<g class="white">
+<path d="m -1.53,734.79 c -1.4555,-0.23969 -3.9126,0.0669 -5.7692,-1.3934 -2.47,-1.9421 -1.4907,-9.7869 -1.2678,-14.751 1.1353,-25.354 2.1733,-68.034 3.4634,-127.97 2.1123,-0.28786 3.65,-0.13982 5.0949,0.0787 1.4438,-0.21853 2.9814,-0.36657 5.0937,-0.0787 1.2901,59.939 2.3281,102.62 3.4646,127.97 0.22167,4.964 1.2022,12.809 -1.269,14.751 -1.8566,1.4604 -4.3137,1.1526 -5.7692,1.3934 h -3.0412 z"/>
+<path d="m -17.41,734.06 c 1.4719,-0.10574 3.8903,0.42296 5.8724,-0.86238 2.6354,-1.7095 2.8524,-9.7329 3.08,-14.696 1.1623,-25.353 3.508,-67.829 7.6458,-127.64 -2.0771,-0.47819 -3.6229,-0.47 -5.0808,-0.38419 -0.22753,-0.0564 -0.45858,-0.10927 -0.69315,-0.16096 -9.527,59.168 -13.124,101.14 -19.648,126.46 -0.9,3.4953 -2.8348,12.254 0.17592,15.1 1.717,1.6225 4.1918,1.5403 5.6191,1.9104 l 3.0283,0.27611 z"/>
+<path d="m -36.1,731.4 c 1.4754,0.0271 3.8364,0.77426 5.9264,-0.32662 2.7796,-1.4639 2.6671,-9.4721 3.9056,-14.28 6.5246,-25.321 10.122,-67.309 19.653,-126.5 -2.0255,-0.66617 -3.5643,-0.79777 -5.0245,-0.84475 -15.15,57.536 -19.692,98.095 -31.451,123.15 -1.0884,3.4718 -4.0522,12.691 -1.2186,15.903 1.5646,1.7729 4.0358,1.9139 5.4244,2.4132 l 3,0.54985 z"/>
+<path d="m -54.84,726.08 c 1.4649,0.17387 3.9349,1.5391 6.1234,0.65089 2.911,-1.1808 3.3661,-9.747 5.4608,-14.209 11.813,-25.169 16.342,-65.982 31.66,-123.94 -1.9504,-0.86239 -3.4693,-1.1455 -4.9178,-1.337 -1.3277,-0.60976 -1.0755,-0.92347 -3.1854,-1.2325 -17.797,57.241 -23.578,97.056 -40.366,121.76 -2.7104,3.9876 -4.6937,11.975 -2.8559,14.525 1.3816,1.9186 3.827,2.304 5.1594,2.9384 l 2.9228,0.8424 z"/>
+<path d="m 17.39,734.06 c -1.4719,-0.10574 -3.8904,0.42296 -5.8725,-0.86238 -2.6366,-1.7095 -2.8524,-9.7329 -3.08,-14.696 -1.1635,-25.353 -3.508,-67.829 -7.6458,-127.64 2.0771,-0.47819 3.6218,-0.47 5.0808,-0.38419 0.22753,-0.0564 0.45741,-0.10927 0.69315,-0.16096 9.527,59.168 13.124,101.14 19.648,126.46 0.9,3.4953 2.8336,12.254 -0.17593,15.1 -1.7182,1.6225 -4.1918,1.5403 -5.6203,1.9104 l -3.0283,0.27611 z"/>
+<path d="m 36.1,731.4 c -1.4743,0.0271 -3.8364,0.77426 -5.9264,-0.32662 -2.7785,-1.4639 -2.6659,-9.4721 -3.9044,-14.28 -6.5246,-25.321 -10.122,-67.309 -19.655,-126.5 2.0255,-0.66617 3.5655,-0.79777 5.0257,-0.84475 15.151,57.536 19.693,98.095 31.451,123.15 1.0884,3.4718 4.0534,12.691 1.2186,15.903 -1.5634,1.7729 -4.0358,1.9139 -5.4244,2.4132 l -3,0.54985 z"/>
+<path d="m 54.83,726.08 c -1.4649,0.17387 -3.9349,1.5391 -6.1234,0.65089 -2.911,-1.1808 -3.3661,-9.747 -5.462,-14.209 -11.812,-25.169 -16.341,-65.982 -31.659,-123.94 1.9504,-0.86239 3.4693,-1.1455 4.9178,-1.337 1.3277,-0.60976 1.0755,-0.92347 3.1854,-1.2325 17.797,57.241 23.578,97.056 40.366,121.76 2.7093,3.9876 4.6937,11.975 2.8559,14.525 -1.3816,1.9186 -3.827,2.304 -5.1594,2.9384 l -2.9227,0.8424 z"/>
+<path d="m -44.91,682.84 c 1.3406,0.0811 3.3602,0.89879 5.4643,-0.10457 2.7984,-1.3347 4.6257,-9.0667 6.1258,-13.873 11.915,-23.54 22.791,-65.347 40.632,-123.45 -1.7276,-0.72844 -3.108,-0.91407 -4.4322,-1.0128 -1.1752,-0.51695 -2.4536,-0.98809 -4.3782,-1.162 -19.215,57.497 -27.843,99.074 -46.623,121.97 -3.101,3.7796 -5.4068,12.025 -3.9314,14.414 1.1072,1.7976 3.3368,2.0267 4.5143,2.5672 l 2.6295,0.64855 z"/>
+<path d="m -29.71,685.82 c 1.3441,-0.0271 3.4494,0.62739 5.4268,-0.54046 2.6319,-1.5521 3.5619,-9.3945 4.5014,-14.3 4.8016,-25.052 13.658,-67.097 26.244,-126.12 -1.8038,-0.58628 -3.2,-0.6603 -4.5284,-0.65442 -1.2292,-0.42063 -2.5556,-0.78719 -4.492,-0.80716 -14.871,58.657 -18.311,102.58 -32.376,125.13 -2.5627,4.1086 -4,12.402 -2.2566,14.663 1.3101,1.7 3.5561,1.7506 4.8,2.1947 l 2.6917,0.4359 z"/>
+<path d="m -14.24,687.58 c 1.3347,-0.13394 3.5045,0.34894 5.34,-0.97048 2.4407,-1.7565 2.4642,-9.6354 2.8348,-14.592 1.8977,-25.321 5.876,-67.88 11.614,-127.64 -1.8625,-0.43942 -3.2605,-0.403 -4.5823,-0.28902 -1.2726,-0.32076 -2.6342,-0.58041 -4.5636,-0.4453 -8.0551,59.573 -12.736,102.71 -17.833,127.14 -1.0169,4.8723 -2.5521,12.664 -0.55829,14.776 1.4989,1.5873 3.7402,1.458 5.0186,1.8023 l 2.7304,0.21854 z"/>
+<path d="m 44.9,682.84 c -1.3406,0.0811 -3.3602,0.89879 -5.4643,-0.10457 -2.7984,-1.3347 -4.6257,-9.0667 -6.1258,-13.873 -11.915,-23.54 -22.791,-65.347 -40.632,-123.45 1.7276,-0.72844 3.108,-0.91407 4.4322,-1.0128 1.174,-0.51695 2.4536,-0.98809 4.3782,-1.162 19.215,57.497 27.843,99.074 46.623,121.97 3.1,3.7796 5.4068,12.025 3.9314,14.414 -1.1072,1.7976 -3.3368,2.0267 -4.5143,2.5672 l -2.6295,0.64855 z"/>
+<path d="m 29.7,685.82 c -1.3429,-0.0271 -3.4482,0.62739 -5.4268,-0.54046 -2.6319,-1.5521 -3.5608,-9.3945 -4.5,-14.3 -4.8016,-25.052 -13.659,-67.097 -26.245,-126.12 1.805,-0.58628 3.2,-0.6603 4.5296,-0.65442 1.228,-0.42063 2.5545,-0.78719 4.4908,-0.80716 14.871,58.657 18.311,102.58 32.378,125.13 2.5627,4.1086 4,12.402 2.2554,14.663 -1.3101,1.7 -3.5549,1.7506 -4.7887,2.1947 l -2.6929,0.4359 z"/>
+<path d="m 14.22,687.58 c -1.3347,-0.13394 -3.5045,0.34894 -5.34,-0.97048 -2.4407,-1.7565 -2.4642,-9.6354 -2.836,-14.592 -1.8977,-25.321 -5.876,-67.88 -11.614,-127.64 1.8636,-0.43942 3.2605,-0.403 4.5823,-0.28902 1.2726,-0.32076 2.6342,-0.58041 4.5647,-0.4453 8.054,59.573 12.735,102.71 17.832,127.14 1.0169,4.8723 2.5533,12.664 0.55945,14.776 -1.5,1.5873 -3.7402,1.458 -5.0198,1.8023 l -2.7304,0.21854 z"/>
+<path d="m -1.38,688.09 c -1.3124,-0.23967 -3.5279,0.0682 -5.2028,-1.3923 -2.2284,-1.9421 -1.3441,-9.7881 -1.1435,-14.752 1.0239,-25.356 1.9598,-68.036 3.1233,-127.98 1.9059,-0.28784 3.2922,-0.13981 4.5952,0.0787 1.303,-0.21736 2.6882,-0.36656 4.594,-0.0787 1.1635,59.942 2.1,102.62 3.1233,127.98 0.2,4.964 1.0849,12.81 -1.1424,14.752 -1.676,1.4604 -3.8915,1.1526 -5.2039,1.3923 h -2.7433 z"/>
+<path d="m -34.4,647.97 c 1.0274,0.0811 2.5744,0.9 4.1859,-0.1034 2.1428,-1.3358 3.542,-9.0667 4.6914,-13.873 9.1259,-23.54 17.457,-65.347 31.123,-123.45 l -6.7485,-2.1748 c -14.718,57.497 -21.327,99.074 -35.711,121.97 -2.375,3.7797 -4.1413,12.025 -3.0119,14.415 0.84914,1.7964 2.5568,2.0267 3.4576,2.566 0.67013,0.21571 1.348566,0.43489 2.0135,0.6502 z"/>
+<path d="m -22.76,650.96 c 1.0298,-0.0271 2.6413,0.62623 4.1566,-0.54046 2.0161,-1.552 2.728,-9.3945 3.4482,-14.3 3.6769,-25.054 10.461,-67.1 20.101,-126.12 l -6.9092,-1.46158 c -11.391,58.657 -14.025,102.58 -24.8,125.13 -1.9634,4.1086 -3.0623,12.402 -1.7288,14.663 1,1.7 2.7234,1.7506 3.6687,2.1947 0.685946,0.14602 1.380296,0.29163 2.0625,0.43334 z"/>
+<path d="m -10.91,652.72 c 1.0216,-0.13511 2.6835,0.34896 4.0897,-0.97164 1.8695,-1.7553 1.8871,-9.6354 2.1721,-14.592 1.452,-25.32 4.5,-67.88 8.8949,-127.64 l -7,-0.73314 c -6.1692,59.573 -9.7546,102.71 -13.659,127.14 -0.77877,4.8723 -1.9551,12.664 -0.42808,14.776 1.1482,1.5873 2.8653,1.4581 3.8446,1.8011 0.697444,0.0733 1.394932,0.14655 2.09238,0.21968 z"/>
+<path d="m 34.39,647.97 c -1.0274,0.0811 -2.5744,0.9 -4.1859,-0.1034 -2.1428,-1.3358 -3.542,-9.0667 -4.6914,-13.873 -9.1259,-23.54 -17.457,-65.347 -31.123,-123.45 l 6.7485,-2.1748 c 14.718,57.497 21.327,99.074 35.711,121.97 2.375,3.7797 4.1413,12.025 3.0119,14.415 -0.84914,1.7964 -2.5568,2.0267 -3.4576,2.566 -0.67013,0.21571 -1.348566,0.43489 -2.0135,0.6502 z"/>
+<path d="m 22.75,650.96 c -1.0286,-0.0271 -2.6413,0.62623 -4.1566,-0.54046 -2.015,-1.552 -2.728,-9.3945 -3.447,-14.3 -3.678,-25.054 -10.462,-67.1 -20.101,-126.12 l 6.9081,-1.46158 c 11.391,58.657 14.025,102.58 24.8,125.13 1.9622,4.1086 3.0623,12.402 1.7276,14.663 -1,1.7 -2.7234,1.7506 -3.6675,2.1947 -0.686313,0.14602 -1.381029,0.29163 -2.0636,0.43334 z"/>
+<path d="m 10.89,652.72 c -1.0227,-0.13511 -2.6846,0.34896 -4.0897,-0.97164 -1.8707,-1.7553 -1.8883,-9.6354 -2.1721,-14.592 -1.4532,-25.32 -4.5,-67.88 -8.8949,-127.64 l 7,-0.73314 c 6.1704,59.573 9.7558,102.71 13.66,127.14 0.77877,4.8723 1.9551,12.664 0.42692,14.776 -1.1482,1.5873 -2.8641,1.4581 -3.8434,1.8011 -0.697248,0.0732 -1.395611,0.14654 -2.09222,0.21968 z"/>
+<path d="m -1.06,653.23 c -1,-0.23967 -2.7034,0.0681 -3.9865,-1.3923 -1.7065,-1.9421 -1.0298,-9.7869 -0.87611,-14.751 0.78463,-25.357 1.5024,-68.037 2.3938,-127.98 h 7.0383 c 0.89136,59.942 1.6091,102.62 2.3938,127.98 0.15364,4.964 0.83038,12.809 -0.87612,14.751 -1.2831,1.4604 -2.9802,1.1526 -3.9865,1.3923 h -2.1 z"/>
+<path d="m 18.1,575.2 c 0,4.8 -11.9,55.4 -18.1,55.4 -6.2,0 -18.1,-50.6 -18.1,-55.4 z"/>
+</g>
+<g id="b">
+<g class="gold">
+<path d="m82,638 c 0.3,0 0.6,0.7 0.7,1 1,3 4.9,8 7.9,11 4.7,4.7 3.4,12 0.4,16 -3.3,4.4 -5.2,9.2 -5.9,12.7 -0.5,2.5 -1.2,7.6 -0.6,15.6 0.3,4 2.7,5.9 4.9,7.7 1.1,0.9 -0.8,3.3 -4.4,6 -0.4,0.3 -1.4,0.9 -2,3 -0.1,0.3 -1.9,0.3 -2,0 -0.6,-2.1 -1.6,-2.7 -2,-3 -3.6,-2.7 -5.5,-5.1 -4.4,-6 2.2,-1.8 4.6,-3.7 4.9,-7.7 0.6,-8 -0.1,-13.1 -0.6,-15.6 -0.7,-3.5 -2.6,-8.3 -5.9,-12.7 -3,-4 -4.3,-11.3 0.4,-16 3,-3 6.9,-8 7.9,-11 0.1,-0.3 0.4,-1 0.7,-1 z"/>
+<path id="c" d="m 94.7,701.2 c -8,6 -15.4,-8.4 -8.2,-27.6 5.4,-14.4 31.3,-8.4 16.6,10.5 -0.7,0.9 -1.7,0.5 -1.5,-0.5 0.8,-4 -1.4,-6.3 -5.6,-5.5 -10.5,2 -10.9,22 0.6,17.5 2.1,-0.2 0.1,4.1 -1.9,5.6"/>
+<use x="-164" transform="scale(-1,1)" xlink:href="#c"/>
+<path d="m 76,685.5 a 3.5,3.5 0 0 0 0,7 h 12 a 3.5,3.5 0 0 0 0,-7 z"/>
+<path d="m 88.1,596 c 5,11 11,21 17,30 3,1 5,2.5 7,3.1 2,0.6 16,0.4 16.5,-0.6 4.5,-3.5 11.5,-0.5 8.5,3.5 2,2 -2,7.4 -5,5 -3,-2.4 -13,0 -16,-1 1,3 11,4.7 17,5 6,0.3 5,6 3,11 l -2,1 c -2,4 -7.8,2.8 -8,-1 -0.2,-3.8 -14,-9 -16,-12 2,6 8,12 11,18 3,3 5,3 1,9 l -7,1 c -6,0 -7,-2 -6,-7 1,-5 -3.7,-14 -5,-16.6 -1.2,-2.4 -1.5,-4.9 -2.7,-6.3 -2.1,-2.8 -12.8,-7.4 -15.3,-6.1 -5,2.6 -8.5,1 -9,-4 1,-1 0,-8 3.6,-8.6 3,-0.5 4.4,1 6.9,3 4,3.2 6.2,5 7.4,4.7 3.2,-0.8 -5.7,-5.1 -13.7,-15.7 -8,-10.6 -11.2,-26.4 6.8,-15.4 z"/>
+<path d="m 136.92,634.54 c 4.0123,-2.3522 6.3181,-2.2593 7.8745,-0.50873 0.85501,0.96225 1.9481,0.4641 1.3089,-1.0468 -2.6682,-6.3139 -6.9233,-7.1 -10.741,-4.1403 -1.0696,1 -1.9282,1.8422 -2.7879,2.6917 0.64038,0.94815 3.8282,2.277 4.3454,3 z"/>
+<path d="m 79.46,628.89 c -4.2586,-2.9 -8.2498,-3.4683 -10.436,-1.8387 -1.2022,0.89528 -2.3903,0.25262 -1.3324,-1.236 4.417,-6.22 9.5939,-6.536 13.5,-3.0289 1.0603,1.1491 1.9035,2.1301 2.7456,3.1088 -1.337,1.4663 -4.2914,3.1194 -4.4768,3 z"/>
+<path d="m 113.01,664.55 c -0.12901,-0.25729 0.97815,-5.4398 2.7116,-7.0588 1.3488,1.0809 2.8629,2.0349 4.2868,3.5224 4.2598,4.4517 4.241,11.011 -2.4137,16.728 -1.6432,1.4122 -2.3926,-0.0764 -1.7288,-1.7 1.1353,-2.7763 -0.24395,-6.3186 -2.8559,-11.492 z"/>
+<path d="m 129.6,650.9 c 3.956,1.6437 5.3212,3.7268 5.177,6.4631 -0.0786,1.505 0.90895,2.0655 1.4672,0.31605 4.8368,-11.243 -0.18062,-13.347 -7.43,-12.938 -0.41636,1.9586 0.61457,6.0872 0.7858,6.15885 z"/>
+</g>
+<path d="m 76.3,603.9 c 1.9,-1.8 3.9,-3.7 5.8,-1.5 1.9,2.2 0.9,4.3 -1.9,7.2 1.8,-1.2 4,-5.2 6,-2.4 2,2.8 0.2,5.2 -2,7.5 2.3,-1.9 4.1,-4.8 6.1,-2.4 2,2.4 0,4.8 -1.8,6.6 2,-1.6 4,-3.1 5.2,-1.7 1.8,2.1 0.3,3.5 -1.6,5.3 2.2,-1.6 3.7,-3.2 5.3,-1.4 1.6,1.8 -0.5,4 -1.7,4.8" class="base" fill="none"/>
+<g class="white">
+<path d="m 76.65,469 c -0.18179,8.6778 1.3558,66.559 1.8402,74.738 0.48321,8.1444 4.0921,13.695 7.9378,16.877 3.5268,-4.8488 5.632,-11.392 6.134,-19.156 0.25451,-3.9582 -0.47382,-58.733 -0.77759,-70 z"/>
+<path d="m 114.27,454.83 2.456,79.583 c 0.77525,7.06 -8.4175,49.073 -13.442,57.361 -12.436,-5.3176 -15.062,-33.821 -12.721,-61.594 2.3398,-27.775 -0.39173,-51.76 -2.2882,-56.751 z"/>
+<path d="m 129.01,467.85 -1.6889,79.603 c 0.4058,7.094 -10.96,48.541 -16.409,56.542 -12.613,-9.7893 -10.075,-49.808 -8.1419,-61.917 3.8516,-24.13 3.1972,-52.079 1.8684,-56.621 z"/>
+<path d="m 139.95,486.7 -20.911,-0.53341 c 1.7769,8.6837 0.35537,35.655 -3.2523,56.214 -3.3825,19.277 -8.1067,69.272 11.96,81.276 12.444,-26.379 2.9696,-52.014 9.2409,-74.92 z"/>
+<path d="m 60,454.38 4.1026,74.644 c 0.72951,8.1244 4.5037,13.556 8.4445,16.614 3.379,-4.9592 5.2849,-11.567 5.55,-19.342 0.13605,-3.9641 -2.2519,-58.69 -2.8958,-69.933 z"/>
+<path d="m 97.15,407.23 c 0.5571,18.646 0.87495,59.108 0.75883,62.547 -0.26506,7.7755 -3.3309,17.672 -6.7087,22.631 -3.9408,-3.0583 -7.7162,-8.4898 -8.4457,-16.615 -0.6,-6.6793 -0.81044,-39.483 -0.9113,-55.923 z"/>
+<path d="m 82.21,419.25 c 0.37063,20.09 0.15364,51.736 0.0656,54.309 -0.26506,7.7755 -2.1721,14.383 -5.55,19.344 -3.9408,-3.0594 -8.1032,-8.6849 -8.8316,-16.809 -0.44802,-5 -1.8378,-26.451 -1.968,-42.913 z"/>
+<path d="m 95.06,405.55 14.24,-20.52 c 2.8782,10.123 6.3873,82.767 2.2683,88.725 -0.26506,7.7755 -3.0717,14.355 -6.4507,19.314 -3.9408,-3.0583 -9.8226,-8.5556 -8.1231,-16.78 1.6983,-8.2243 -0.20642,-62.257 -1.9345,-70.739 z"/>
+<path d="m 124.26,451.24 0.96642,22.814 c -0.26623,7.7767 -2.1721,14.383 -5.55,19.344 -3.942,-3.0583 -8.9606,-8.4746 -8.4457,-16.615 2,-31.459 -1.4473,-61.093 -5.4526,-89.577 l 12.451,-7.6333 z"/>
+<path d="m 138.5,471.82 -3.861,14.631 c -0.26624,7.7755 -5.0667,14.196 -8.4457,19.156 -3.9408,-3.0583 -7.5203,-8.088 -6.5152,-16.18 5.7786,-46.464 3.7132,-77.204 -6.0331,-115.07 22.039,15.045 32.255,46.787 24.855,97.453 z"/>
+<path d="m 137.37,486.22 20.223,-6.7169 c 2.5768,20.221 -1.384,45.621 -6.8295,79.114 -4.6762,28.76 -2.2178,51.522 1.357,66.121 -21.575,-2.9549 -30.695,-30.772 -19.88,-83.093 2.8312,-13.695 5.6766,-31.201 5.1295,-55.4251 z"/>
+<path d="m 129.5394,392.7773 c 4.9635,24.275 8.2358,52.876 4.4838,84.249 -1.3922,11.641 -3.861,21.161 -7.4804,28.518 14.559,-1.6531 23.89,-15.872 22.683,-40.67 l -3.27,-69.313 z"/>
+<path d="m 140.10592,395.9337 c 1.0896,6.2892 4.831,13.704 5.605,21.729 2.5662,26.596 2.5756,59.898 -5.4162,81.186 14.559,-1.6531 19.556,-14.853 20.028,-39.678 0.38938,-20.523 0.45624,-44.72 -4.6926,-72.661 z"/>
+<path d="m 109.85,389.97 13.435,-1.5673 c 2.4688,12.704 4.3571,21.686 4.8146,26.212 0.8984,8.8764 -1.7921,17.014 -4.8673,23.075 -4.9541,-2.9866 -7.2552,-9.5108 -9.3394,-18.659 z"/>
+<path d="m 75,418.58 11.924,0.12454 c 0.40815,10.961 0.70371,18.379 0.50902,22.241 -0.38235,7.5758 -2.2718,14 -5.5065,18.795 -3.6218,-3.0195 -7.0488,-8.3488 -7.5895,-16.274 -0.54303,-7.9576 0.58876,-16.429 0.66298,-24.88654 z"/>
+<path d="m 74.063,424.78164 c 0.027,10.969 0.0645,18.392 -0.26389,22.246 -0.64507,7.557 -2.7574,13.906 -6.1563,18.59 -3.5162,-3.144 -6.7544,-8.5897 -7.0195,-16.528 z"/>
+<path d="m 87.14,412.42 11.895,-0.84475 c 1.2937,10.893 2.1897,18.263 2.3082,22.127 0.23339,7.5816 -1.1306,14.133 -3.9666,19.18 -3.8552,-2.714 -7.7021,-7.7485 -8.882,-15.603 -1.1857,-7.8883 -0.74359,-16.423 -1.3546,-24.85925 z"/>
+<path d="m 111.326,394.1614 c 2.2249,8.8235 5.2309,37.867 -0.11142,50.133 -4.3466,-2.9537 -8.726,-8.4934 -10.188,-17.225 -1.4672,-8.7695 -1.907,-18.098 -2.74658,-27.4894 z"/>
+<path d="m 64.62648,568.276 19.732,10.136 c 5.6825,12.56 11.058,19.246 17.873,25.141 -9.8777,1.8446 -18.248,-0.11044 -23.641,-7.3561 -7.2764,-9.7752 -11.167,-15.697 -13.58048,-17 z"/>
+<path d="m 68.769,575.6649 c 4.8333,9.8527 8.1232,16.512 9.493,20.127 2.687,7.0905 3.4212,13.768 2.178,19.535 -4.7864,-1.2184 -10.314,-4.6326 -14.051,-11.652 z"/>
+<path d="m 66.233,578.6885 c 2.2847,10.735 3.8528,18 4.3,21.839 0.8773,7.5323 -0.0375,14.187 -2.6495,19.478 -4.3442,-2.3522 -8.8726,-7.0165 -10.786,-14.736 -1.9211,-7.752 -2.1557,-16.298 -3.5083,-24.6495 z"/>
+<path d="m 40.4882,585.2526 c 6.6547,12.071 8.7928,20.385 9.4379,29.382 7.3796,-6.8309 10.818,-14.723 8.2428,-23.384 -3.474,-11.687 -6.853,-25.118 -6.4589,-27.8406 z"/>
+<path d="m 60.405,553.8798 c 4.261,10.115 7.1638,16.951 8.3249,20.639 2.2765,7.2327 2.6284,13.941 1.0556,19.629 -4.709,-1.4921 -10.675,-4.5751 -14,-11.796 -3.3414,-7.2515 -4.5342,-16.245 -7.4315,-24.1918 z"/>
+<path d="m 59.1848,533.335 c 2.7691,-0.75076 6.4483,5.7288 10.048,9.5096 0.83037,0.87178 1.7839,1.6919 2.5087,2.7669 1.5142,2.2441 2.7374,4.9193 3.4165,7.9552 3.0119,13.456 7.4,20.454 12.874,27.615 -10.045,-0.20796 -17.844,-3.829 -21.652,-12.023 -5.1371,-11.055 -7.7432,-17.645 -9.84,-19.4187 z"/>
+<path d="m 29.13265,597.4398 c -8.5032,10.843 -11.947,18.704 -14.025,27.481 -6.1891,-7.9294 -8.3178,-16.27 -4.3876,-24.406 14.548612,-16.72182 14.442474,-16.64396 18.4126,-3.075 z"/>
+<path d="m 26.7731,589.5118 c -8.5032,10.843 -17.338,19.044 -19.415,27.819 -6.1903,-7.9282 -8.8233,-16.271 -4.8943,-24.407 z"/>
+<path d="m 42.32265,586 c -8.5043,10.844 -11.947,18.706 -14.025,27.482 -6.1903,-7.9294 -8.319,-16.271 -4.3888,-24.407 z"/>
+</g>
+</g>
+<use transform="scale(-1,1)" xlink:href="#b"/>
+<path d="m 0,387.5 c -1.9,-21.5 -5.8,-36.5 -15.1,-51.5 4.3,0.5 8.8,-0.4 6.7,-10.8 -6.1,-1.4 -8.4,0.9 -25.4,-7.2 -13.9,-6.5 -34.3,-8.9 -33,-1.9 2.6,14 11.8,24 21.3,31.1 4.5,11.2 15.5,32.4 7.9,44.1 -7.6,11.7 -13.9,17.3 -21.5,22.1 1.7,0.6 3.3,1.1 4.9,1.4 -1.2,1.6 -11,4.6 -12.2,3.8 -7.8,-5.2 -15,-17.9 -21.4,-25.2 -18.3,-20.7 -27.9,-36.9 -24.2,-49.6 4.1,-14.1 21,-29.5 -0.7,-26.8 -21.7,2.7 -39.9,33.1 -45.3,68.2 -2,13 -3.4,24.4 -4.9,33.5 11.8,-4.2 17.1,-8.5 20.2,-13.7 -1.4,5 -2.5,9.7 -3.2,14.1 9.7,-1.7 16.4,-6.6 19.2,-15.1 1,-3.4 2.3,-6.4 3.6,-8.9 3,1.1 6.8,1 11.5,-0.1 1.8,4.2 15.1,19.1 22.3,30 8,12.3 20.2,21.7 24.2,22.3 h 130.2 c 4,-0.6 16.2,-10 24.2,-22.3 7.2,-10.9 20.5,-25.8 22.3,-30 4.7,1.1 8.5,1.2 11.5,0.1 1.3,2.5 2.6,5.5 3.6,8.9 2.8,8.5 9.5,13.4 19.2,15.1 -0.7,-4.4 -1.8,-9.1 -3.2,-14.1 3.1,5.2 8.4,9.5 20.2,13.7 -1.5,-9.1 -2.9,-20.5 -4.9,-33.5 -5.4,-35.1 -23.6,-65.5 -45.3,-68.2 -21.7,-2.7 -4.8,12.7 -0.7,26.8 3.7,12.7 -5.9,28.9 -24.2,49.6 -6.4,7.3 -13.6,20 -21.4,25.2 -1.2,0.8 -11,-2.2 -12.2,-3.8 1.6,-0.3 3.2,-0.8 4.9,-1.4 -7.6,-4.8 -13.9,-10.4 -21.5,-22.1 -7.6,-11.7 3.4,-32.9 7.9,-44.1 9.5,-7.1 18.7,-17.1 21.3,-31.1 1.3,-7 -19.1,-4.6 -33,1.9 -17,8.1 -19.3,5.8 -25.4,7.2 -2.1,10.4 2.4,11.3 6.7,10.8 -9.3,15 -13.2,30 -15.1,51.5 z" class="white"/>
+<g id="d">
+<g class="gold">
+<path d="m 40.4,356.4 19.1,2.8 c 14.8,0.7 23.4,-4 25.3,-13.5 -5.5,6.6 -12.3,9.9 -19.8,8.1 -10,-2.4 -16.3,-4.6 -18.6,-4 z"/>
+<path d="m 76.2,317.8 c 16.6,1.8 15.8,12.5 0.3,28 -3.2,3.1 -3.8,3 -4.6,-0.2 -1.4,-5.6 -7.1,-8.3 -10.1,-4.4 -2,2.6 -1.7,4.3 -8.7,3.3 -8.9,7.5 -16,12.8 -4.5,12.3 4.6,-0.2 9.1,2.8 15.7,2.5 -1.9,3.9 -2.3,4.4 -3.4,4.6 -6.6,1 -13.2,-2.7 -19.8,-1.5 -14.3,2.6 22.9,-38.7 22.5,-40.3 -1,-4 8.9,-11.6 12.6,-4.3 z"/>
+</g>
+<g fill="#21231e">
+<path d="m52.5,330.9 2.1897,-2.1935 c 1.0673,-1.3511 0.45037,-3.1511 -1.8531,-5.401 -1.6842,0.73078 -3.0318,1.2936 -4.3806,1.8563 0.8984,3.0371 2.2472,4.951 4.044,5.7382 z"/>
+<circle cx="78" cy="326" r="1.4"/>
+</g>
+<g class="base" stroke-linejoin="round" fill="none">
+<path d="m 147.7,496.7 c -0.8,18 -2,32 -5.5,47 s -4,25 -4.5,40"/>
+<path d="m 140.3,498.8 c 8.4,-22.3 8.2,-56.8 5.3,-79.6 s -17.2,-52.7 -22.4,-56.1"/>
+<path d="m 76.2,317.8 q -1,5 -8.4,10.6"/>
+<path d="m 31.6,407.2 q 10.7,12 27.4,6.3"/>
+<path d="m 30.4,401.1 q 0,4.5 4.7,16.5 -10,-2.3 -14.9,-9.1"/>
+<path d="m 21.54,400.3 q -1.3,10.3 -5.5,16 -5.6,-4.1 -7.8,-12"/>
+<path d="m 42.8,327.6 c 1.6,3.1 4.5,7.1 8,5 5,-3 5.9,-6.8 8.2,-10.3"/>
+<path d="m 38.1,328.2 c 2.1,0.1 4.4,-0.8 9.5,-2.6 5.1,-1.8 10.6,-4 15.8,-3.6"/>
+<path d="m 24.8,334 q -3.9,1.2 -9.7,2"/>
+</g>
+</g>
+<use transform="scale(-1,1)" xlink:href="#d"/>
+<path d="m -8.9,398.7 q .8,11.7 8.9,22.2 8.2,-10.5 8.9,-22.2" class="white"/>
+<path d="m 67.5,422.0 v 108.5 c 0,19.4 -8,37.1 -20,49.8 -12,12.7 -29.5,21.7 -47.5,21.7 -18,0 -35.5,-9 -47.5,-21.7 -12,-12.7 -20,-30.4 -20,-49.8 v -108.5 z" class="red" stroke="#21231e"/>
+<path d="m67,488.5 v 28 h -53.5 v 83 q -13.5,3 -27,0 v -83 h -53.5 v -28 h 53.5 v -66 h 27 v 66 z" class="base" fill="#fff"/>
+<path id="e" d="m 23,528 c 8,-3 30,-10 30,7.5 0,8.4 -10.2,13.9 -13,6.5 -1.4,-3.7 0.1,-6.1 2.2,-6.9 s 4.4,1 3.8,3.7 c 8.8,-4.7 -8.3,-14.3 -15.5,-1.7 -2,3.5 3.7,7.6 3.7,10.4 s -5.7,6.9 -3.7,10.4 c 7.2,12.6 24.3,3 15.5,-1.7 0.6,2.7 -1.7,4.5 -3.8,3.7 s -3.6,-3.2 -2.2,-6.9 c 2.8,-7.4 13,-1.9 13,6.5 0,17.5 -22,10.5 -30,7.5 z" class="white"/>
+<use xlink:href="#e" transform="scale(-1,1)" y="-90"/>
+<use xlink:href="#e" y="-90"/>
+<use xlink:href="#e" transform="scale(-1,1)"/>
+</g>
+</svg>
\ No newline at end of file
diff --git a/sitemap.xml b/sitemap.xml
new file mode 100644 (file)
index 0000000..8759d91
--- /dev/null
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- generator="Milkys Sitemap Generator, https://github.com/mcmilk/sitemap-generator" -->
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
+<url>
+ <loc>https://xolatile.top/by.html</loc>
+ <lastmod>2025-05-28</lastmod>
+ <changefreq>weekly</changefreq>
+</url>
+<url>
+ <loc>https://xolatile.top/irc.html</loc>
+ <lastmod>2025-05-29</lastmod>
+ <changefreq>weekly</changefreq>
+</url>
+<url>
+ <loc>https://xolatile.top/.well-known/mta-sts.txt</loc>
+ <lastmod>2025-05-29</lastmod>
+ <changefreq>weekly</changefreq>
+</url>
+<url>
+ <loc>https://xolatile.top/files/README</loc>
+ <lastmod>2025-05-21</lastmod>
+ <changefreq>weekly</changefreq>
+</url>
+<url>
+ <loc>https://xolatile.top/files/minecraft/README</loc>
+ <lastmod>2025-05-10</lastmod>
+ <changefreq>weekly</changefreq>
+</url>
+<url>
+ <loc>https://xolatile.top/chud/rerun</loc>
+ <lastmod>2025-05-29</lastmod>
+ <changefreq>weekly</changefreq>
+</url>
+<url>
+ <loc>https://xolatile.top/chud/log</loc>
+ <lastmod>2025-05-29</lastmod>
+ <changefreq>weekly</changefreq>
+</url>
+<url>
+ <loc>https://xolatile.top/chud/spell</loc>
+ <lastmod>2025-05-29</lastmod>
+ <changefreq>weekly</changefreq>
+</url>
+<url>
+ <loc>https://xolatile.top/chud/irc.html</loc>
+ <lastmod>2025-05-29</lastmod>
+ <changefreq>weekly</changefreq>
+</url>
+<url>
+ <loc>https://xolatile.top/chud/home.html</loc>
+ <lastmod>2025-05-29</lastmod>
+ <changefreq>weekly</changefreq>
+</url>
+<url>
+ <loc>https://xolatile.top/chud/weather.html</loc>
+ <lastmod>2025-05-29</lastmod>
+ <changefreq>weekly</changefreq>
+</url>
+<url>
+ <loc>https://xolatile.top/chud/1</loc>
+ <lastmod>2025-05-29</lastmod>
+ <changefreq>weekly</changefreq>
+</url>
+<url>
+ <loc>https://xolatile.top/chud/up/index.php</loc>
+ <lastmod>2025-05-29</lastmod>
+ <changefreq>weekly</changefreq>
+</url>
+<url>
+ <loc>https://xolatile.top/chud/up/aliases</loc>
+ <lastmod>2025-05-29</lastmod>
+ <changefreq>weekly</changefreq>
+</url>
+<url>
+ <loc>https://xolatile.top/chud/404.html</loc>
+ <lastmod>2025-05-29</lastmod>
+ <changefreq>weekly</changefreq>
+</url>
+<url>
+ <loc>https://xolatile.top/chud/help.html</loc>
+ <lastmod>2025-05-29</lastmod>
+ <changefreq>weekly</changefreq>
+</url>
+<url>
+ <loc>https://xolatile.top/chud/index.html</loc>
+ <lastmod>2025-05-29</lastmod>
+ <changefreq>weekly</changefreq>
+</url>
+<url>
+ <loc>https://xolatile.top/404.html</loc>
+ <lastmod>2025-05-21</lastmod>
+ <changefreq>weekly</changefreq>
+</url>
+<url>
+ <loc>https://xolatile.top/index.html</loc>
+ <lastmod>2025-05-29</lastmod>
+ <changefreq>weekly</changefreq>
+</url>
+</urlset>
diff --git a/style.css b/style.css
new file mode 100644 (file)
index 0000000..ece2839
--- /dev/null
+++ b/style.css
@@ -0,0 +1,115 @@
+body {
+margin: auto;
+width: 50%;
+}
+footer {
+margin-top: 2em;
+}
+h1, h2, h3 {
+padding-left: 3em;
+}
+h4 {
+padding-left: 1em;
+}
+p {
+padding-left: 1em;
+}
+pre {
+font-weight: bold;
+}
+a {
+text-decoration: none;
+}
+a:active {
+color: green;
+}
+#join {}
+#register {}
+#links {
+padding-top: 1em;
+}
+#title {
+padding: 0.5em;
+font-size: 3em;
+}
+#flag {
+
+}
+#back {
+font-size: 11px;
+padding-bottom: 1em;
+}
+code {
+white-space: pre-wrap;
+font-size: 0.7em;
+padding: 1em;
+}
+
+/* stolen from darkreader static */
+html,
+body,
+:not([style*="background-color:"]):not(iframe) {
+    background-color: black !important;
+}
+html,
+body,
+:not([style*="color:"]),
+.sr-reader *:not([class*='sr-pivot']) {
+    color: rgb(225, 253, 203) !important;
+}
+h1:not([style*="color:"]),
+h2:not([style*="color:"]),
+h3:not([style*="color:"]),
+h4:not([style*="color:"]),
+h5:not([style*="color:"]),
+h6:not([style*="color:"]) {
+    color: rgb(247, 2, 56) !important;
+}
+cite:not([style*="color:"]) {
+    color: rgb(30, 214, 88) !important;
+}
+input:not([style*="background-color:"]),
+textarea:not([style*="background-color:"]),
+button:not([style*="background-color:"]),
+[role="button"] {
+    background-color: rgb(32, 48, 64) !important;
+}
+input:not([style*="background-color:"]):hover,
+textarea:not([style*="background-color:"]):hover,
+button:not([style*="background-color:"]):hover,
+[role="button"]:hover {
+    background-color: rgb(30, 54, 78) !important;
+}
+input:not([style*="background-color:"]):active, input:not([style*="background-color:"]):focus,
+textarea:not([style*="background-color:"]):active, textarea:not([style*="background-color:"]):focus,
+button:not([style*="background-color:"]):active, button:not([style*="background-color:"]):focus,
+[role="button"]:active, [role="button"]:focus {
+    background-color: rgb(29, 56, 83) !important;
+}
+a:not([style*="color:"]) {
+    color: rgb(128, 182, 204) !important;
+}
+a:not([style*="color:"]):hover {
+    color: rgb(142, 193, 217) !important;
+}
+a:not([style*="color:"]):active, a:not([style*="color:"]):focus {
+    color: rgb(155, 203, 230) !important;
+}
+:not([style*="border-color:"]),
+::before,
+::after {
+    border-color: rgb(80, 115, 134) !important;
+}
+div:empty,
+.sr-reader *,
+.sr-backdrop {
+    background-color: rgba(16, 20, 23, 0.5) !important;
+}
+input::placeholder,
+textarea::placeholder {
+    color: rgba(167, 158, 139, 0.5) !important;
+}
+input:not([style*="background-image:"]),
+textarea:not([style*="background-image:"]) {
+    background-image: none !important;
+}
diff --git a/webring.html b/webring.html
new file mode 100644 (file)
index 0000000..d14a11b
--- /dev/null
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html prefix="og: http://ogp.me/ns#" lang="en">
+<head>
+<link rel="canonical">
+<link rel="icon" type="image/png" sizes="32x32" href="/favicon.png">
+<link rel="stylesheet" type="text/css" href="/style.css">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=0.5">
+<title id="title">Xolatile.Top</title>
+</head>
+<body>
+<center>
+<div id="links">
+<span>
+| <a href="https://git.xolatile.top/">Git/Xolatile</a> [<a href="https://xolagit3eapakwcfkcch2qr4kitud4dg57yawc4zdwcjlleebxp4h3qd.onion">Onion</a>]
+| <a href="https://irc.xolatile.top/">IRC/Xolatile</a> [<a href="https://xolairc7mt7smgr356og3kej2bldcmikok42eeo7pzqcbfhfrpklmsid.onion">Onion</a>]
+| <a href="mumble://xolatile.top/">Mumble/Xolatile</a>
+| <a href="https://pufka.xolatile.top/">Pufka/Anon</a>
+| <a href="/chud">Chud/Old</a>
+| [<a href="https://xolatile5ogrf3mcvvla4pgwo22mbpj6suiq6t7hamxdabzjel6luvid.onion">Onion</a>]
+|
+</span>
+</div>
+<a id="back" href="/">&lt; Back</a>
+<center>
+<div id="title">
+Webring
+</div>
+<p style="color:green">&gt; what is Webring, I am literally Indian</p>
+<p>Rather than typing it I'll commit neodigital cyberplagiarism</p>
+<p>Webrings are links with banners. They act as a loose social network. Think of it like: a secret government agency, although here you've spoken to the other webring owner once - instead of working with him for twenty odd years on the force - it's not really like a a secret government agency.</p>
+<p>Here's the xolalite.top banner</p>
+<a href="https://Xolatile.Top/webring"><img alt="Xolatile's website" class="banner" src="/bans/xolatile.top.png"></a>
+<p>
+Download the banner onto your server or use the image link below. Here's the HTML, change to your needs. the link for the image is static, if the site is up the banner is there. Still best to make it static.
+<code>
+&lt;a href="https://Xolatile.Top/webring"&gt;&lt;img alt="Xolatile's website" class="banner" src="/xolatile.top.png"&gt;&lt;/a&gt;
+</code>
+</p>
+<hr>
+<a href="https://chknz.org/webring/"><img alt="chknz's website" class="banner" src="/bans/chknz.org.gif"></a>
+<a href="https://risingthumb.xyz/WebRings" ><img alt="RisingThumb's website" class="banner" src="/bans/risingthumb.xyz.png"></a>
+<a href="https://cozynet.org/links/" ><img alt="CozyNet's website" class="banner" src="/bans/cozynet.org.gif
+"></a>
+</body>
+</html>