<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Snorre Davøen | Frontend Developer | Bergen</title><description>Snorre.io is the personal blog of Snorre Magnus Davøen, a fullstack developer from Bergen, Norway specializing in frontend. I write about web development, programming, and other things.</description><link>https://snorre.io/</link><language>en-us</language><item><title>Welcome to the new Snorre.io</title><link>https://snorre.io/blog/2014-03-26-welcome-to-the-new-snorre-io/</link><guid isPermaLink="true">https://snorre.io/blog/2014-03-26-welcome-to-the-new-snorre-io/</guid><description>Introduction to Snorre.io, a personal blog built on Ghost for sharing experiences, thoughts, and tutorials.</description><pubDate>Wed, 26 Mar 2014 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;http://snorre.io&quot;&gt;Snorre.io&lt;/a&gt; is the new homepage of Snorre Magnus Davøen, me. As you can see it is not quite a homepage yet. Snorre.io will currently serve as a blog where I can post my experiences, my thoughts on various subjects, tutorials on different technologies, and posts presenting my work.&lt;/p&gt;
&lt;p&gt;Snorre.io runs on the Ghost blogging platform. Ghost is currently not very feature rich. As new features are introduced and the Ghost API is stabilized I might add new features to my homepage.&lt;/p&gt;
&lt;p&gt;So long.&lt;/p&gt;</content:encoded></item><item><title>Mosh (mobile shell)</title><link>https://snorre.io/blog/2014-05-11-mosh-mobile-shell/</link><guid isPermaLink="true">https://snorre.io/blog/2014-05-11-mosh-mobile-shell/</guid><description>Mosh as an alternative to SSH: better latency handling, roaming support, and UTF-8. Why it&apos;s a must-have for remote terminals.</description><pubDate>Sun, 11 May 2014 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It was quite a good while ago that an acquaintance of mine made me aware of a great alternative to SSH called &lt;a href=&quot;http://mosh.mit.edu/&quot;&gt;Mosh&lt;/a&gt; (short for mobile shell). Mosh was born out of MIT as a result of a few important factors.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Latency on the Internet is on the increase&lt;/li&gt;
&lt;li&gt;Roaming has become more common&lt;/li&gt;
&lt;li&gt;SSH does not properly support UTF-8&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;latency&quot;&gt;Latency&lt;/h2&gt;
&lt;p&gt;So why is latency on the Internet an issue when using SSH? Well, if you have ever spent time on a connection with high latency you will know the frustration of using SSH. The problem of course is that SSH is designed so that the user’s key strokes are passed on to the terminal session at the server and the output buffer from the server is passed back to the client’s terminal. On very responsive connections this is of course not an issue. But imagine that there is half a second of delay between your computer and the server. In such an instance it would take a whole second from the time you type a letter till the output of that letter reaches your screen. That kind of delay can be super frustrating. Editing text becomes a chore.&lt;/p&gt;
&lt;p&gt;But how does mosh fix this? Well, Mosh uses state synchronisation to synchronise the screen buffer state between the server and the client, and something they call “intelligent local echo”. Essentially the mosh client will just echo out to the client terminal what you are typing. If you start erasing text you can see how you are able to erase the username@hostname# before the server catches up and Mosh corrects the client state. Usually you would type sensibly and so not notice any client state corrections.&lt;/p&gt;
&lt;p&gt;High response times and slow connections between the client and server can also pose problems when running scripts through SSH that spews out huge quantities of bloat. This is not a very rare occurrence. To combat this problem Mosh only sends the very last part of the screen buffer to the client. More specifically, it sends just as much of the screen buffer as the client terminal can display at any one time. To get access to the whole screen buffer you need to run something like screen or tmux on the server side to navigate through the buffer. By just sending you the last part of the screen buffer the server saves bandwidth and makes the whole thing feel more responsive.&lt;/p&gt;
&lt;h2 id=&quot;roaming&quot;&gt;Roaming&lt;/h2&gt;
&lt;p&gt;We all know the frustration of loosing our SSH connection because our WIFI-connection broke down, or the VPN server disconnected us, or some other annoying reason. As devices become more portable and we use several connections we’ve also felt anger about the necessity of disconnecting and reconnecting every time we switch from one network to another. SSH doesn’t even care to give us some sort of indication that the connection were lost.&lt;/p&gt;
&lt;p&gt;Fortunately Mosh has fixed this as well. Mosh implements a protocol that attempts to reconnect whenever the connection to the Mosh server is lost. Of course security is needed to prevent a random person from hijacking the connection, and this is implemented in the form of a key unique to that session.&lt;/p&gt;
&lt;h2 id=&quot;utf-8&quot;&gt;UTF-8&lt;/h2&gt;
&lt;p&gt;According to the Mosh home page SSH, and some terminals, have UTF-8 bugs were they don’t properly support certain UTF-8 characters. They claim that Mosh is implemented to have full UTF-8 support, and that it is built ground up for this character set. I have not personally had problems with UTF-8 encoding in SSH before, but I am sure this is a nice feature for some people.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I have only been using Mosh for a little while now, but it has already made its way onto my must have Ubuntu server application. The responsiveness and roaming support are its key selling features and make remote terminal use much better! Mosh is available for just about every operating system out there (except some mobile OSs). If you run Ubuntu 14.04 you will be fortunate to find Mosh in the default repositories.&lt;/p&gt;</content:encoded></item><item><title>Netflix launches second round of kimmification</title><link>https://snorre.io/blog/2016-04-17-netflix-originals/</link><guid isPermaLink="true">https://snorre.io/blog/2016-04-17-netflix-originals/</guid><description>Review of Unbreakable Kimmy Schmidt season 2: a sitcom that skips the laugh track and delivers strong female leads.</description><pubDate>Sun, 17 Apr 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Netflix recently released the second season of &lt;a href=&quot;https://en.wikipedia.org/wiki/Unbreakable_Kimmy_Schmidt&quot;&gt;Unbreakable Kimmy Schmidt&lt;/a&gt;, one of their original series focused around situational comedy. The first season introduced the titular character Kimmy Schmidt and bootstrapped the series with a rather bizarre premise:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The series follows 29-year-old Kimmy Schmidt (Kemper) as she adjusts to life in New York City after her rescue from a doomsday cult in Indiana where she and three other women were held by Reverend Richard Wayne Gary Wayne (Jon Hamm) for 15 years. - &lt;a href=&quot;https://en.wikipedia.org/wiki/Unbreakable_Kimmy_Schmidt&quot;&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now the series is back for yet another humorous season. It picks right up where season one left and Kimmy is as goofy as ever. Where many American sitcoms rely on laugh tracks and predictive social situations to entertain, Unbreakable Kimmy Schmidt will throw out ludicrous plot lines and make you laugh without using as much as an ounce of canned laugh track. The lack of laugh track makes the series’ pacing better and allows the series to have more serious moments.&lt;/p&gt;
&lt;p&gt;On the face of it some might reject Unbreakable Kimmy Schmidt on the grounds of being a “girly” show, but they would be missing out on what is a great sitcom. I also commend the show’s creators for writing a comedy with strong female leads as shows in the comedy genre seems to usually center around male characters.&lt;/p&gt;</content:encoded></item><item><title>GPG, Web of Trust, and Keybase.io</title><link>https://snorre.io/blog/2016-04-28-gpg-web-of-trust-and-keybase-io/</link><guid isPermaLink="true">https://snorre.io/blog/2016-04-28-gpg-web-of-trust-and-keybase-io/</guid><description>GPG web of trust explained, and how Keybase.io offers identity verification through social proofs instead of key signing parties.</description><pubDate>Thu, 28 Apr 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you are a developer I’m sure you are familiar with GPG also abbreviated GnuPG which stands for &lt;a href=&quot;https://www.gnupg.org/&quot;&gt;Gnu Privacy Guard&lt;/a&gt;. It is an open-source implementation of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Pretty_Good_Privacy&quot;&gt;PGP (Pretty Good Privacy)&lt;/a&gt; algorithm.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Removed image&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So what is this privacy stuff all about? Well, PGP/GPG implements what is known as a web of trust. A user creates a private and public key, associates their name and multiple identities (emails) with the public key. The private key is used to decrypt and encrypt the public key so no changes can be done to the GPG public key without the private key. Whenever sending a message or email a user can sign their message with their public key. The receiver (an email client for instance) can then check that the signature is indeed valid by looking at the public key which they obtain from one of several GPG key stores. The public key and message signature verifies that the message was sent by the holder of the private public key pair.&lt;/p&gt;
&lt;p&gt;This however does not prove that the message was sent by the person who the key’s identity claims to be. This is where the web of trust concept comes along. Say that you witness John Doe prove possession of a private and public key pair in person, you Jane Doe sign John Doe’s key with your own identity. With this signature you state that you vouch for the legitimacy of John Doe’s public key and that this key does indeed belong to the Mr. John Doe. Now say that some Bob Dobson receives a signed message from Mr. John Doe. He does not know Bob in person, but does know Jane Doe who’s key he trusts (and signed). Since Jane Doe has signed John’s key there is an indirect trust chain from Bob through Jane to John. Bob can be a bit more confident that Bob is the holder of this key, and not some other guy claiming to be John. The more people sign each others keys the more and shorter trust paths exists between individuals in the GPG web of trust.&lt;/p&gt;
&lt;p&gt;In theory this works very well, but one weakness with the web of trust model is the need for people to validate a person’s possession of a GPG key before signing it, best done in person (thereby the rise of key signing parties). Setting up a public private key pair is barrier enough for most people outside of the information technology sphere if not requiring them to run around to key signing parties. So in comes &lt;a href=&quot;https://keybase.io/&quot;&gt;keybase.io&lt;/a&gt; with an identity verification service built on top of the GPG technology, but with a different take on identity verification.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Removed image&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;On Keybase you no longer prove your identity by having other (preferably trusted) people signing your key. Instead you register a Keybase.io account, link it to your public GPG key, and are finally prompted to perform a series of proofs. A proof is essentially a message posted to some social service signed with your public GPG key. Services includes &lt;a href=&quot;https://github.com/&quot;&gt;Github&lt;/a&gt;, &lt;a href=&quot;https://news.ycombinator.com/news&quot;&gt;Hacker News&lt;/a&gt;, &lt;a href=&quot;https://reddit.com&quot;&gt;Reddit&lt;/a&gt;, &lt;a href=&quot;https://twitter.com&quot;&gt;Twitter&lt;/a&gt;, your own domain (through DNS or hosted file), etc. When you’ve successfully accomplished a proof Keybase.io will link that social account to your Keybase.io account and by extension your GPG key. In effect you bind the sum of your social identity across different social services to your keybase.io account and your public key. Now if another Keybase.io user wants to send an encrypted message to your Keybase.io user the Keybase.io server will return a JSON object containing the public key and a list of services with usernames and links to the proofs. The Keybase.io client verifies that these are correct, and you as a user can also verify that John Doe on Keybase.io is the same user that you know from Github, Twitter, etc. This way people can also trust that the John Doe they see on Github is actually the same John Doe they know from Twitter. As an example, here is my &lt;a href=&quot;https://keybase.io/snorremd&quot;&gt;Keybase.io profile&lt;/a&gt;. If you wanted to send me an encrypted message on Keybase.io, but were unsure if Snorremd was actually me, you could see that my Keybase.io account controls the Twitter and Github Snorremd users and &lt;a href=&quot;https://snorre.io&quot;&gt;snorre.io&lt;/a&gt; (this domain). It is quite unlikely that an attacker would gain entry to all of these services, so you would be quite safe to trust my Keybase.io account.&lt;/p&gt;
&lt;p&gt;Keybase.io then solves part of the web identity problem, but not quite the identity verification problem itself. The Mrs. Celebrity of Github and Twitter fame might have the same GPG identity across Github and Twitter, but this does not prove that the GPG key is actually owned by the real Mrs. Celebrity. There is also no indirect trust chain. You can not say that you trust Jane Doe and implicitly trust Bob Dobson who Jane trusts. Keybase.io currently does not claim to implement a web of trust however, so if you are okay with that you should be good. Many people also primarily communicate with each-others web presences. You might not care very much about whether or not you are communicating with the actual Mrs. Celebrity, only that you are communicating with the Mrs. Celebrity as you know her on Github. To allow you some comfort in trusting Keybase.io users Keybase.io implements tracking, a feature in which you are notified upon any change in the public key or proofs of a user. All in all I think Keybase.io is an intriguing concept and might help make GPG keys popular outside the most crypto conscious circles.&lt;/p&gt;</content:encoded></item><item><title>isso - a lightweight privacy minded comment system</title><link>https://snorre.io/blog/2016-05-03-isso-a-lightweight-privacy-minded-comment-system/</link><guid isPermaLink="true">https://snorre.io/blog/2016-05-03-isso-a-lightweight-privacy-minded-comment-system/</guid><description>Isso: a self-hosted, lightweight comment system for Ghost that respects privacy. Docker setup and integration.</description><pubDate>Tue, 03 May 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been using &lt;a href=&quot;https://ghost.org/developers/&quot;&gt;Ghost blog&lt;/a&gt; for quite some time now and have been very happy with the functionality, performance, and the simplicity of the solution. I use the default theme Casper which I find to be a minimalistic and rather pleasing blog theme. I’ve also avoided analytics software (and ads, not that ads would amount to any money on my little blog) like the plague for two important reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Privacy: Adds and analytics software tend to cobble together visitors’ browsing history to form a web of browsing history. I’m privacy conscious myself and would prefer to not expose my visitors to tracking networks if I can avoid it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Performance: Adding bloat and unnecessary Javascript to my page would only make the reading experience worse.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is why if you visit this page &lt;a href=&quot;https://adblockplus.org/&quot;&gt;adblock plus&lt;/a&gt; reports zero blocked elements and &lt;a href=&quot;https://www.ghostery.com/&quot;&gt;Ghostery&lt;/a&gt; reports only &lt;a href=&quot;https://en.gravatar.com/&quot;&gt;Gravatar&lt;/a&gt; which is used by Ghost to find the avatar of each author. All in all not too shabby if you ask me.&lt;/p&gt;
&lt;p&gt;There is however one thing in Ghost that was missing and that I’d really like to have which was a comment system. For some time I have had a few blog posts out, but no way for people to comment on them. This is no good. So I started looking into a few options.&lt;/p&gt;
&lt;p&gt;One of the first systems that came to mind were &lt;a href=&quot;https://disqus.com/&quot;&gt;Disqus&lt;/a&gt;. It is fairly popular and free to use. It lets you sign in with different SSO providers like Facebook and Google, and offers functionality for moderation etc. The issue for me though is the privacy concern. All comments live on the Disqus servers which is no good from a privacy perspective.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://web.livefyre.com/conversation-apps/&quot;&gt;Livefyre&lt;/a&gt; is also fairly popular out there, but it costs money and has the same privacy issue as Disqus so I quickly dismissed it.&lt;/p&gt;
&lt;p&gt;A very attractive option then seemed to be &lt;a href=&quot;https://www.discourse.org/&quot;&gt;Discourse&lt;/a&gt; which I had read about before and experienced first hand on sites using it. Discourse seems like a really nice solution with some good ideas centred around live discussions through notifications and a flat thread view. The only issue for me was the difficulty in finding an easy to set up Docker image that would fit into my existing docker-compose setup.&lt;/p&gt;
&lt;p&gt;So after some consideration and thought I remembered &lt;a href=&quot;https://posativ.org/isso/&quot;&gt;isso&lt;/a&gt; a project I had stumbled upon quite some time ago. And to my great fortune the project was alive and well and seemed to have gotten quite a few users since I last had checked it out. Not only was it alive and well, it checked a lot of the requirement boxes I held in my head for a blog comment system:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It is light weight&lt;/li&gt;
&lt;li&gt;It’s super simple to use&lt;/li&gt;
&lt;li&gt;Hosted on your own server&lt;/li&gt;
&lt;li&gt;Requires no SSO login&lt;/li&gt;
&lt;li&gt;Provides optional moderation feature&lt;/li&gt;
&lt;li&gt;Works very well with Docker and docker-compose with one of two unofficial docker images&lt;/li&gt;
&lt;li&gt;Integrates easily into Ghost blog through Handlebar theme modification&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I won’t go into how you set isso up in your own Ghost blog because &lt;a href=&quot;https://blog.slowb.ro/integrating-privacy-aware-comment-system-to-a-blog-part-1/&quot;&gt;someone already did&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you want to run isso with Docker check out:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://hub.docker.com/r/bl4n/isso/&quot;&gt;bl4n/isso&lt;/a&gt; - Recommended in official isso documentation&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hub.docker.com/r/wonderfall/isso/&quot;&gt;wonderfall/isso&lt;/a&gt; - Recommended by me for its smaller image size and use of Alpine linux!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You are also encouraged to read the &lt;a href=&quot;https://posativ.org/isso/docs/&quot;&gt;official isso documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;update-19th-march-2018&quot;&gt;Update 19th March 2018&lt;/h2&gt;
&lt;p&gt;I have since moved to a new comment system, Coral Talk. Read more about that in &lt;a href=&quot;https://snorre.io/setting-up-coral-talk/&quot;&gt;Coral Talk - An open source comment system from Mozilla&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Jalopy (game) - A trip through Eastern Europe in a Lada</title><link>https://snorre.io/blog/2016-07-26-jalopy-game-a-trip-through-eastern-europe-in-a-lada/</link><guid isPermaLink="true">https://snorre.io/blog/2016-07-26-jalopy-game-a-trip-through-eastern-europe-in-a-lada/</guid><description>Early access review of Jalopy: drive a decrepit Lada across Eastern Europe, fix your engine, and try not to run out of money.</description><pubDate>Tue, 26 Jul 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I recently learned about an early access game called &lt;a href=&quot;http://store.steampowered.com/app/446020/&quot;&gt;Jalopy&lt;/a&gt;. For those who does not know &lt;em&gt;jalopy&lt;/em&gt; is a term used to describe an old and damaged car in barely functioning state.&lt;/p&gt;
&lt;p&gt;I am awaken by an alarm clock early in the morning and greeted by my uncle (in a trippy tweed jacket) who wants to show me some car he has sitting outside his garage workshop. It is a Lada Laika without wheels, engine parts, or a passenger side door. My uncle quickly teaches me the ropes and helps me fit a door, an engine, a fuel tank, a carburetor, an ignition coil, an air filter, and some wheels. I learn about the effects of different engine parts on the fuel consumption, stress on the engine, etc. This tutorial will prove to be of use as I set out in my decrepit Lada with a bit of cash, some tools, an extra fuel tank, oil, and a map to travel across Eastern Europe.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Removed image&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As I set out on the highway towards my first destination I listen to the 2-stroke engine struggling along as I try to hit at least 80 km/h. The car handles like a piece of garbage, but I helped fix it up so I still cannot hate it too much. While cruising down the highway I enjoy the view. The graphics in Jalopy is not much to talk about with the game relying on very low polygon-count models, and simple textures. The graphics do however project a very fitting style for a Eastern European setting with the somewhat muted color palette. Driving down the highway is not so terrible at all.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Removed image&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The traffic is light, but then again we are in soviet era Eastern Europe. There are other cars on the road in this game, and of course they inevitably catch up to our Lada. This is life in a jalopy car. As I drive along I soon notice smoke emanating from under the bonnet. Shit! I slow down and stop at the side of the road to check what’s going on. As I suspected half my engine parts have gone to shit. Well, it’s a good thing I brought some tools? Or did I forget? Yep, my tweeded uncle forgot to mention how tools work. Oh well. This is one of the great things about Jalopy. There are so many ways you can mess up. I forgot my tools, so I reluctantly close the bonnet, get back in the Lada, and drive on hoping to find a petrol station before my precious Lada breaks completely down. Fortunately I do.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Removed image&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Your budget is limited and as you travel you will need to spend money on fuel, oil, tools, overnight stays at motels, and other such things. Your limited budget won’t last long it would seem. But if you pay attention along the road there will be opportunities to make some money as losing cargo along the road seems like a past time for Eastern European citizens. If you are really lucky you might find ditched Lada Laikas from which to loot some engine parts!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Removed image&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;All in all I’ve had two good hours of fun already with this game, but it is in a very early phase still! If you do decide to buy it be aware that there are still some bugs/glitches, and questionable performance. My fps went from around 160 during daytime to barely 10 - 20 during nighttime. Perhaps something to do with lighting effects. Playing the game in high resolution (I played with 1440p) seemed to present a bit of a challenge as the in game cursor does not scale. For less than a reasonably inexpensive craft beer (where I live) I would say this game provides decent value and hope it will improve, game-play and performance-wise, as the developer puts more work into it.&lt;/p&gt;</content:encoded></item><item><title>Clojure - A first encounter</title><link>https://snorre.io/blog/2014-08-24-clojure-a-first-encounter/</link><guid isPermaLink="true">https://snorre.io/blog/2014-08-24-clojure-a-first-encounter/</guid><description>Getting started with Clojure: installation, Leiningen, and the Light Table editor with its Instarepl feature.</description><pubDate>Sun, 24 Aug 2014 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I have been thinking for some time about picking up Clojure, a functional programming language and Lisp dialect that runs on top of the Java Virtual Machine. I have always wanted to learn a proper functional language, and Clojure with its Python and Ruby influences, compatibility with Java and the JVM, and web version (ClojureScript) seemed like a good bet.&lt;/p&gt;
&lt;p&gt;My five year long education and short few months of work have so far been spent programming Java, Python and a bit of JavaScript and CoffeeScript. I shared a brief semester struggling with Prolog, a language inspired by first order logic, but never took the scenic route through the backroads of the varying Lisp dialects. It is about time I took the plunge into the vast sea of functional programming.&lt;/p&gt;
&lt;p&gt;To that end I bought &lt;a href=&quot;http://shop.oreilly.com/product/0636920013754.do&quot;&gt;Clojure Programming&lt;/a&gt; and set to it. This blog post will not discuss the book, but it might be the topic of a future post.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Removed image&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In what might become a blog series I will attempt to document my journey with Clojure. Without further ado let’s get on with it.&lt;/p&gt;
&lt;h2 id=&quot;getting-clojure-up-and-running&quot;&gt;Getting Clojure up and running&lt;/h2&gt;
&lt;p&gt;Installing Clojure was relatively simple as Clojure is really just a JAR library that runs on the JVM. I ended up installing the newest version of the JVM (8), and installed &lt;a href=&quot;http://leiningen.org/&quot;&gt;Leiningen&lt;/a&gt;, a build manager for Clojure with the &lt;a href=&quot;http://brew.sh/&quot;&gt;HomeBrew&lt;/a&gt; package manager for OS X. I immidiately stumbled into an error after running &lt;code&gt;lein repl&lt;/code&gt;, the lein command for running an interactive Clojure repl. The JVM stack trace informed me of the following error:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Error loading namespace; falling back to userNoSuchMethodError&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Some googling turned up an &lt;a href=&quot;https://github.com/technomancy/leiningen/issues/1625&quot;&gt;issue&lt;/a&gt; submitted in the GitHub repo for the HomeBrew distribution of Leiningen. Of course the issue is already fixed in the Leiningen master branch, but the newest version is probably not pushed into the Homebrew package repositories yet. A workaround for the moment appeared to be running the command from inside a Leiningen Clojure-project. So that is was I tried:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;lein app helloclojure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cd helloclojure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;lein repl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Running lein repl from inside a project changes the context in which the repl is run and alleviates the error, but I can’t say what differences there might be.&lt;/p&gt;
&lt;h2 id=&quot;light-table-editor&quot;&gt;Light Table (editor)&lt;/h2&gt;
&lt;p&gt;While writing and testing Clojure in the OS X terminal in a REPL environment works well enough for learning the basics, it can quickly become cumbersome to write longer function as lack of linting and syntax highlighting makes it harder to read the code. So I set out to get myself an editor. Many programmers are big fans of &lt;a href=&quot;http://www.gnu.org/software/emacs/&quot;&gt;emacs&lt;/a&gt;, an open source editor written in Lisp that is highly extensible. emacs provide almost endless possibilities, such as interpreting Lisp functions inside your code documents, and extending the editor functionality with Lisp code even as the editor is running. While emacs may be an amazing editor I find myself leaning towards editors that hold your hand; Editors that comfort you with a proper GUI interface, easy to use menus when you forget commands, and a good file map that provides an easy way to get an overview of your work.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.lighttable.com/&quot;&gt;Light Table&lt;/a&gt; is one of those editors. It is a quite recent addition to the editor world of old, and as such does not provide the same extensive feature set of older editors such as the aformentioned emacs, or newer additions such as &lt;a href=&quot;http://www.sublimetext.com/&quot;&gt;Sublime Text&lt;/a&gt;. What it does provide is excellent Clojure and ClojureScript support, modern visuals, and great promise. It raised over 300.000$ on &lt;a href=&quot;https://www.kickstarter.com/projects/ibdknox/light-table&quot;&gt;Kickstarter&lt;/a&gt;. Not bad for an open-source editor.&lt;/p&gt;
&lt;p&gt;I found that it kickstarted me on my way to Clojure comprehension quite soon as its documentation suggested I try its feature instarepl. Instarepl appears to be a pseudo-repl environment that does not conform to the repl loop of read, evaluate, print, loop. Instead the editor provides a window in which you can enter and edit code at will; The code is interpreted on the fly. Next to each line of code Light Table shows you the data value or values being used. This amazing feature quickly tells you what the input to, and output of a given expression is.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Removed image&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I will end the blog post before it becomes a Clojure book. Fare well, and keep on coding.&lt;/p&gt;</content:encoded></item><item><title>Setting up a  Docker image builder with Gitlab CI Runner</title><link>https://snorre.io/blog/2016-04-21-setting-up-gitlab-ci-runner-docker-image-builder/</link><guid isPermaLink="true">https://snorre.io/blog/2016-04-21-setting-up-gitlab-ci-runner-docker-image-builder/</guid><description>How to implement a Docker image builder with Gitlab Runner: executors, security, and pipeline design.</description><pubDate>Thu, 21 Apr 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In this post I’ll give you an idea on how to implement a Docker image builder with the Gitlab Runner. Before I do that I’ll briefly introduce Gitlab and Gitlab CI.&lt;/p&gt;
&lt;p&gt;Update! See my new post detaling som &lt;a href=&quot;https://snorre.io/building-docker-images-with-gitlab-ci/&quot;&gt;strategies for building Docker images with Gitlab CI&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://about.gitlab.com/&quot;&gt;Gitlab&lt;/a&gt;, if you do not already know, is an open-source git hosting and management solution also offered as an enterprise version (on premise or hosted). In my opinion it is fast becoming one of the best solutions for git hosting and is a welcome competitor to Github.&lt;/p&gt;
&lt;p&gt;For quite some time now Gitlab has offered &lt;a href=&quot;https://about.gitlab.com/gitlab-ci/&quot;&gt;Gitlab CI&lt;/a&gt; a continuous integration server, initially stand alone, but later integrated into Gitlab itself. Among the most important features in Gitlab CI we find the concept of dedicated runners (equivalent to slaves for those familiar with Jenkins). The CI server itself only orchestrates the CI build jobs, while the runners do the heavy lifting. As long as the runners run on one or more separate servers the orchestrator-runner pattern results in a safe environment where the build scripts have very little access to the CI server and of course git server itself.&lt;/p&gt;
&lt;p&gt;Gitlab CI uses &lt;code&gt;gitlab-ci.yml&lt;/code&gt; files defining one or more build jobs to run continuous integration jobs. These are similar to &lt;code&gt;travis.yml&lt;/code&gt; and other yaml based CI build script files. It might for example look something akin to this (some bits missing):&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;types:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  - build&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  - test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  - deploy&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;build_app:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  type: build&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  script: ./make build&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;test_app:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  type: test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  script: ./make test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;deploy_app:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  type: deploy&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  script: scp ./app deployuser@someserver:/app&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In the example we define three build stage types: &lt;code&gt;build&lt;/code&gt;, &lt;code&gt;test&lt;/code&gt;, and &lt;code&gt;deploy&lt;/code&gt;. The order is significant. We also define three jobs, &lt;code&gt;build_app&lt;/code&gt;, &lt;code&gt;test_app&lt;/code&gt;, and &lt;code&gt;deploy_app&lt;/code&gt;, which are executed in the order given by the types to which they belong. If one build stage fail, the others will not be executed. All of this is probably familiar to you if you’ve used other CI services before.&lt;/p&gt;
&lt;h2 id=&quot;gitlab-runner-executors&quot;&gt;Gitlab Runner executors&lt;/h2&gt;
&lt;p&gt;With hosted CI solutions you often don’t have a lot of, or need for, choice with regards to how the builds are executed. At &lt;a href=&quot;https://travis-ci.org/&quot;&gt;Travis CI&lt;/a&gt;, a good hosted solution, you either build in a virtual machine or docker container.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://gitlab.com/gitlab-org/gitlab-ci-multi-runner&quot;&gt;Gitlab Runner&lt;/a&gt; on the other hand affords you a host of executors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;shell&lt;/code&gt; - executes build script on host&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docker&lt;/code&gt; - executes build inside docker container(s)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;virtualbox&lt;/code&gt; - executes build in a virtualbox vm&lt;/li&gt;
&lt;li&gt;&lt;code&gt;parallels&lt;/code&gt; - executes build in a parallels vm&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ssh&lt;/code&gt; - runs build on a different host via ssh&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docker-machine&lt;/code&gt; - autoscales docker machine instances and runs builds in containers across these instances&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While you might find it tempting to run builds directly on the host with the shell executor it is seldom a good idea to allow script execution directly on your host, especially if this runner is to be shared with several people. The ssh runner will also be problematic in that aspect.&lt;/p&gt;
&lt;p&gt;The Virtualbox and Parallels based runners isolate builds as a new VM is cloned and started for each new build. One problem with the vm based executors are their lack of support for some of the caching features of Gitlab Runner. They are also slow to start up for big VMs as the whole virtual machine image has to be copied.&lt;/p&gt;
&lt;p&gt;That leaves us with the final two options the docker and docker-machine runners. The docker executor will spawn a container for each build (and even each build stage) and run the build scripts inside the container thereby isolating the build environment from the Gitlab Runner host environment. One of the great benefits of the docker runner is the lightweight nature of spawning docker containers. Once a docker image, say node, is present on the Gitlab Runner host, it takes mere seconds to start it!&lt;/p&gt;
&lt;p&gt;Unless you have extremely large and fluctuating build pressure you probably don’t need the docker-machine executor with auto-scaling.&lt;/p&gt;
&lt;p&gt;So you install the &lt;a href=&quot;https://github.com/ayufan/gitlab-ci-multi-runner/blob/master/docs/install/linux-repository.md&quot;&gt;Gitlab Runner package&lt;/a&gt; and &lt;a href=&quot;https://docs.docker.com/engine/installation/&quot;&gt;Docker&lt;/a&gt; on your Ubuntu/Debian/SomeDistro server. Everything is set for your docker enabled build adventure.&lt;/p&gt;
&lt;p&gt;So say we want to build a Node.js-application, we can supply a &lt;code&gt;.gitlab-ci.yml&lt;/code&gt; file similar to the one below (greatly simplified). Note the &lt;code&gt;image&lt;/code&gt; property for the build stage. It specifies which docker image to use for the build. Here we use the &lt;a href=&quot;https://hub.docker.com/_/node/&quot;&gt;Node 5 image&lt;/a&gt;.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;types:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  - allthethings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;build_app:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  type: allthethings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  image: node:5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  script:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - npm run test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - npm run build&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - npm run deploy&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Great! We’ve managed to get our app tested, built, and deployed from within the Node.js docker container. Though this is not actually the problem we set out to solve. Indeed what we want is for the Gitab Runner to build us a Docker image with our app inside and then deploy that docker image to a registry of our choice.&lt;/p&gt;
&lt;p&gt;There’s not a ton of documentation on the subject out there, hence this blog post, but Gitlab has a page on &lt;a href=&quot;http://doc.gitlab.com/ee/ci/docker/using_docker_build.html&quot;&gt;Using Docker Build&lt;/a&gt; in their docs. What you will quickly discover, as I once did, is that both their suggested options come with some security warnings. You can either add the &lt;code&gt;gitlab-runner&lt;/code&gt; user to the docker group and use the &lt;code&gt;shell&lt;/code&gt; executor. This will however essentially give the &lt;code&gt;gitlab-runner&lt;/code&gt; user root access to your host server. The &lt;code&gt;docker-in-docker&lt;/code&gt; solution is not much better as the docker container must run in privileged mode thereby providing a chance for the build script to perform privilege escalation and all other shenanigans.&lt;/p&gt;
&lt;p&gt;So what can we do to get around this you may ask? Use an external docker engine on a more isolated host! There is nothing dictating that the build process be given direct unix socket access to a docker engine. Instead I suggest exposing a docker-engine from another host via tcp. This way your build script can use the remote docker engine without compromising your build server. Granted you set up server client certificate authentication on the remote docker engine only your build scripts will have access. So how might this look you ask?&lt;/p&gt;
&lt;p&gt;Well start a docker engine for example via &lt;a href=&quot;https://docs.docker.com/machine/&quot;&gt;docker-machine&lt;/a&gt;. &lt;code&gt;docker-machine create -d virtualbox dockerbuilder&lt;/code&gt;. This will create a vm based on &lt;code&gt;boot2docker&lt;/code&gt;, configure ssh, and set up docker server and client certificates. For simplicity’s sake you can start it on your Gitlab Runner-server, though the location should not matter much.&lt;/p&gt;
&lt;p&gt;Once you’ve started the machine the machine configuration should be available at &lt;code&gt;~/.docker/machine/machines/dockerbuilder&lt;/code&gt;. You should see &lt;code&gt;ca.pem&lt;/code&gt;, &lt;code&gt;cert.pem&lt;/code&gt;, and &lt;code&gt;key.pem&lt;/code&gt;. These are the three certificated needed to connect remotely to the docker engine on the boot2docker machine.&lt;/p&gt;
&lt;p&gt;Running &lt;code&gt;docker-machine ls&lt;/code&gt; will reveal the IP your dockerbuilder machine is listening to:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;NAME            ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;dockerbuilder   -        virtualbox   Running   tcp://192.168.99.100:2376           v1.11.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So how do we gain access to the docker-engine from our build script running inside a container? Docker Hub provides us with a &lt;a href=&quot;https://hub.docker.com/_/docker/&quot;&gt;&lt;code&gt;Docker Docker image&lt;/code&gt;&lt;/a&gt;. This image container the docker binary we need to communicate with our virtualbox hosted docker engine.&lt;/p&gt;
&lt;p&gt;To build a docker image from within the &lt;code&gt;docker&lt;/code&gt; docker container we can now simply add our certificates as variables in the Gitlab project settings and create a &lt;code&gt;.gitlab-ci.yml&lt;/code&gt; build job like so:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;types:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  - dockerbuild&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;build_docker_image:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  type: dockerbuild&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  image: docker:latest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  script:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - echo &quot;$DOCKER_CERT_PEM&quot; &gt; /root/cert.pem&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - echo &quot;$DOCKER_KEY_PEM&quot; &gt; /root/key.pem&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - echo &quot;$DOCKER_CA_PEM&quot; &gt; /root/ca.pem&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - export DOCKER_TLS_VERIFY=&quot;1&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - export DOCKER_HOST=&quot;tcp://192.168.99.100:2376&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - export DOCKER_CERT_PATH=&quot;/root&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - docker build -t username/imagename:latest .&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - docker login --username=&quot;${REGISTRY_USER}&quot; --password=&quot;${REGISTRY_PASSWORD}&quot; --email=&quot;${REGISTRY_EMAIL}&quot; docker.example.com&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - docker push username/imagename:latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;DOCKER_CERT_PEM&lt;/code&gt; is the variable name from the Gitlab project settings and its value is the contents of the &lt;code&gt;cert.pem&lt;/code&gt; file from before. The solution is a bit noisy, but could probably be moved into a shell script to reduce clutter. The important takeaway here is that we fetch the certificates that the &lt;code&gt;docker-machine create -d dockerbuilder&lt;/code&gt; command generated for us and stored them in the Gitlab project settings variable page. Gitlab CI will send them to Gitlab Runner when orchestrating a build, and Gitlab Runner will make them available as environment variables in our build.&lt;/p&gt;
&lt;p&gt;After doing some boilerplate setup by writing certificates to files and setting some docker environment variables we can freely use the docker command to communicate with the engine running at our virtualbox on address &lt;code&gt;192.168.99.100:2376&lt;/code&gt;. We can then login to a docker registry and push our image there.&lt;/p&gt;
&lt;p&gt;One note. Our virtualbox based boot2docker instance will keep all images and login info we store on it as long as it is running. Subsequent builds of our docker image will therefore be able to use pre-existing layers from previous builds. Because the build script itself is run in our &lt;code&gt;docker&lt;/code&gt; docker container all data we write in it, such as our super secret certificates, will disappear into thin air together with the container when the build is done. The certificates and your connection to the virtualbox docker engine should therefore be safe. Note however that anyone with developer or master access to your Gitlab project has access to the variables on the project settings page.&lt;/p&gt;</content:encoded></item><item><title>Setting up (B)ELK stack on your server</title><link>https://snorre.io/blog/2016-04-24-setting-up-belk-stack-on-your-server-2/</link><guid isPermaLink="true">https://snorre.io/blog/2016-04-24-setting-up-belk-stack-on-your-server-2/</guid><description>Setting up ElasticSearch, Logstash, Kibana, and Beats in Docker to gather and analyze logs from your systems.</description><pubDate>Sun, 24 Apr 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I’m a developer by day, but as evening falls I sometimes like to dabble as an amateur sysops. I’ve recently helped out setting up a server as part of a hobby project that I participate in. While I’m no sysops expert I like testing out technologies helpful in server administration. As a side effect it makes me appreciate just how much detail and work sysops people put into managing servers. One of these sysops technologies is the much known ELK stack (ElasticSearch, Logstash, and Kibana) recently joined by the different Beat log ingestion system services. ELK are usually used as a general tool to gather, filter, index, and analyze logs from different sources. In this post I will describe how a BELK stack can be set up, partially in docker and partially on the host, to provide an insight into your systems network traffic, system activity (from system logs), and process and performance activity.&lt;/p&gt;
&lt;h2 id=&quot;elasticsearch&quot;&gt;ElasticSearch&lt;/h2&gt;
&lt;p&gt;The first piece of the puzzle is &lt;a href=&quot;https://www.elastic.co/products/elasticsearch&quot;&gt;ElasticSearch&lt;/a&gt; a distributed search and analysis technology based on the Lucene library. It can be used to index documents and then search in them. It will index our log and event entries in our BELK stack. We can use the &lt;a href=&quot;https://hub.docker.com/_/elasticsearch/&quot;&gt;ElasticSearch docker image&lt;/a&gt;. If you are not familiar with &lt;a href=&quot;https://www.docker.com/&quot;&gt;Docker&lt;/a&gt; you might want to read up on both Docker and Docker Compose.&lt;/p&gt;
&lt;p&gt;Create an &lt;code&gt;elk&lt;/code&gt; and &lt;code&gt;elasticsearch&lt;/code&gt; folder somewhere appropriate. When using docker &lt;code&gt;/srv&lt;/code&gt; is commonly used.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mkdir -p /srv/elk/elasticsearch&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now create a new &lt;code&gt;docker-compose.yml&lt;/code&gt; file either in the &lt;code&gt;/srv/elk&lt;/code&gt; folder, or better yet on your own computer. It all depends on whether you have tcp access to the docker-engine on the host where you are setting up the BELK stack. Add the following contents to it:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;elasticsearch:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  image: elasticsearch:latest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  restart: always&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  volumes:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - /srv/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - /srv/elk/elasticsearch/data:/usr/share/elasticsearch/data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ports:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - &quot;127.0.0.1:9200:9200&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - &quot;127.0.0.1:9300:9300&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We call the service &lt;code&gt;elasticsearch&lt;/code&gt;, use the latest elasticsearch image, and map in ports and volumes from the host into the container. The elasticsearch api should now be available from the host server’s port &lt;code&gt;9200&lt;/code&gt; on &lt;code&gt;localhost&lt;/code&gt; only.&lt;/p&gt;
&lt;p&gt;You may start the elasticsearch container to check that everything works by running &lt;code&gt;docker-compose up -d&lt;/code&gt;. Run &lt;code&gt;docker-compose stop&lt;/code&gt; to stop elasticsearch.&lt;/p&gt;
&lt;h2 id=&quot;kibana&quot;&gt;Kibana&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.elastic.co/products/kibana&quot;&gt;Kibana&lt;/a&gt; is our second piece of the puzzle. It is simply put a web based data exploration and visualization tool built on top of elasticsearch to make it simple to explore and visualise/graph your elasticsearch data. It is commonly used to visualise logs or just data.&lt;/p&gt;
&lt;p&gt;For Kibana we’ll use the official &lt;a href=&quot;https://hub.docker.com/_/kibana/&quot;&gt;Kibana image&lt;/a&gt; to run Kibana in a docker container. We can simply add Kibana as a service in our &lt;code&gt;docker-compose.yml&lt;/code&gt; file (the same one as before) by appending the following yaml config:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;kibana:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  image: kibana:latest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  restart: always&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  volumes:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - /srv/elk/kibana/config:/opt/kibana/config&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ports:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - &quot;127.0.0.1:5601:5601&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  links:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - elasticsearch&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and create a &lt;code&gt;kibana&lt;/code&gt; folder under our elk folder:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mkdir -p /srv/elk/kibana/config&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Kibana relies on a config file &lt;code&gt;kibana.yml&lt;/code&gt; to function so you will need to add this under the kibana config folder.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;touch /srv/elk/kibana/config/kibana.yml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;See &lt;a href=&quot;https://www.elastic.co/guide/en/kibana/current/kibana-server-properties.html&quot;&gt;Setting Kibana server properties&lt;/a&gt; in the Kibana docs for which properties you may configure. For this setup you probably don’t need to change anything and can rely on the default values.&lt;/p&gt;
&lt;p&gt;If you want to test that your Kibana instance works you can again start the docker containers as instructed before with &lt;code&gt;docker-compose up -d&lt;/code&gt;. You Kibana instance should be accessible from &lt;a href=&quot;http://localhost:5601&quot;&gt;localhost:5601&lt;/a&gt; on your server. Run &lt;code&gt;docker-compose stop&lt;/code&gt; to stop the services again.&lt;/p&gt;
&lt;h2 id=&quot;logstash&quot;&gt;Logstash&lt;/h2&gt;
&lt;p&gt;While it is entirely possible to make TopBeat, PacketBeat, and FileBeat send their log and event data straight to ElasticSearch you might want to pass them through Logstash as this affords you Logstash’s filter feature with which you may extract more detailed information from your logs. We will therefore set up Logstash as well, all though this post won’t touch upon using the filter feature.&lt;/p&gt;
&lt;p&gt;An official &lt;a href=&quot;https://hub.docker.com/_/logstash/&quot;&gt;Logstash Docker image&lt;/a&gt; is available so again we use Docker to run the service. Create a folder for logstash configs:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mkdir -p /srv/elk/logstash/config&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and add the following Logstash service configuration to the existing &lt;code&gt;docker-compose.yml&lt;/code&gt; file:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;logstash:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  image: logstash:latest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  restart: always&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  command: logstash -f /etc/logstash/conf.d/logstash.conf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  volumes:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - /srv/elk/logstash/config:/etc/logstash/conf.d&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ports:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - &quot;127.0.0.1:5000:5000&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  links:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - elasticsearch&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As you can see we link in the elasticsearch service (so logstash can gain access to it from &lt;code&gt;elasticsearch:9200&lt;/code&gt;, and map in a configuration directory from our host to the logstash container. We’ve also exposed the Logstash container’s port &lt;code&gt;5000&lt;/code&gt; on the server’s &lt;code&gt;localhost:5000&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You need to provide logstash with a configuration file in order to make it listen to port 5000 and send documents to elasticsearch:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;vim /srv/elk/logstash/config/logstash.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;which should contain an input section for the Beats and an ouput section for the ElasticSearch server:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;input {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  beats {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    port =&gt; 5000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;output {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  elasticsearch {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    hosts =&gt; &quot;elasticsearch:9200&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    manage_template =&gt; false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    index =&gt; &quot;%{[@metadata][beat]}-%{+YYYY.MM.dd}&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    document_type =&gt; &quot;%{[@metadata][type]}&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The Beats will now be able to send their data to Logstash at &lt;code&gt;localhost:5000&lt;/code&gt; from the host. We are now done with the Docker based services so you may start them with: &lt;code&gt;docker-compose up -d&lt;/code&gt; from the directory where you keep your &lt;code&gt;docker-compose.yml&lt;/code&gt; file. We need Logstash and Elasticsearch to be running for the upcoming steps.&lt;/p&gt;
&lt;h2 id=&quot;beats&quot;&gt;Beats&lt;/h2&gt;
&lt;p&gt;Finally we need a way to collect our log data. While Logstash can read log files from our host the FileBeat package is special made to perform this task. Unlike Elasticsearch, Logstash, and Kibana we will install FileBeat, TopBeat, and PacketBeat on our host.&lt;/p&gt;
&lt;p&gt;First add the Beat repository as &lt;a href=&quot;https://www.elastic.co/guide/en/beats/libbeat/1.2/setup-repositories.html&quot;&gt;described here&lt;/a&gt; (for the distro of your choice). Then install the beats. On Ubuntu you can use apt:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;apt install filebeat packetbeat topbeat&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now we need to configure each Beat to use our Logstash instance, and provide our Elasticsearch server with the relevant Beat templates.&lt;/p&gt;
&lt;p&gt;First edit the filebeat config with &lt;code&gt;vim /etc/filebeat/filebeat.yml&lt;/code&gt; and make sure that the &lt;code&gt;elasticsearch&lt;/code&gt; ouput is commented out:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# elasticsearch:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    # hosts: [&quot;localhost:9200&quot;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then comment in the logstash ouput config:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;### Logstash as output&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  logstash:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    # The Logstash hosts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    hosts: [&quot;localhost:5000&quot;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Remember that we configured our Logstash server to listen to port 5000, and mapped port 5000 out to &lt;code&gt;localhost:5000&lt;/code&gt; on our host. This enables Filebeat to log its event to that port.&lt;/p&gt;
&lt;p&gt;Then we need to insert the Filebeat template into our Elasticsearch index. The documentation tells us that we can use Curl for this:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;curl -XPUT &apos;http://localhost:9200/_template/filebeat&apos; -d@/etc/filebeat/filebeat.template.json&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Finally we can start Filebeat. On Ubuntu you may use &lt;code&gt;service filebeat start&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You can now repeat these steps for PacketBeat and TopBeat. Note that you may want to set the interval of data collection in the Topbeat configuration to avoid generating too much data. What interval is right for you might depend on your disk space, but 5 minutes works for me.&lt;/p&gt;
&lt;h2 id=&quot;add-beat-indexes-to-kibana&quot;&gt;Add Beat indexes to Kibana.&lt;/h2&gt;
&lt;p&gt;If everything worked out okay you should now be able to go to Kibana and add your indices. Go to &lt;a href=&quot;http://localhost:5601&quot;&gt;localhost:5601&lt;/a&gt; and click the &lt;code&gt;Settings&lt;/code&gt; tab. You should be presented with a screen where you can configure an index pattern. Thanks to our Logstash configuration an new index will be created each day for each of our Beat loggers. Our pattern should thus match the configuration &lt;code&gt;&quot;%{[@metadata][beat]}-%{+YYYY.MM.dd}&quot;&lt;/code&gt; (from the Logstash config). So to get each of the three index types into Kibana we simply add them as &lt;code&gt;filebeat-*&lt;/code&gt;, etc. If your index pattern is matched Kibana should show a green &lt;code&gt;Create&lt;/code&gt; button as in the screenshot below.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Removed&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;After adding the index pattern you should be able to go to the &lt;code&gt;Discover&lt;/code&gt; tab and view and search your logs.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Removed&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You can now create your own visualizations over the indexed logs or you can download some of the visualizations and dashboards already created by the Kibana team. You can read more about that &lt;a href=&quot;https://www.elastic.co/guide/en/kibana/current/dashboard.html&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://www.elastic.co/guide/en/beats/libbeat/current/load-kibana-dashboards.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Hope this guide helped you get started. Currently I’ve not yet tried setting up custom filters for things such as fail2ban and ufw in order to better visualize malicious traffic. You can also use a geoip plugin to map log and network traffic events on a world map to see where traffic is coming from. A future blog post might cover these subjects.&lt;/p&gt;
&lt;h2 id=&quot;attributions&quot;&gt;Attributions&lt;/h2&gt;
&lt;p&gt;Image post header:&lt;/p&gt;
&lt;p&gt;By Bureau of Land Management (Dean Creek Elk 4 Uploaded by Albert Herring) [CC BY-SA 2.0 (&lt;a href=&quot;http://creativecommons.org/licenses/by-sa/2.0&quot;&gt;http://creativecommons.org/licenses/by-sa/2.0&lt;/a&gt;)], via Wikimedia Commons.&lt;/p&gt;</content:encoded></item><item><title>A privacy respecting talk gravatar plugin</title><link>https://snorre.io/blog/2018-04-25-a-privacy-respecting-talk-gravatar-plugin/</link><guid isPermaLink="true">https://snorre.io/blog/2018-04-25-a-privacy-respecting-talk-gravatar-plugin/</guid><description>talk-plugin-gravatar: a Coral Talk plugin that proxies Gravatar requests to protect commenters&apos; privacy.</description><pubDate>Wed, 25 Apr 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://snorre.io/setting-up-coral-talk/&quot;&gt;Some time ago&lt;/a&gt; I started using the &lt;a href=&quot;https://coralproject.net/products/talk.html&quot;&gt;Coral Talk&lt;/a&gt; comment system for my blog. The system is probably way overkill for a blog my size, and I have so far only received one comment! While Coral Talk is pretty nice it lacks built in avatar support and I could only find a &lt;a href=&quot;https://github.com/coralproject/talk-recipes/tree/master/plugins/avatar&quot;&gt;plugin recipe&lt;/a&gt; requiring avatars to be hosted by third parties and the links to be updated by some external service.&lt;/p&gt;
&lt;p&gt;In my quest for avatar support I decided I would like to implement an avatar plugin that would require minimal effort from users and the maintainer of a Coral Talk instance. &lt;a href=&quot;https://en.gravatar.com/&quot;&gt;Gravatar&lt;/a&gt; (i.e. globally recognized avatars) is a popular avatar service which provides avatar URLs for each user which can be embedded by any service. The concept is simple enough. Gravatar creates an avatar URL based on a user’s md5 hashed email address and responds with the user uploaded avatar upon requests. Gravatar is used almost everywhere so why not in a Talk avatar plugin?&lt;/p&gt;
&lt;p&gt;There are unfortunately a number of privacy issues to be aware of when considering using Gravatar. Fly.io, a cdn/adn provider, wrote a &lt;a href=&quot;https://fly.io/articles/how-gravatar-hurts-your-visitors/&quot;&gt;summary of how gravatar hurts your visitors&lt;/a&gt; which goes into these privacy issues and how some of them are solved using their Gravitas proxy server.&lt;/p&gt;
&lt;p&gt;This inspired me to create a Talk Gravatar plugin that would solve some of these issues to help safeguard commenters’ privacy. Enter &lt;a href=&quot;https://github.com/snorremd/talk-plugin-gravatar&quot;&gt;talk-plugin-gravatar&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;With talk-plugin-gravatar I’ve implemented a talk plugin that will safely proxy Gravatar requests via the Talk server using randomly generated avatar uuids to avoid leaking indentifible information to browsers. At the same time the Gravatar servers will only know the IP of the talk service from which the avatars are requested, not the specific pages the Gravatar users are commenting on. This is a big privacy win for commenters.&lt;/p&gt;
&lt;p&gt;It should be pointed out that unlike the Fly.io Gravitas service which would proxy Gravatar requests for any number of source sites, the Gravatar plugin will only proxy requests for a single Talk instance and therefore not provide the same level of privacy. There is also the issue of styling. Unfortunately the default Talk markup and styling places the so called avatar slot on top of, rather than left of, the comment. You need to supply custom styling via Talk’s administration settings to fix this issue.&lt;/p&gt;
&lt;h2 id=&quot;in-conclusion&quot;&gt;In conclusion&lt;/h2&gt;
&lt;p&gt;The plugin is pretty basic, but does its one function well. It relies on Talk’s redis cache to cache avatar requests. This way the plugin avoids hammering the Gravatar service with requests, while offering about the same response timings as the Gravatar service would have if used directly. There are zero configuration options which makes it incredibly easy to set the plugin up.&lt;/p&gt;
&lt;p&gt;You can see the plugin in action in my comment field.&lt;/p&gt;</content:encoded></item><item><title>New homepage with Gatsby.js hosted with Cloudflare Workers</title><link>https://snorre.io/blog/2020-05-03-new-homepage/</link><guid isPermaLink="true">https://snorre.io/blog/2020-05-03-new-homepage/</guid><description>Migrating from Ghost to Gatsby: React-based static site generation, GraphQL, and hosting on Cloudflare Workers.</description><pubDate>Sun, 03 May 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The past couple of years or so I’ve been running a homepage at &lt;a href=&quot;https://snorre.io&quot;&gt;snorre.io&lt;/a&gt;.
As many students of IT I wanted to host my website and blog on a virtual machine server under my control.
So I set out to find a good VM cloud provider and a simple open source blog CMS.
I eventually landed on &lt;a href=&quot;https://ghost.org/&quot;&gt;Ghost&lt;/a&gt; which at the time was a welcome alternative to WordPress and other CMS.
Ghost served me well over the years being mostly free of distractions and simple to maintain.
At some point the Ghost Foundation started complicating the content model and writing experience.&lt;/p&gt;
&lt;p&gt;The past few years I’ve worked on projects using &lt;a href=&quot;https://reactjs.org/&quot;&gt;React&lt;/a&gt; in some form and grown to really like the UI library.
React allowed me to write nearly functional and declarative code to express UIs and was a big catalyst in getting me into Clojure (a modern lisp).
Additionally React allowed me to write UI as regular old JavaScript (with some light JSX syntax perhaps) with proper error messages and type checking.
At the same time I worked a bit with &lt;a href=&quot;https://gohugo.io/&quot;&gt;Hugo&lt;/a&gt; a static site generator (SSG) on a different project.
Working with Hugo showed me how nice it could be to work with SSG, to be able to produce static and fast web pages.&lt;/p&gt;
&lt;p&gt;So at some point I decided to build myself new statically generated home page.
But was there any static site generators out there that satisfied my interests and requirements?
Hugo, Jekyll and others were too opinionated and used template engines focused around html.
Previous encounters with magic html templates in Angular had not done much to make me love html templates.&lt;/p&gt;
&lt;p&gt;Fortunately I looked at &lt;a href=&quot;https://www.gatsbyjs.org/&quot;&gt;Gatsby&lt;/a&gt; a React based framework for building static sites.
Where many other SSG are focused on building simple static html pages via html templates, Gatsby offers full flexibility.
Gatsby is based around a GraphQL data fetching core and pages based on React to fetch the data and render pages.
You can easily build a highly interactive page with React featuring dynamic content.&lt;/p&gt;
&lt;p&gt;It is still possible to use markdown files to write your blog via Gatsby’s plugin system and the &lt;a href=&quot;https://www.gatsbyjs.org/packages/gatsby-transformer-remark/&quot;&gt;remark plugin&lt;/a&gt;.
This makes the writing experience equivalent to other SSG like Hugo and Jekyll for normal blog posts.
In the future I will experiment with mixed markdown and react component posts using the &lt;a href=&quot;https://www.gatsbyjs.org/docs/mdx/&quot;&gt;mdx plugin&lt;/a&gt;.
This will allow me to embed more interactive content into the post experience.&lt;/p&gt;
&lt;p&gt;Previously I have hosted my Ghost blog in a &lt;a href=&quot;https://www.docker.com/&quot;&gt;Docker&lt;/a&gt; container running on Ubuntu on a virtual machine.
The docker container was proxied by &lt;a href=&quot;https://containo.us/traefik/&quot;&gt;Traefik&lt;/a&gt; an ingenious proxy server with automatic Docker load balancing.
While I was very satisfied with this setup the complexity and time spent setting it up is undeniable.&lt;/p&gt;
&lt;p&gt;So I wanted to find a simpler way of hosting my new home pages.
Having already used &lt;a href=&quot;https://nextjs.org/&quot;&gt;Next.js&lt;/a&gt; a few times I learnt about &lt;a href=&quot;https://vercel.com/edge-network&quot;&gt;Vercel’s edge network offering&lt;/a&gt; to host sites.
Due to a short lived error with Vercel’s GitHub signup integration I could not create an account there.
I am also a Cloudflare user and had looked a bit at &lt;a href=&quot;https://workers.cloudflare.com/&quot;&gt;Cloudflare’s Workers offering&lt;/a&gt;.
The major benefit of Vercel’s offering is of course their free pricing tier for personal use.
I ended up subscribing to and setting up Cloudflare Workers before Vercel had fixed their signup bug, so for now I will stick with them.
To Vercel’s benefit they responsed to my support request in a matter of two days confirming the issue and having already applied a fix.
At 5USD per month minimum the Cloudflare solution is not that costly however and has an edge server right here in my own country!&lt;/p&gt;
&lt;p&gt;Some clever developers will probably point out that I could have used GitHub Pages for free.
And while I could certainly have done that I wanted a new learning experience and to use a product with a clear pricing model.
Paying for Cloudflare’s Worker service assures me that I’m a customer and that hosting my page is indeed a priority for them.&lt;/p&gt;
&lt;p&gt;At my old website I tried out two different comment systems, but never really got many comments.
To be compliant with GDPR (just in case) I had to set up a privacy policy to explain users how the data submitted to my comment system would be handled.
So for my new pages I probably will not use a comment system.
Instead you can reach me at &lt;a href=&quot;mailto:contact@snorre.io&quot;&gt;contact@snorre.io&lt;/a&gt;.
Don’t hesitate to contact me if you have any questions about the setup.
I will leave you with this boilerplate Gatsby image from their example site setup:&lt;/p&gt;</content:encoded></item><item><title>Caching apollo graphql query results with your own caching hoc</title><link>https://snorre.io/blog/2018-08-01-caching-apollo-graphql-query-results-with-your-own-caching-hoc/</link><guid isPermaLink="true">https://snorre.io/blog/2018-08-01-caching-apollo-graphql-query-results-with-your-own-caching-hoc/</guid><description>A React HOC to cache Apollo GraphQL results and keep previous data visible while loading, for better search UX.</description><pubDate>Wed, 01 Aug 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I am currently building a search portal at work and have been using a &lt;a href=&quot;https://reactjs.org/&quot;&gt;React&lt;/a&gt;, &lt;a href=&quot;https://www.apollographql.com/docs/react/&quot;&gt;Apollo Client&lt;/a&gt;, and GraphQL stack.&lt;/p&gt;
&lt;p&gt;The search app so far is pretty simple. It uses &lt;a href=&quot;https://www.apollographql.com/docs/react/essentials/local-state.html&quot;&gt;apollo link state&lt;/a&gt; to store local application state like the users’ search query and selected filters, and then performs graphql queries based on that state.&lt;/p&gt;
&lt;p&gt;The relevant part of the React component tree looks something like this:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Removed image&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;search state hoc&lt;/code&gt; graphql component queries the local app state to fetch the user’s current search. Any time this state changes, the hoc will re-render the &lt;code&gt;search results hoc&lt;/code&gt; with new properties (the search to perform).&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;search results hoc&lt;/code&gt; performs a graphql query on the remote graphql server to perform the user specified search against a search index. It passes on three different properties to the child: &lt;code&gt;error&lt;/code&gt;, &lt;code&gt;loading&lt;/code&gt;, and &lt;code&gt;results&lt;/code&gt; which can be used to determine if the query is finished running or not, which can be handled in the child component.&lt;/p&gt;
&lt;p&gt;So when the hoc performs the remote query it will pass down the following properties:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{ loading: true, error: false, results: null }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;When the query is complete the hoc re-renders the &lt;code&gt;search presentation component&lt;/code&gt;, but now with the following properties, where results is a nested data structure with search results:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{ loading: false, error: false, results: { ... } }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The problem arises when the user refines her search and the state change triggers a re-render of the &lt;code&gt;search state hoc&lt;/code&gt; which in turn triggers a re-render of the &lt;code&gt;search results hoc&lt;/code&gt;. This triggers a new remote query to be performed, and the &lt;code&gt;search results hoc&lt;/code&gt; will re-render the &lt;code&gt;search presentation component&lt;/code&gt; with a loading state:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{ loading: true, error: false, results: null }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Because no results are available while loading, any downstream presentation component will now have to be rendered without the previous content. In the search portal I’m developing filters are drawn using the aggregation data contained within the &lt;code&gt;results&lt;/code&gt; value! Whenever the user performs an adjustment to her search the UI would then have to draw the filters without any content before the new result would become available.&lt;/p&gt;
&lt;p&gt;To fix this I first turned to the Apollo docs to see if there was a solution to keep former results while the component entered a new loading state. Apparently this was not so easy. The only solution I could see would be to read the Apollo client cache directly when &lt;code&gt;loading&lt;/code&gt; equals &lt;code&gt;true&lt;/code&gt;. This would require the code to know the old query so that I could fetch the correct cached result. Using the &lt;a href=&quot;https://www.apollographql.com/docs/react/features/optimistic-ui.html&quot;&gt;optimistic ui&lt;/a&gt; feature did not seem to fit nicely into the flow either.&lt;/p&gt;
&lt;p&gt;After some thought it occured to me that it would probably be possible to just create my own cache inbetween the &lt;code&gt;search result hoc&lt;/code&gt; and &lt;code&gt;search presentation component&lt;/code&gt;. So after a quick Google search I came up with the following component:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;function cacheSearch (WrappedComponent) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  return class extends React.Component {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    constructor () {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      super()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      this.state = {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        previousResults: null&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    componentWillReceiveProps () {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      if (this.props.results) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        this.setState(function () {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;          return { previousResults: this.props.results }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    render () {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      // Wraps the input component in a container, without mutating it. Good!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      return &amp;#x3C;WrappedComponent {...this.props} previousResults={this.state.previousResults} /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As you can see the cache hoc is implemented as a function that takes the component to wrap as an argument. The cache component uses the React &lt;code&gt;state&lt;/code&gt; property on the component instance to hold the previous result (the cache), and the &lt;code&gt;componentWillReceiveProps&lt;/code&gt; life cycle hook to update the cache. The &lt;code&gt;render&lt;/code&gt; method simply returns the wrapped component with the properties of the cache component as well as the &lt;code&gt;previousResults&lt;/code&gt; cache.&lt;/p&gt;
&lt;p&gt;Because all React hocs look the same it was easy to integrate into the &lt;code&gt;compose&lt;/code&gt; call used to hook up graphql hocs to my presentation component:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;export default compose(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  graphql(SEARCH_QUERY, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    name: &apos;searchQuery&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    props: searchQueryProps&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  }),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  graphql(SEARCH_RESULTS, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    name: &apos;searchResults&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    options: searchOptions,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    props: searchProperties&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  }),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  cacheSearch // My caching hoc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;)(Search)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This solution with a caching higher order component is nothing ground-breaking, but was not obvious to me at first. It might not be the best approach, but it works well enough and is very easy to grok. So tell me what you think of the approach or suggest a better one if you know one!&lt;/p&gt;</content:encoded></item><item><title>Running Wireguard on Scaleway Stardust</title><link>https://snorre.io/blog/2020-11-03-wireguard-vpn-scaleway-stardust/</link><guid isPermaLink="true">https://snorre.io/blog/2020-11-03-wireguard-vpn-scaleway-stardust/</guid><description>Setting up a Wireguard VPN on Scaleway&apos;s budget Stardust instance for under €2/month.</description><pubDate>Tue, 03 Nov 2020 00:00:00 GMT</pubDate><content:encoded>&lt;img src=&quot;https://snorre.io/_astro/star-dust.7Jzj-X2m_Z1odFQg.webp&quot; srcset=&quot;https://snorre.io/_astro/star-dust.7Jzj-X2m_25HKm1.webp 400w, https://snorre.io/_astro/star-dust.7Jzj-X2m_Z1RDSm6.webp 800w, https://snorre.io/_astro/star-dust.7Jzj-X2m_Z1BSvFp.webp 1200w&quot; alt=&quot;Image of star dust in space used as illustration&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;5200&quot; height=&quot;2500&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://unsplash.com/photos/-hI5dX2ObAs&quot;&gt;Photo by Nasa&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://scaleway.com&quot;&gt;Scaleway&lt;/a&gt; just (3rd of November 2020) released their &lt;a href=&quot;https://blog.scaleway.com/a-star-is-born-as-scaleway-launches-stardust-the-worlds-most-cost-effective-cloud-instance/&quot;&gt;new tiny cloud instance offering aptly named Stardust&lt;/a&gt;.
As exploding stars launch tiny atoms into space so does Cloudflare launch tiny instances into the cloud space.
The Stardust instance is a very modest virtual private server clocking in at 1 vCPU, 1GB RAM, 1 IPv4 address, 10GB of local NVMe storage and up to 100Mbps bandwidth.
And best of all the stardust instance cost clocks in at €0.0025 per hour adding up to under €2 per month, barely the cost of a coffee!
If you can make do without the IPv4 address you can get it even cheaper, at only €0.0005 which should not even register in your wallet.
Safe to say Stardust is a pretty sweet deal, but is limited to 1 per region per customer, so don’t go thinking that you can set up some sort of swarm on them.&lt;/p&gt;
&lt;p&gt;So what can you do with something small like the Stardust instance?
Well according to the blog post users can&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[…] deploy Stardust instances for use cases such as creating their own workers free from vendor lock-in, configuring triggers and daemons, as well as small Load-Balanced LAMP websites, VPN or Network Bastions.
VPN networks they say?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;wireguard&quot;&gt;Wireguard&lt;/h2&gt;
&lt;p&gt;I had always wanted to set up a personal &lt;a href=&quot;https://www.wireguard.com/&quot;&gt;Wireguard VPN server&lt;/a&gt;.
A VPN is typically used to secure your network traffic when on untrusted networks like at cafés and hotels.
Wireguard is a modern VPN implementation implemented largely in kernel space to provide speed and security.
While I had originally considered subscribing to a commercially hosted Wireguard host, the Scaleway Stardust launch gave me an excellent excuse to try to host it myself.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.scaleway.com/en/docs/installing-wireguard-vpn-linux/&quot;&gt;The setup&lt;/a&gt; proved to be not so complicated at all.
I will not repeat the setup instructions here, but you should be aware that Wireguard now ships in Ubuntu’s own repositories so no PPA is required.
The most complex configuration in the setup was the post up and post down settings to make sure the correct &lt;code&gt;iptables&lt;/code&gt; commands were run.
While they are documented and working it is always a good idea to understand what is going on.&lt;/p&gt;
&lt;p&gt;So how did the Wireguard server on Scaleway Stardust perform?
A quick unscientific test on my desktop on a &lt;em&gt;750Mbps&lt;/em&gt; download and &lt;em&gt;25Mbps&lt;/em&gt; upload speed gave me the following results:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; speedtest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Retrieving&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; speedtest.net&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; configuration...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Testing&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; from&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Scaleway&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (51.x.x.X)...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Retrieving&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; speedtest.net&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; server&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Selecting&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; best&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; server&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; based&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; on&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ping...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Hosted&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; by&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Naitways&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (Paris) [&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1.88&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; km]: 80.411 ms&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Testing&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; download&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; speed...........................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Download:&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 122.54&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Mbit/s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Testing&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; upload&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; speed.............................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Upload:&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 21.11&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Mbit/s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; speedtest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Retrieving&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; speedtest.net&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; configuration...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Testing&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; from&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Scaleway&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (51.x.x.X)...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Retrieving&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; speedtest.net&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; server&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Selecting&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; best&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; server&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; based&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; on&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ping...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Hosted&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; by&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; KEYYO&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (Paris) [&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1.88&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; km]: 80.166 ms&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Testing&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; download&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; speed...........................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Download:&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 98.86&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Mbit/s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Testing&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; upload&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; speed.............................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Upload:&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 19.38&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Mbit/s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; speedtest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Retrieving&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; speedtest.net&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; configuration...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Testing&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; from&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Scaleway&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (51.x.x.X)...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Retrieving&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; speedtest.net&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; server&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Selecting&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; best&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; server&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; based&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; on&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ping...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Hosted&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; by&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Naitways&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (Paris) [&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1.88&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; km]: 80.891 ms&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Testing&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; download&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; speed...........................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Download:&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 155.69&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Mbit/s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Testing&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; upload&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; speed.............................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Upload:&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 19.60&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; Mbit/s&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On average I would say that Wireguard on the Stardust instance is more than capable of delivering the 100Mbps the instance offers.
If you have a few times more speedy Internet, or even gigabit speeds, this setup will obviously not be your daily driver.
On the other hand the next time you are sitting at some café or hotel, maybe after the covid-19 pandemic is over, your VPN is likely not going to be the bottleneck.
The usual hotel and café networks will be limited by the wi-fi network and internet connection speed.&lt;/p&gt;
&lt;p&gt;Before ending the post I would like to point out that this setup affords no extra anonymity on the wider Internet.
While you will be masking your own private IP address, you will still be broadcasting your Scaleway instance’s IP address instead.
What this setup does afford you is a secure connection to a trusted network if no trusted networks are available where you are.
It also hides your traffic from your ISP if that is a concern to you.&lt;/p&gt;
&lt;p&gt;This was my first blog post in quite a while and I hope you enjoyed it.
If you have any questions or comments feel free to shoot me an email at &lt;a href=&quot;mailto:contact@snorre.io&quot;&gt;contact@snorre.io&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Spotifyd and Spotify TUI for a leaner listening experience</title><link>https://snorre.io/blog/2020-11-20-spotifyd-spotify-tui/</link><guid isPermaLink="true">https://snorre.io/blog/2020-11-20-spotifyd-spotify-tui/</guid><description>Replace the heavy Spotify desktop app with Spotifyd and spotify-tui for low-resource streaming from the terminal.</description><pubDate>Fri, 20 Nov 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This post is for those of you subscribing to Spotify, the mega-popular streaming service.
Spotify as many companies before them have released multi-platform apps based on web technologies.
The desktop app is quite user friendly and pretty, but as it turns out it uses quite a lot of resources.
In this post we will see how the good old terminal user interface and a Rust-based daemon can help!&lt;/p&gt;
&lt;p&gt;During a typical work day I will stream music for hours at a time, only being interrupted by video meetings and lunch.
For all those hours my Spotify app is barely open, mostly to skip songs I don’t like.
For this measly work Spotify fires up five processes consuming more than 300MB of memory.
All of this just to mostly stay in the background and playing music. Below you see a screenshot of the processes and their memory consumption as reported by MacOS monitor:&lt;/p&gt;
&lt;img src=&quot;https://snorre.io/_astro/spotify-processes.CKnyTXN4_183JWF.webp&quot; srcset=&quot;https://snorre.io/_astro/spotify-processes.CKnyTXN4_2iv99b.webp 400w, https://snorre.io/_astro/spotify-processes.CKnyTXN4_Z1qFWY8.webp 800w, https://snorre.io/_astro/spotify-processes.CKnyTXN4_1VJ7Cz.webp 1200w, https://snorre.io/_astro/spotify-processes.CKnyTXN4_183JWF.webp 1704w&quot; alt=&quot;Screenshot of Mac Monitor app showing Spotify processes&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1704&quot; height=&quot;992&quot;&gt;
&lt;p&gt;I’m not trying to lampoon the Spotify client.
All things considered it is very nicely designed and very user friendly.
But if you don’t have a lot of memory to go on and/or you don’t really care about the album covers and nice design there is another option.
Enter &lt;a href=&quot;https://github.com/Spotifyd/spotifyd&quot;&gt;Spotifyd&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Spotifyd streams music just like the official client, but is more lightweight and supports more platforms. Spotifyd also supports the Spotify Connect protocol, which makes it show up as a device that can be controlled from the official clients.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Spotifyd when set up will allow you to stream music and can be controlled from the official clients (say the Spotify app on your phone) or even other clients with support for the spotify connect protocol.
It doesn’t offer a UI of its own and only handles the streaming, playback, and any incoming Spotify connect calls.
It does however do this beautifully and with hardly any impact on your resources.
In my experience it consumes less than &lt;code&gt;10 MB&lt;/code&gt; of memory and very little CPU.
Because it is designed to run in headless mode and consumes very little resources it could very well fit onto an original Raspberry Pi.&lt;/p&gt;
&lt;p&gt;Now that you have the playback part of Spotify replaced you still might need a user interface.
Sure you can use your cellphone, but having to thumb or face-unlock your phone can get tiresome.
A good alternative is &lt;a href=&quot;https://github.com/Rigellute/spotify-tui&quot;&gt;spotify-tui&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A Spotify client for the terminal written in Rust.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Before grahical user interfaces (GUIs) there were terminal/text user interfaces (TUIs).
While GUIs have mostly displaced terminal user interfaces for consumer apps, TUIs still persist especially as code editors and configuration tools.
One big advantage of TUIs today are the fact that they run in your terminal and only output text.
This allows them to be quite lean as they only need to work with text output.
Gone are the embedded browser engines with giant DOM hierarchies, layout engines, etc.&lt;/p&gt;
&lt;img src=&quot;https://snorre.io/_astro/spotify-tui.BeZVvnRb_2ke8c7.webp&quot; srcset=&quot;https://snorre.io/_astro/spotify-tui.BeZVvnRb_Xkcks.webp 400w, https://snorre.io/_astro/spotify-tui.BeZVvnRb_Z1WOOn4.webp 800w, https://snorre.io/_astro/spotify-tui.BeZVvnRb_lSWV8.webp 1200w, https://snorre.io/_astro/spotify-tui.BeZVvnRb_25RdRS.webp 1920w&quot; alt=&quot;Screenshot of Spotify TUI&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;2638&quot; height=&quot;1386&quot;&gt;
&lt;p&gt;My favorite thing about spotify-tui is the clean design.
There is no disturbing elements and you can use the q, arrow, and enter keys to do most of the navigation in the app.
There is support for themes, and you can configure things like the increment of the volume control, etc.
And as with the Spotifyd daemon the resource usage is marginal, consuming about &lt;code&gt;13 MB&lt;/code&gt; of memory.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Essentially you get the same listening experience with a little over &lt;code&gt;20 MB&lt;/code&gt; of memory consumed by two lightweight processes as you do with &lt;code&gt;~300 MB&lt;/code&gt; of memory spread over five more CPU intensive processes.
That is about an order of magnitude in difference.
If you’re running Spotify on a more memory constrained machine and find yourself using all the memory you might consider using the Spotifyd and Spotify TUI combo.&lt;/p&gt;
&lt;p&gt;Spotifyd also gives you the option of building your very own open-source Spotify listening device should you have the appropriate hardware laying about.&lt;/p&gt;
&lt;p&gt;Lets hope Spotify does not do something to limit playback to first party clients and partners, because this setup is great!&lt;/p&gt;</content:encoded></item><item><title>Ngrok like tunnels with Tailscale, a VPS, and Traefik</title><link>https://snorre.io/blog/2021-03-31-host-local-dev-http-server/</link><guid isPermaLink="true">https://snorre.io/blog/2021-03-31-host-local-dev-http-server/</guid><description>Build your own ngrok alternative: expose localhost over HTTPS using Tailscale, a VPS, and Traefik reverse proxy.</description><pubDate>Wed, 31 Mar 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Sometimes while developing you may want to test a callback or share your work over an https connection.
You might have turned to &lt;a href=&quot;https://ngrok.com&quot;&gt;ngrok&lt;/a&gt; a tool that allows you to create tunnels to your localhost.
Ngrok is a good tool, but to get consistent subdomains you need to pay for a subscription and you only get ngrok domains.
In this post we will see how I setup my own domain and tunnel to a dev server on my laptop using &lt;a href=&quot;https://tailscale.com&quot;&gt;Tailscale&lt;/a&gt; and a reverse proxy.&lt;/p&gt;
&lt;h2 id=&quot;tailscale---a-simpler-wireguard-setup&quot;&gt;Tailscale - A simpler Wireguard setup&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://tailscale.com&quot;&gt;Tailscale&lt;/a&gt; advertises itself as a “Zero config VPN”.
VPN is short for virtual private network and Tailscale implements such a network by building ontop of the Wireguard protocol.
In practice you install the Tailscale software on a device, start the daemon, and complete a login process via a URL.
Behind the scenes Tailscale will set up keys, distribute them to any other devices via their admin server to join the device into your Tailscale network.
This ensures that your new device is accessible from any existing devices in your Tailscale network.
There is of course nothing preventing you from setting up Wireguard on your laptop and server and then handling key creation and IPs yourself.&lt;/p&gt;
&lt;p&gt;What makes Tailscale useful is that it sets up an overlay network of sorts by meshing all devices and handling physical IP address changes.
For N devices you dont have to manually set up pairwise connections between all of them, Tailscale handles this for you.
If you run regular Wireguard and wanted a connection from your VPS to your laptop you’d have to update your config everytime your ISP modem changes your IP.&lt;/p&gt;
&lt;p&gt;Another nice feature of Tailscale is their magic DNS feature that automatically assigns domains to each of your devices based on their hostnames.
These DNS entries are then available on your Tailscale network interfaces and can be used when you want to access a device in place of their Tailscale IPs.
Say your laptop hostname is &lt;code&gt;Bobs-MBP&lt;/code&gt;, then Tailscale’s magic DNS will make the laptop available as &lt;code&gt;bobs-mbp&lt;/code&gt; across your devices.&lt;/p&gt;
&lt;p&gt;Each device in your Tailscale service can expose “services” which means any network exposed port running on that device.
Essentially if you have an http server listening to port 3000 on your dev machine, the service will be exposed under &lt;code&gt;bobs-mbp:3000&lt;/code&gt; on your Tailscale network.
If you join both your laptop and a virtual private server in the cloud to your Tailscale network, the VPS would then have access to your laptop’s services.&lt;/p&gt;
&lt;h2 id=&quot;exposing-your-services-to-the-internet&quot;&gt;Exposing your services to the Internet&lt;/h2&gt;
&lt;p&gt;With the Tailscale explanation out of the way we can move onto the part where I go into the ngrok like setup.
The chart below represents the simplified flow of an HTTPS request to your public domain all the way down to your laptop.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;mermaid&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;graph TB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    browser[Alice&amp;#39;s Browser]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    dns[Cloudflare DNS]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    vps[Cloud VPS]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    traefik[Traefik LB]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    tailscaleVPS[Tailscale VPS]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    magicDNS[Tailscale Magic DNS]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    tailscaleMBP[Tailscale MBP]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    service[Web Service]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    browser -- What is the IP of app.example.com? --&amp;gt; dns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    dns -- It is X.X.X.X --&amp;gt; browser&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    browser -- GET https://app.example.com --&amp;gt; vps&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    vps -- GET https://app.example.com --&amp;gt; traefik&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    traefik -- What is IP of bobs-mbp:3000 --&amp;gt; magicDNS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    magicDNS -- It is 100.X.X.X --&amp;gt; traefik&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    traefik -- GET http://100.X.X.X:3000 --&amp;gt; tailscaleVPS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    tailscaleVPS -- tunnel GET http://100.X.X.X:3000 --&amp;gt; tailscaleMBP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    tailscaleMBP -- GET http://local-ip:3000 --&amp;gt; service&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    service -- 200 OK --&amp;gt; tailscaleMBP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    tailscaleMBP -- tunnel 200 OK --&amp;gt; tailscaleVPS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    tailscaleVPS -- 200 OK --&amp;gt; traefik&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    traefik -- 200 OK --&amp;gt; vps&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    vps -- 200 OK --&amp;gt; browser&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So essentially what happens is that Alice’s browser performs an HTTPS request against some domain you have setup, e.g. &lt;code&gt;app.example.com&lt;/code&gt;.
This domain resolves to the public IP address of a server you control, commonly some kind of VPS.
As the request reaches your VPS it is routed to a load balancer you are running on the VPS, for example Traefik.
The load balancer is then configured to proxy the request to the domain that was generated by Tailscale’s magic DNS.
So in the example Traefik resolves &lt;code&gt;bobs-mbp&lt;/code&gt; to the Tailscale network IP address of the other device and performs a request with that IP.
The Tailscale daemon then handles tunneling that request over its udp tunnel to Bob’s MacBook Pro to the web service you’re running.&lt;/p&gt;
&lt;p&gt;When running Traefik on your VPS you might create a rule such as this:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# http routing section&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;http&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  [&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;http&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;routers&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;     # Define route to match requests for your domain to a service&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;     [&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;http&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;routers&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;yourapp-dev&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      rule = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;Host(`yourapp-dev.example.com`)&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      service = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;yourapp-dev&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;      # If you want https you need to first configure a certificate resolver which can be used as below&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      [&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;http&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;routers&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;yourapp-dev&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;tls&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        certResolver = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;letsencrypt&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  # Define a service to handle forwarding the request to your Tailscale domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  [&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;http&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;services&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    # Define how to reach an existing service on our infrastructure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    [&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;http&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;services&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;yourapp-dev&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;loadBalancer&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      [[&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;http&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;services&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;yourapp-dev&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;loadBalancer&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;servers&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        url = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;http://bobs-mbp:3000&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;in-conclusion&quot;&gt;In conclusion&lt;/h2&gt;
&lt;p&gt;While the setup might look complex from the diagram the process of setting everything up took about an hour of work.
The Tailscale service is simple to install and configure, and you’ll get going in almost no time.
Once both my VPS and laptop was enrolled in the Tailscale network and magic DNS had been enabled setting up the proxy was the only thing left to do.&lt;/p&gt;
&lt;p&gt;Tailscale, being built on top of the Wireguard protocol, performs really well and more than good enough for a dev environment.
With this approach you can expose your services to the internet in a safe manner on a domain you own.
Shutting down the public access to your service can be done in many ways including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;disconnecting your laptop from Tailscale, thus shuttign down the tunnel&lt;/li&gt;
&lt;li&gt;removing the proxy in your proxy server config, the tunnel is still there&lt;/li&gt;
&lt;li&gt;using Tailscale ACL config to deny your VPS access to the service, tunnel is there but connections stopped by ACL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In sum I think the setup works well enough that I won’t need ngrok.
Additionally Tailscale does more than ngrok and can be used as a traditional VPN when you are on unsecure networks.&lt;/p&gt;</content:encoded></item><item><title>Shared mutable app state in Actix Web</title><link>https://snorre.io/blog/2018-08-23-shared-mutable-cache-in-actix-web/</link><guid isPermaLink="true">https://snorre.io/blog/2018-08-23-shared-mutable-cache-in-actix-web/</guid><description>Using Mutex and Arc for thread-safe shared state in Actix Web, and why the server must be cloned per worker.</description><pubDate>Thu, 23 Aug 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Not too long ago, and in this very galaxy, I decided to learn &lt;a href=&quot;https://www.rust-lang.org/en-US/&quot;&gt;the Rust programming language&lt;/a&gt;. I went through each chapter in &lt;a href=&quot;https://doc.rust-lang.org/book/&quot;&gt;the Rust Book&lt;/a&gt; and discovered a lot of things I like about Rust. When the chapters ran out I set out to build something with Rust, a little pet project that would put my newly acquired Rust knowledge to the test. I decided to implement an authorization server using the &lt;a href=&quot;https://actix.rs/&quot;&gt;actix web framework&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A central component of the Actix web framework is the &lt;code&gt;App&lt;/code&gt; struct that is used to create an Actix application. The App struct has a generic type that is used as a placeholder for whatever struct you create to hold the application state to be used when handling requests. So far so good. I implemented my struct to hold my cache:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;pub&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; struct&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; AppState&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    pub&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; cache&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Mutex&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;TimedCache&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;CodeItem&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As you can see the Appstate struct’s cache property uses a Mutex type to hold the cache which would make it possible to do thread safe mutations on the cache via locking. Then I created the actix app:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;pub&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; fn&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; new_app&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; App&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;AppState&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; state &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; AppState&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        cache&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Mutex&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;TimedCache&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;with_lifespan&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;3600&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    App&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;with_state&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(state)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;middleware&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Logger&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;default&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // More app-building here&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;My main.rs module then instantiated a server with an app like so:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; mut&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; server &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; server&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; app&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;new_app&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In each request handler were I needed access to the cache I would simply look up the cache property in the app state and create a lock:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; mut&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; cache &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; match&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; state&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;cache&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;lock&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    Ok&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(cache) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; cache,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    Err&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(error) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Ok&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;HttpResponse&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;from_error&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ErrorInternalServerError&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;            format!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Failed to get lock on cache: {}&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, error),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        )))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And then add or get item:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; item &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; match&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; cache&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;cache_get&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;params&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;code) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    Some&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(item) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; item,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    None&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Ok&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;HttpResponse&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;from_error&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ErrorForbidden&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;            &quot;Code is no longer valid&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        )))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In my &lt;code&gt;/auth&lt;/code&gt; handler I would verify some authentication request, generate a code, cache the code, and finally return the response. In my &lt;code&gt;/token&lt;/code&gt; handler I would try to read the value associated with the code from the cache, as the code above shows. My less than profound knowledge of Rust and the Actix framework left me surprised when it turned out that the cache was properly set in the /auth handler, but then suddenly empty in the /token endpoint. As it turns out the &lt;a href=&quot;https://actix.rs/docs/application/&quot;&gt;Actix documentation&lt;/a&gt; offered an answer and a clue to fix this.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: http server accepts an application factory rather than an application instance. Http server constructs an application instance for each thread, thus application state must be constructed multiple times. If you want to share state between different threads, a shared object should be used, e.g. &lt;code&gt;Arc&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Aha! The &lt;code&gt;server::new(|| app::new_app())&lt;/code&gt; call will actually use the anonymous function (the application factory) to create an application for each thread it spawns. How does &lt;code&gt;Arc&lt;/code&gt; solve this? So I read the &lt;a href=&quot;https://doc.rust-lang.org/std/sync/struct.Arc.html&quot;&gt;Arc documentation&lt;/a&gt; and could surmise that &lt;code&gt;Arc&lt;/code&gt; is a thread safe reference count pointer and that invoking &lt;code&gt;clone&lt;/code&gt; on such a pointer creates a new reference to the same value in the heap. Well, that sure sounds useful to share the cache between the threads using my application. Let’s update the app struct:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;pub&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; struct&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; AppState&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    pub&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; cache&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Arc&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Mutex&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;TimedCache&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;CodeItem&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&gt;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now the cache property would hold an Arc style pointer to a cache value, and the value would only be deallocated once all the references to it was gone. Finally it was necessary to move the initialization of the cache to someplace outside the application factory. So for the time being I placed it right before the code constructing the server:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// In the app module&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;pub&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; fn&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; new_app&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(cache&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Arc&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Mutex&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;TimedCache&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;CodeItem&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&gt;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; App&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;AppState&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// App initialization code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// In the main module&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; cache &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Arc&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;        Mutex&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;            TimedCache&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;with_lifespan&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;3600&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; mut&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; server &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; server&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;move&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; ||&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; app&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;new_app&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(cache&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;clone&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;p&gt;Seasoned Rust developers and people familiar with the Actix framework probably think most of this is quite obvious, but to me this took some thinking to figure out. I hope this might help others starting out. Rust is pretty cool and I would recommend it to anyone wanting to learn a more low level language.&lt;/p&gt;</content:encoded></item><item><title>Coral Talk - An open source comment system from Mozilla</title><link>https://snorre.io/blog/2018-01-27-setting-up-coral-talk/</link><guid isPermaLink="true">https://snorre.io/blog/2018-01-27-setting-up-coral-talk/</guid><description>Coral Talk: Mozilla&apos;s open-source comment and moderation system. Self-hosted with Docker, MongoDB, and Redis.</description><pubDate>Sat, 27 Jan 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://coralproject.net/products/talk.html&quot;&gt;Coral Talk&lt;/a&gt; is a comment and moderation system from Mozilla. It is part of the Coral project which proclaims that it wants to improve journalism. I’m no journalist, but I found their comment system interesting for four particular reasons:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;It is open source and backed by mozilla&lt;/li&gt;
&lt;li&gt;It is self hosted which means&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;I own my own data&lt;/li&gt;
&lt;li&gt;Users won’t have their comments become ad targeting food&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;It has a simple admin and moderation dashboard&lt;/li&gt;
&lt;li&gt;It is based on a plugin architecture which allows anyone including me to easily extend its functionality&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I had &lt;a href=&quot;https://snorre.io/isso-a-lightweight-privacy-minded-comment-system/&quot;&gt;previously&lt;/a&gt; set up &lt;a href=&quot;https://posativ.org/isso/&quot;&gt;isso&lt;/a&gt; on my blog, but the lack of a moderation system not relying on smtp meant I would have to trust Internet users not to post obscene content or spam in my comment section. That said, isso is an excellent little comment server. If you have an smtp server set up the built in moderation feature might work for you.&lt;/p&gt;
&lt;p&gt;Talk checks some of the same checkboxes isso does. It is open source, self hosted, etc. It does however come at a greater resource cost using both mongodb and redis to store and cache content where isso just uses sqlite. It does not allow anonymous comments either, which is something that might stop people from commenting all together. I did receive some comments in my old isso installation. It will be interesting to see if anyone bothers creating a user to comment on any of my posts.&lt;/p&gt;
&lt;h2 id=&quot;running-coral-talk-with-docker&quot;&gt;Running Coral Talk with Docker&lt;/h2&gt;
&lt;p&gt;As you might have surmised I’m a fan of &lt;a href=&quot;https://www.docker.com/&quot;&gt;Docker&lt;/a&gt;. Docker allows you to quite easily run software without worrying about dependencies and process managers. The Talk project provides an &lt;a href=&quot;https://coralproject.github.io/talk/installation-from-docker/&quot;&gt;Installation from Docker&lt;/a&gt; guide which will get you started. Essentially you can host it using a docker-compose setup where talk, mongodb, and redis is configured. My current setup looks like this:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;3&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;services&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  talk&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    build&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;./talk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    restart&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;unless-stopped&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    ports&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;80:3000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    depends_on&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;mongo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;redis&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    networks&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;talk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    environment&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;TALK_MONGO_URL=mongodb://mongo/talk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;TALK_REDIS_URL=redis://redis&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;TALK_ROOT_URL=https://talk.&amp;#x3C;yourdomain&gt;.tld&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;TALK_PORT=3000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;TALK_JWT_SECRET=&amp;#x3C;your-super-secret-jwt-secret&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    logging&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      driver&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;json-file&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      options&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        max-size&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;512k&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        max-file&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;10&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  mongo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    image&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;mongo:latest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    restart&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;unless-stopped&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    volumes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;mongo:/data/db&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    networks&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;talk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    logging&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      driver&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;json-file&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      options&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        max-size&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;512k&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        max-file&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;10&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  redis&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    image&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;redis:latest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    restart&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;unless-stopped&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    volumes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;redis:/data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    networks&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;talk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    logging&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      driver&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;json-file&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      options&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        max-size&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;512k&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        max-file&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;10&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;volumes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  mongo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  redis&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;networks&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  talk&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note the &lt;code&gt;build: ./talk&lt;/code&gt; section under the &lt;code&gt;talk&lt;/code&gt; service. Because I’m not a big fan of Facebook login and setting up a Facebook app and api key just to use a comment system I decided to modify the default Talk docker image and not load the Facebook authentication plugin. My &lt;code&gt;Dockerfile&lt;/code&gt; to accomplish this is included below. The command simply removes the config line containing the facebook auth plugin.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;docker&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; coralproject/talk:4-onbuild&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;RUN&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; sed -i &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;/talk-plugin-facebook-auth/d&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; ./plugins.default.json&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This allows me to build an image where the Facebook authentication plugin is not activated and thus I do not have to setup a Facebook application just to use the Talk comment system. Setting up Talk using Docker proved to be quite easy.&lt;/p&gt;
&lt;p&gt;In conclusion I think Talk will serve me quite nicely. There are still features I have yet to try like the &lt;a href=&quot;https://blog.coralproject.net/toxic-avenging/&quot;&gt;toxic-comments&lt;/a&gt; plugin, authoring my own plugins, and of course creating a custom style. But everything in due time.&lt;/p&gt;</content:encoded></item><item><title>Building Docker images with Gitlab CI</title><link>https://snorre.io/blog/2018-02-14-building-docker-images-with-gitlab-ci/</link><guid isPermaLink="true">https://snorre.io/blog/2018-02-14-building-docker-images-with-gitlab-ci/</guid><description>Strategies for building Docker images with Gitlab CI: multistage builds, artifacts, and improving on early implementations.</description><pubDate>Wed, 14 Feb 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Different approaches to building Docker images with Gitlab CI, drawbacks, and solutions.&lt;/p&gt;
&lt;p&gt;My most popular blog post so far is &lt;a href=&quot;https://snorre.io/setting-up-gitlab-ci-runner-docker-image-builder/&quot;&gt;Setting up a Docker image builder with Gitlab CI Runner&lt;/a&gt;. The focus of that post was how you could set up a relatively secure Docker build environment using Gitlab CI and a host with a Docker engine. It also touches on the subject of how to design your &lt;code&gt;.gitlab-ci.yml&lt;/code&gt; pipeline to build a Docker image. I wrote that piece almost two years ago. Since then I have learned a few neat things about both Docker and Gitlab CI. There has also been some welcome updates in both Gitlab CI and Docker that has improved my docker building pipelines. In this post I will try to show you what my early implementations looked like, which problems they caused, and how later features allowed me to create better implementations. In the end this post should give you an idea about how you could go about setting up Gitlab pipelines to build your own Docker images using Gitlab CI and Docker.&lt;/p&gt;
&lt;h2 id=&quot;early-days&quot;&gt;Early days&lt;/h2&gt;
&lt;p&gt;In the early days of Docker and Gitlab CI Runner. Before &lt;a href=&quot;https://docs.docker.com/develop/develop-images/multistage-build/&quot;&gt;Docker multistage builds&lt;/a&gt; and &lt;a href=&quot;https://docs.gitlab.com/ce/user/project/pipelines/job_artifacts.html&quot;&gt;Gitlab job artifacts&lt;/a&gt; building applications and putting them in clean production Docker images was not straight forward. At least not with the &lt;code&gt;docker executor&lt;/code&gt;. My solution involved using the &lt;a href=&quot;https://docs.gitlab.com/ce/ci/yaml/README.html#cache&quot;&gt;cache&lt;/a&gt; feature to transfer build files from a &lt;em&gt;build&lt;/em&gt; stage into a &lt;em&gt;containerize&lt;/em&gt; stage and referencing them in the &lt;code&gt;Dockerfile&lt;/code&gt; used for the &lt;code&gt;docker build&lt;/code&gt; command. For a Node app written in Typescript using this solution might give you a &lt;code&gt;.gitlab-ci.yml&lt;/code&gt; file which looks like the one below.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;stages&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;build&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  containerize&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;cache&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  key&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;$CI_BUILD_REF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  paths&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;dist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;server.js&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package.json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  stage&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;build&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  image&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;node:8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;npm install&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;npm run build&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;containerize&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  stage&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;containerize&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  image&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;docker:17&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    -  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# A few lines to set DOCKER_HOST and certificates and log in.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;docker build -t user/my-typescript-image:latest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;docker push user/my-typescript-image:latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;Dockerfile&lt;/code&gt; would reference those files:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;docker&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; node:8-alpine&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;WORKDIR&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; /usr/src/app&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;COPY&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; ./package.json /usr/src/app/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;RUN&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; npm install --production&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;COPY&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; ./dist /usr/src/app/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;COPY&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; ./server.js /usr/src/app/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;CMD&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;node&quot;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;server.js&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;My approach worked relatively well, but has some problems.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The cached build files is not guaranteed to be there for the &lt;code&gt;containerize&lt;/code&gt; stage.&lt;/li&gt;
&lt;li&gt;The build files cache for various projects will build up until the cache is cleared.&lt;/li&gt;
&lt;li&gt;Clearing all the cache will cause other builds using cache for actual caching purposes to slow down.&lt;/li&gt;
&lt;li&gt;Depending on the &lt;em&gt;cache key&lt;/em&gt; used, cache collisions could occur thus causing potential race conditions where a containerize job ends up using build files from an unrelated build job.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All in all this was not a very elegant solution, and using cache for build output is not recommended today!&lt;/p&gt;
&lt;h2 id=&quot;enter-gitlab-job-artifacts&quot;&gt;Enter Gitlab Job Artifacts&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.gitlab.com/ce/user/project/pipelines/job_artifacts.html&quot;&gt;Gitlab job artifacts&lt;/a&gt; allows you to define the artifacts produced by a Gitlab CI job and have those files and folders archived and persisted in Gitlab. The artifacts are made available to subsequent jobs in the pipeline which makes them ideal for pipelines where the output of one job should be used in later stages. Gitlab eventually added the &lt;code&gt;expire_in&lt;/code&gt; option to the artifact feature which allows us to automatically clean up old build artifacts. Armed with this new feature I devised a new &lt;code&gt;.gitlab-ci.yml&lt;/code&gt; pipeline:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;stages&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;build&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  containerize&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  stage&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;build&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  image&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;node:8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;npm install&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;npm run build&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  artifacts&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    paths&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;dist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;server.js&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    expire_in&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;1 hour&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;containerize&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  stage&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;containerize&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  image&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;docker:17&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    -  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# A few lines to set DOCKER_HOST and certificates and log in.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;docker build -t user/my-typescript-image:latest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;docker push user/my-typescript-image:latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here we use the &lt;code&gt;artifacts&lt;/code&gt; configuration directive in the build job to instruct the CI runner to create an archive of our build files and to persist it in Gitlab for 1 hour. When the runner executes the &lt;code&gt;containerize&lt;/code&gt; job it will download and extract the artifacts archive and make the files available. After 1 hour Gitlab will delete the files. Because job artifacts are stored for their specific pipelines collisions will not occur. As you might have surmised artifacts fix a lot of the issues present with the cache based approach.&lt;/p&gt;
&lt;h2 id=&quot;multistage-docker-builds&quot;&gt;Multistage docker builds&lt;/h2&gt;
&lt;p&gt;The artifact approach above works quite well for many build scenarios. I still use it for some projects, but it does have some issues. Because the runner has to archive and upload the build files to Gitlab at the end of the &lt;code&gt;build&lt;/code&gt; job, and then download and extract the files at the start of the &lt;code&gt;containerize&lt;/code&gt; job, large builds could take some time to run. Because artifacts are unique per pipeline they will not help you with dependencies and build cache. For this you would have to use the Gitlab CI Runner’s cache feature.&lt;/p&gt;
&lt;p&gt;When Docker 17.05 was released it brought about the &lt;a href=&quot;https://docs.docker.com/develop/develop-images/multistage-build/&quot;&gt;Docker multistage build&lt;/a&gt; feature, promising a new and simpler way to build clean production images. This feature has simplified and improved how I build Docker images with Gitlab CI as the &lt;code&gt;build&lt;/code&gt; stage and job can be removed in favor of a single &lt;code&gt;containerize&lt;/code&gt; step using a multistage Dockerfile. In essence you would change your old &lt;code&gt;Dockerfile&lt;/code&gt; to use a build and production stage.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;docker&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; node:8 &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; builder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;WORKDIR&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; /usr/src/app&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;COPY&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; package.json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;RUN&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; npm install&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;COPY&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; ./src /usr/src/app/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;RUN&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; npm run build&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; node:8-alpine&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;WORKDIR&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; /usr/src/app&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;COPY&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; package.json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;RUN&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; npm install --production&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;COPY&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; --from=builder /usr/src/app/dist /usr/src/app/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;COPY&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; --from=builder /usr/src/app/server.js /usr/src/app/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;CMD&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;node&quot;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;server.js&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;builder&lt;/code&gt; stage in the Dockerfile, not to be confused with a Gitlab CI stage, will build the app using your regular &lt;code&gt;Dockerfile&lt;/code&gt; commands. When the &lt;code&gt;builder&lt;/code&gt; stage is complete Docker will have made image layers for the &lt;code&gt;builder&lt;/code&gt; stage. The final stage which produces your actual Docker image will start from the desired base image, here &lt;code&gt;node:8-alpine&lt;/code&gt;. We can then instruct the Dockerfile to copy files from the previous stage instead of our local file system. The result is a clean production image without build dependencies.&lt;/p&gt;
&lt;p&gt;You could then change your &lt;code&gt;.gitlab-ci.yml&lt;/code&gt; file to only use one CI stage:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;stages&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;containerize&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;containerize&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  stage&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;containerize&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  image&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;docker:&amp;#x3C;tag&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    -  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# A few lines to set DOCKER_HOST and certificates and log in.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;docker build -t user/my-typescript-image:latest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;docker push user/my-typescript-image:latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There are some major benefits to this approach. First of all you eliminate the overhead associated with the artifact handling in Gitlab. Second of all the image layers for your &lt;code&gt;Dockerfile&lt;/code&gt;’s &lt;code&gt;builder&lt;/code&gt; stage will be cached by Docker. If you have structured your &lt;code&gt;builder&lt;/code&gt; stage correctly Docker might already have the layers for the correct dependencies and build cache, and Docker will happily start on the &lt;code&gt;RUN&lt;/code&gt; command associated with your build (e.g. &lt;code&gt;RUN npm run build&lt;/code&gt;) thus saving a lot of time. Finally the multistage Dockerfile provides a much more consistent and portable build solution. In the artifact based approach you might end up with one build setup for local use and one for Gitlab CI. A multistage Dockerfile will happily work in both environments without any differences. This makes builds and build errors more reproducible as you can simply run &lt;code&gt;docker build -t my-container .&lt;/code&gt; locally on your dev machine if your build fails in Gitlab.&lt;/p&gt;
&lt;h3 id=&quot;two-dockerfiles-approach&quot;&gt;Two Dockerfiles approach&lt;/h3&gt;
&lt;p&gt;Readers with lots of Docker experience might have seen a different solution that I so far did not mention. Docker has a &lt;a href=&quot;https://docs.docker.com/engine/reference/commandline/cp/&quot;&gt;copy feature&lt;/a&gt; which allows you to copy files &lt;em&gt;out&lt;/em&gt; of a container. A solution would thus be to have two &lt;code&gt;Dockerfile&lt;/code&gt;s, one to produce build output and one to run your application. In a single &lt;code&gt;containerize&lt;/code&gt; CI job you would first build a Docker image of your project producing the build output inside the image. Then you would run a container from the image and copy out the necessary files. That container could then be stopped and you would build your production image. This solution was not apparent to me at the time, and would in any case be considered quite complex. The multistage feature works on the same principle, but is far simpler to implement.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;We have seen how building Docker images with Gitlab CI has gone from being a somewhat involved process with workarounds involving the Gitlab CI cache to being a first class experience. Using multistage Dockerfiles allows you to run your whole build process with the &lt;code&gt;docker build&lt;/code&gt; command, and reduce the complexity of your Gitlab CI pipelines. This post does not give you all the details, but should point you in the right direction.&lt;/p&gt;</content:encoded></item><item><title>Embedding Coral Talk in your Ghost Blog</title><link>https://snorre.io/blog/2018-08-23-embedding-coral-talk-in-your-ghost-blog/</link><guid isPermaLink="true">https://snorre.io/blog/2018-08-23-embedding-coral-talk-in-your-ghost-blog/</guid><description>Embed Coral Talk comments in Ghost without forking the theme: a footer script that mounts on post pages.</description><pubDate>Thu, 23 Aug 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today I changed how I embed the Coral Talk comment system in my blog posts. Previously I had downloaded the Casper theme and edited the &lt;em&gt;post.hbs&lt;/em&gt; file and inserted the Coral embed script. Then I re-uploaded the customized theme and enabled it in the admin panel. This works of course, but also mean you don’t get to enjoy any of the new Casper updates for free. Instead you need to regularly re-customize new versions of Casper. So today I decided to be a bit smarter about it and created this little embed script to add to the Ghost footer (via the admin dashboard):&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  src&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;https://talk.snorre.io/static/embed.js&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  async&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  onload&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  var&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; articles&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; document&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;getElementsByClassName&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;(&apos;post-full post&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;articles&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; ===&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    var&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; coral&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; document&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;createElement&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;(&apos;div&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    coral&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;setAttribute&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;(&apos;id&apos;, &apos;coral_talk_stream&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    articles&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;].&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;appendChild&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;coral&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    Coral&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;Talk&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;document&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;getElementById&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;(&apos;coral_talk_stream&apos;), {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;      talk&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;: &apos;https&lt;/span&gt;&lt;span style=&quot;color:#FDAEB7;font-style:italic&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;//talk.snorre.io/&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Removed image&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Code Injection Footer settings screen capture
So essentially I now first get all elements in the dom with the class name “post-full post”. Only if such an element is found do I create a div to mount Coral in and render Coral. As long as the Casper theme developers don’t change the class names for the article element on the post page this script will continue to do its job.&lt;/p&gt;
&lt;p&gt;This embed will only work for Ghost themes using the “post-full post” class name the same way Casper does you would need to change the script to fit your needs.&lt;/p&gt;
&lt;p&gt;Note that this setup will cause Ghost to load the Coral Talk embed.js source file on the homepage of your Ghost blog, but simply not mount the app. This is acceptable as your user most likely will navigate to one of your posts and have to load the embed.js file anyway.&lt;/p&gt;</content:encoded></item><item><title>Generating opengraph images for your Astro page</title><link>https://snorre.io/blog/2023-09-08-generating-opengraph-images-for-astro-copy/</link><guid isPermaLink="true">https://snorre.io/blog/2023-09-08-generating-opengraph-images-for-astro-copy/</guid><description>Automate Open Graph images for Astro using Satori: an Astro plugin that generates social preview images at build time.</description><pubDate>Fri, 08 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Facebook introduced the &lt;a href=&quot;https://ogp.me/&quot;&gt;Open Graph protocol&lt;/a&gt; in 2010.
It allows you to specify metadata about your page, such as the title, description, and image.
This metadata is then in turn used by social media platforms to display a preview of your page when it is shared.
The open graph image is especially important as it is the first thing people see when they see a link to your page.
The image should either be an eye-catching image or an image resembling your site brand in some way.
If you are anything like me and running an Astro site, you probably don’t want to manually create an image for every page you create.
Luckily, there is a way to automate this process.&lt;/p&gt;
&lt;h2 id=&quot;satori---a-simple-opengraph-image-generator&quot;&gt;Satori - A simple opengraph image generator&lt;/h2&gt;
&lt;p&gt;If you’ve browsed the Internet a bit you might have come over web site image previews with a nice background and some text.
I wanted to have something similar for my own site, and remembered something about a Vercel project that did just that.
After a bit of searching I found &lt;a href=&quot;https://www.npmjs.com/package/satori&quot;&gt;Satori&lt;/a&gt;, a simple opengraph image generator.
In short Satori allows you to write HTML and CSS that it then renders to an SVG.
It does this using a custom rendering engine that handles layouting, typograhpy, and other things.&lt;/p&gt;
&lt;p&gt;There are limitations however.
It only supports a limited flexbox layout, has some font limitations, and only ltr languages.
But for my use case it was perfect.&lt;/p&gt;
&lt;h2 id=&quot;using-satori-with-astro&quot;&gt;Using Satori with Astro&lt;/h2&gt;
&lt;p&gt;I did what any old developer would do and started searching for a pre-existing solution.
I found some options, but none of them were quite what I wanted.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://aidankinzett.com/blog/astro-open-graph-image/&quot;&gt;One blog post&lt;/a&gt; suggested using &lt;a href=&quot;https://www.npmjs.com/package/astro-og-canvas&quot;&gt;astro-og-canvar&lt;/a&gt; and generating static routes for each image./
This would work, but astro-og-canvas was too limited as it had a predefined layout.
I wanted to be able to use my own layout and have more control over the image.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/altano/npm-packages/tree/main/packages/astro-opengraph-image&quot;&gt;astro-opengraph-image&lt;/a&gt; seems like a promising effort.
It is implemented as an Astro middleware using Satori to generate the image.
Astro middleware run as part of the build process and can modify the output.
Unfortunately it is not yet ready as it requires changes to Astro before it will work as intended.&lt;/p&gt;
&lt;h2 id=&quot;implementing-my-own-solution&quot;&gt;Implementing my own solution&lt;/h2&gt;
&lt;p&gt;I decided to try and implement my own solution as an Astro plugin instead.
To build a plugin you simply need to create a JavaScript function that optionally takes some options and returns an object with a &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;hooks&lt;/code&gt; property.
The &lt;code&gt;name&lt;/code&gt; property is the name of the plugin, and the &lt;code&gt;hooks&lt;/code&gt; property is an object of the hooks the plugin wants Astro to call.
For example the &lt;code&gt;astro:config:done&lt;/code&gt; hook is called when Astro is done configuring itself.&lt;/p&gt;
&lt;p&gt;My plugin would run after Astro has built the site and generate an opengraph image for each page.
To do this I would need to use the &lt;code&gt;astro:build:done&lt;/code&gt; hook.
The plugin function is called with an object containing the routes (a.k.a pages) Astro has generated.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; * Satori plugin for Astro, returns Astro plugin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; satoriPlugin&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; AstroIntegration&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; astroConfig&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; AstroConfig&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    name: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;satori-plugin&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    hooks: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &amp;quot;astro:config:done&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: ({ &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; }) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        console.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;Store config for satori-plugin&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        astroConfig &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; config;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &amp;quot;astro:build:done&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; ({ &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;routes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; }) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        console.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;Build done, generate og:image for each route&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; profilePic&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; readFile&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;./public/images/profile.jpeg&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)).&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;base64&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; wavesSvg&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; readFile&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;./public/graphics/layered-waves-dark.svg&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)).&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;base64&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; ogImages&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; routes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;route&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; route.distURL?.pathname?.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;endsWith&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;index.html&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;route&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;            generateOgImage&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({ route, site: astroConfig.site &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &amp;quot;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, profilePic, wavesSvg }),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        await&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; Promise&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;all&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(ogImages);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The plugin function first run when Astro’s config done hook is done.
It reads the Astro config and stores it in a variable we can access later.&lt;/p&gt;
&lt;p&gt;Then when the Astro build is done the &lt;code&gt;astro:build:done&lt;/code&gt; hook is called and we can start generating the opengraph images.
We begin by reading the profile picture and the waves SVG file (my site uses an svg to add wavy gradients).
This is to avoid having Satori load the files from remote URLs and every time we generate an image.&lt;/p&gt;
&lt;p&gt;To find the routes to generate images for I simply filter the routes to only include the ones that ended with &lt;code&gt;index.html&lt;/code&gt;.
Other routes are not pages, but assets such as images and JavaScript files.
The &lt;code&gt;generateOgImage&lt;/code&gt; function is where the magic happens.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; * Generate an og:image for a given route&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; generateOgImage&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({ &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;site&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;route&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;profilePic&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;wavesSvg&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; GenerateOgImageProps&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // First we get the html for the route and parse out the title and description&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; html&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; readFile&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(route.distURL&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, { encoding: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;utf-8&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; root&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; parse&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(html.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; title&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    root.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;querySelector&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;meta[name=&amp;#39;title&amp;#39;]&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)?.attributes[&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;content&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &amp;quot;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; author&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &amp;quot;Snorre Magnus Davøen&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // Then we generate the URL for the og:image&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; template&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; OgImageTemplate&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({ site, title, author, profilePic, wavesSvg });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  try&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; svg&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; satori&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(template, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      width: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1200&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      height: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;600&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      fonts: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;          // Same font as used on the site headers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          name: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;shortstack&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          data: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; readFile&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;./public/fonts/shortstack-regular.woff&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          style: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;normal&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // calculate write path by replacing index.html with index-og.svg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; writePath&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; route.distURL&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.pathname.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &amp;quot;index.html&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &amp;quot;index-og.png&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // Convert svg to png &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; resvg&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Resvg&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(svg, {})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; png&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; resvg.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; pngBuffer&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; png.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;asPng&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    await&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; writeFile&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(writePath, pngBuffer);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (e) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    console.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;Could not generate og:image for route&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, route.route, e);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Okay so there is a lot going on here, so let me explain each part in some more detail.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;First we read the html for the route and parse it using &lt;a href=&quot;https://www.npmjs.com/package/parse5&quot;&gt;parse5&lt;/a&gt;.
This allows us to find the title and description for the page using the &lt;code&gt;meta&lt;/code&gt; tags.
We have to do this as the title and description are not available in the &lt;code&gt;astro:build:done&lt;/code&gt; hook data.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Then we generate an SVG opengraph image using Satori.
We pass in the title we found in the previous step, as well as the site name and author.
The &lt;code&gt;OgImageTemplate&lt;/code&gt; function is a simple function that returns a Satori template object structure.
This HTML string is then passed to Satori to generate the SVG.
We use the same font as the site headers to keep the style consistent.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;After we have generated the SVG we convert it to a PNG.
Generally opengraph consumers will not support SVGs, so PNGs are a better choice.
We use &lt;a href=&quot;https://www.npmjs.com/package/resvg&quot;&gt;resvg&lt;/a&gt; to convert the SVG to a PNG.
It is a fast XML to PNG converter with a focus on correctness.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Finally we write the PNG to the file system in a location that matches the route.
This is done by replacing &lt;code&gt;index.html&lt;/code&gt; with &lt;code&gt;index-og.png&lt;/code&gt; in the route path.
For example the route &lt;code&gt;/blog/astro-opengraph-image/index.html&lt;/code&gt; would be written to &lt;code&gt;/blog/astro-opengraph-image/index-og.png&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;using-the-plugin&quot;&gt;Using the plugin&lt;/h2&gt;
&lt;p&gt;To use the plugin I simply add it to my &lt;code&gt;astro.config.mjs&lt;/code&gt; file.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { satoriPlugin } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &amp;quot;./src/plugins/satori-plugin&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; default&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  integrations: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    satoriPlugin&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;the-result&quot;&gt;The result&lt;/h2&gt;
&lt;p&gt;In the end I got exactly what I wanted.
A simple way to generate opengraph images for my Astro site.
If you want to see the result you can check out the &lt;a href=&quot;https://snorre.io/blog/2023-09-08-generating-opengraph-images-for-astro/index-og.png&quot;&gt;open graph image for this page&lt;/a&gt;.
The full source code for my site is available on &lt;a href=&quot;https://github.com/snorremd/snorreio/blob/main/src/plugins/satori-plugin.ts&quot;&gt;GitHub&lt;/a&gt;.
Feel free to use it as a starting point for your own site.&lt;/p&gt;</content:encoded></item><item><title>process-bonk a small utility to watch and kill a process</title><link>https://snorre.io/blog/2024-01-16-process-bonk-killing-unruly-processes/</link><guid isPermaLink="true">https://snorre.io/blog/2024-01-16-process-bonk-killing-unruly-processes/</guid><description>A Rust utility to monitor process CPU usage and kill runaway processes when they hog resources for too long.</description><pubDate>Tue, 16 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It was a lovely day, I was at work doing my regular frontend development.
I was testing out the &lt;a href=&quot;https://github.com/aome510/spotify-player&quot;&gt;spotify_player&lt;/a&gt; a beautiful TUI client for spotify on MacOS.
As anyone testing out a new app I was curious to see how much resources it was using so I fired up the activity monitor.
&lt;code&gt;spotify_player&lt;/code&gt; was using a modest amount of resources and I was happy.
But to my dismay I discovered that a completely different process was using a lot of resources.
In fact it was using 100% of my CPU and had been doing so for quite a few hours!
It was a process that ran as a service and it was one that was mandated by my company.&lt;/p&gt;
&lt;p&gt;So I killed the process, it restarted, and from then on seemed to behave normally.
But I was curious, why did it start using so much resources?
Apparently it was a known issue that this process could sometimes go haywire, leak memory, and start hogging the CPU.
If there were shorter periods of high CPU usage it might be fine, but this process had been running for hours at 100% CPU usage.
That seems excessive for most processes, and I was reasonably sure the process was in fact buggy and restarting it was the way to go.&lt;/p&gt;
&lt;p&gt;Now the fun thing is that the new MacBook Pros are insanely quiet, and so the normal fan noise was not enough to alert me to the fact that my CPU was being used at 100%.
So how would I know if it started acting up again?
I could check the activity monitor every few minutes, but that would be borderline insane.
So I did what any sane person would do, I wrote a small utility to watch the process and allow me to kill it if it started acting up again.&lt;/p&gt;
&lt;h2 id=&quot;process-bonk&quot;&gt;process-bonk&lt;/h2&gt;
&lt;p&gt;Enter &lt;a href=&quot;https://github.com/snorremd/process-bonk&quot;&gt;process-bonk&lt;/a&gt;, a small utility to watch and kill a process.
It’s a small utility written in Rust that allows you to watch a process and kill it if it starts using too much CPU over time.
process-bonk is about a 100 lines of code, and a silly project, but it was fun to write and it is useful to me.
Basically the application works by reading the process name to monitor from a config file.
It then starts a monitoring loop that first identifies the process corresponding to the name.
Then it checks the CPU usage and if over a certain threshold starts a timer.
Now if the CPU usage is still over the threshold when the timer expires the app notifies me via a dialog and gives me the option to kill the process.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; std&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{env, fs};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; std&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;time&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Duration&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Instant&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; std&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;thread&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;sleep;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; sysinfo&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;System&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Signal&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; toml&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Value&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; native_dialog&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;MessageDialog&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;MessageType&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; mut&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; system &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; System&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;new_all&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; mut&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; monitored_process&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Option&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;sysinfo&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Process&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; mut&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; high_cpu_usage_start&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Option&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Instant&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // Get the config file path from the command-line arguments&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; args&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Vec&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; env&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;args&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;collect&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; args&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;len&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &amp;lt; &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;        println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;Please provide a config file path&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;        std&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;process&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;exit&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; config_file_path &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;args[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;Loading config file from {}&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, config_file_path);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // Read the config file&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; config_file_content &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; fs&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;read_to_string&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(config_file_path)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;expect&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;Could not read config file&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // Parse the TOML content&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Value&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; config_file_content&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;expect&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;Could not parse config file&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // Get the process name from the config&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; process_name &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;process_name&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;and_then&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Value&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;as_str)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;expect&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;Could not find &amp;#39;process_name&amp;#39; in config file&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // Log that we are monitoring the process&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;process-bonk is now monitoring the {} process&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, process_name);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    system&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;refresh_all&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    loop&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        while&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; monitored_process&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;is_none&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;            // Find the process&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;            let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; processes &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; system&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;processes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;            for&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (pid, process) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; processes&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;iter&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;                if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; process&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; process_name {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;                    println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;Found {} process with PID {}&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, process_name, pid);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                    monitored_process &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Some&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(process);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;                    break&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;            // If we didn&amp;#39;t find the process, sleep for a while before trying again&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; monitored_process&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;is_none&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;                println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;{} process not found, sleeping for 60 seconds&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, process_name);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;                sleep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Duration&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;from_secs&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;60&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; let&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Some&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(process) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; monitored_process {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;            let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; cpu_usage &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; process&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;cpu_usage&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;            if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; cpu_usage &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 98.0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;                match&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; high_cpu_usage_start {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;                    Some&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(start_time) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; start_time&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;elapsed&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Duration&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;from_secs&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;300&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                        // If the process has been using 100% CPU for more than 5 minutes, kill it&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;                        println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;{} has been using lots of CPU for more than 5 minutes, bonking it&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, process_name);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;                        let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; yes &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; MessageDialog&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;                            .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;set_type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;MessageType&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Info&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;                            .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;set_title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;Process Bonk&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;                            .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;set_text&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;format!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;{} is misbehaving, kill it?&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, process_name))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;                            .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;show_confirm&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;                            .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;unwrap&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;                        if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; yes {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;                            println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;User chose to kill {}&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, process_name);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                            process&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;kill_with&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Signal&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Kill&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                        } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;                            println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;User chose not to kill {}&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, process_name);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                        // User has been notified, reset the tracking&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                        high_cpu_usage_start &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;                    None&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                        // Start tracking when the process started using 100% CPU&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;                        println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;{} started using lots of CPU at {}%, will bonk if not behaving&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, process_name, cpu_usage);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                        high_cpu_usage_start &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Some&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Instant&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;now&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;());&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                    _ &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;                        println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;{} is still using lots of CPU at {}% for {} minutes&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, process_name, cpu_usage, high_cpu_usage_start&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;unwrap&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;elapsed&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;as_secs&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 60&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;            } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;                // If the process is not using 100% CPU anymore, reset tracking&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;                println!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;{} is currently using {}% CPU&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, process_name, cpu_usage);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;                high_cpu_usage_start &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // Sleep for a while before the next iteration&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;        sleep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Duration&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;from_secs&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;60&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But how to run this thing?
I didn’t want to have to manually start it every time I rebooted my computer.
Well fortunately I remembered having previous experience with Brew formulas implemented as services.
Homebrew allows formula creators to create application services that gets installed as MacOS launchd services.
I also had some experience with creating Homebrew formulas, so I decided to create a formula for process-bonk.&lt;/p&gt;
&lt;h2 id=&quot;process-bonk-homebrew-formula&quot;&gt;process-bonk Homebrew formula&lt;/h2&gt;
&lt;p&gt;The Homebrew formula is pretty simple, it compiles the Rust application using &lt;code&gt;cargo build --release&lt;/code&gt; and then installs it as a launchd service.
The formula is available in the &lt;a href=&quot;https://github.com/snorremd/homebrew-tap&quot;&gt;process-bonk Homebrew tap&lt;/a&gt; and can be installed using the following command:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; snorremd/tap/process-bonk&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Again there is not that many lines of code to achieve my goal, but it was my first service!&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;ruby&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; ProcessBonk&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; &amp;lt; &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Formula&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  desc &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;BONK process, don&amp;#39;t eat all my Mac&amp;#39;s CPU&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  homepage &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;https://github.com/snorremd/process-bonk&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  url &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;https://github.com/snorremd/process-bonk/archive/refs/tags/v0.1.0.tar.gz&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  sha256 &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;6a6bedc6b2e0b17badd068cc99c720de7aaa5492a218ead7a750469345234f38&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  license &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;MIT&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  bottle &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    root_url &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;https://ghcr.io/v2/snorremd/tap&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    sha256 &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;cellar:&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; :any_skip_relocation&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;ventura:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &amp;quot;907b82f4dbae39a595fb75fe197a0792cce270329d9b97d0fb0c8280ebbe4f26&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    sha256 &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;cellar:&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; :any_skip_relocation&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;x86_64_linux:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &amp;quot;fd68dccc7bdc3aa415c5513784acd27f8dea524afe58ffafc0a57f70b45091f4&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  depends_on &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;rust&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; =&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;:build&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  def&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; install&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    system&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &amp;quot;cargo&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;install&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;std_cargo_args&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  service &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    run [opt_bin&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;process-bonk&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;#{etc}&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/process-bonk/process-bonk.toml&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    log_path var&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;log/process-bonk.log&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    error_log_path var&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;log/process-bonk.log&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  def&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; post_install&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    # Create a configuration file if it doesn&amp;#39;t exist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    (etc&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;process-bonk&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;mkpath&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    unless&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (etc&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;process-bonk/process-bonk.toml&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;exist?&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      (etc&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;process-bonk/process-bonk.toml&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &amp;lt;&amp;lt;~EOS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;        process_name = &amp;quot;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      EOS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  def&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; caveats&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;lt;&amp;lt;~EOS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      The config file is located at:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      #{pkgetc}&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/process-bonk.toml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      Please edit this file to suit your needs.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      E.g. to monitor a process with name &amp;quot;my-process&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      specify the following in the config file:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      process_name = &amp;quot;my-process&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    EOS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  test&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    system&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &amp;quot;true&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  end&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As you can see it uses the rust toolchain dependency in Homebrew as a dependency.
It compiles the application using &lt;code&gt;cargo&lt;/code&gt; and installs it as a service.
A default config file is also created if it doesn’t exist, and the Formula prints a message to the user to edit the config file.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;So far I’ve only tested the service on my own computer, and the process in question have ironically so far behaved itself.
Maybe it is scared of being bonked?
But I’m happy to have learned a bit more about Rust, Homebrew, and MacOS services.
And I’m happy to have a small utility that can help me monitor and kill a process if it starts acting up.&lt;/p&gt;
&lt;p&gt;If you want to try out process-bonk feel free to read the code and install it using the Homebrew formula.
If you have any feedback or suggestions feel free to open an issue or a pull request on the process-bonk repository.&lt;/p&gt;</content:encoded></item><item><title>A comment system on top of ATProto and Bluesky</title><link>https://snorre.io/blog/2023-08-19-atproto-bluesky-comment-system/</link><guid isPermaLink="true">https://snorre.io/blog/2023-08-19-atproto-bluesky-comment-system/</guid><description>Building a blog comment system using AT Protocol and Bluesky: fetch threads, post replies, and display likes.</description><pubDate>Sat, 19 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In this post you will learn about how I built a comment interface on top the &lt;a href=&quot;https://atproto.com/&quot;&gt;ATProto&lt;/a&gt; protocol and &lt;a href=&quot;https://blueskyweb.xyz&quot;&gt;Bluesky&lt;/a&gt; social network.
The post is relatively technical, but I also try to tell a story of how I got to this point.
Read on if you are interested in social networks, decentralized protocols, open standards, and Bluesky.&lt;/p&gt;
&lt;h2 id=&quot;some-history-first&quot;&gt;Some history first&lt;/h2&gt;
&lt;p&gt;This is not the first time I’ve tried to run a comment system on my blog.
I was determined to create a nice blog, and any nice blog needs a comment system right?
&lt;a href=&quot;https://disqus.com/&quot;&gt;Disqus&lt;/a&gt; was out of the question for reasons of privacy and tracking.&lt;/p&gt;
&lt;p&gt;Research suggested that &lt;a href=&quot;https://isso-comments.de/&quot;&gt;Isso&lt;/a&gt; was a good option.
Isso &lt;a href=&quot;https://snorre.io/blog/2016-05-03-isso-a-lightweight-privacy-minded-comment-system&quot;&gt;solved a lot of the problems&lt;/a&gt; I had with Disqus.
It was self hosted, stored everything in a SQLite database, and was open source.
Additionally it did not require users to sign up for an account in order to comment.
Isso is probably still a good option for many people, but alas I eventually wanted something with more features.&lt;/p&gt;
&lt;p&gt;Along came &lt;a href=&quot;https://coralproject.net/&quot;&gt;Coral Talk&lt;/a&gt;.
It was open source, backed by Mozilla (at the time), and had a lot of features.
The implementation supported plugins and was written in Node.js, meaning I could read the source code.
I even built a more privacy friendly &lt;a href=&quot;https://snorre.io/blog/2018-04-25-a-privacy-respecting-talk-gravatar-plugin/&quot;&gt;Gravatar plugin&lt;/a&gt;.
Unlike Isso though it was rather heavy, complex to setup, and required a database.
It slowly dawned on me that I was not a news site and probably not in need of all the features Coral Talk provided.&lt;/p&gt;
&lt;h2 id=&quot;the-fediverse-and-the-micro-community-trap&quot;&gt;The Fediverse and the micro community trap&lt;/h2&gt;
&lt;p&gt;Meanwhile a lot of interesting things where happening in the social network space.
People were exploring and building decentralized or federated social network protocols.
One of the more successful attempts at the time were &lt;a href=&quot;https://www.w3.org/TR/activitypub/&quot;&gt;ActivityPub&lt;/a&gt;.
&lt;a href=&quot;https://joinmastodon.org/&quot;&gt;Mastodon&lt;/a&gt; is perhaps the most recognizable project using ActivityPub.
As the experience of Twitter became ever more toxic Mastodon seemed like a promising alternative.
One of the things that these new social networks promised was data ownership and portability.&lt;/p&gt;
&lt;p&gt;An idea started to form in my head, what if I use Mastodon as a comment system?
Then people could comment on my posts on Mastodon and I could fetch the comments and display them on my blog.
I joined one of the “official” Mastodon instances in the hope that a lot of people would be there.
But with time it became clear that the fediverse was pretty small and fragmented.
It would be difficult to get the reach I wanted for my blog as the right people would have to share my posts for it to reach multiple instances.
The protocol is also quite complex and implementing a client capable of adding comments to the fediverse seemed a bit daunting.&lt;/p&gt;
&lt;h2 id=&quot;cryptobros-and-web3-enthusiasts&quot;&gt;Cryptobros and web3 enthusiasts&lt;/h2&gt;
&lt;p&gt;Later Elon Musk bought Twitter and again I wanted to find a new home for my social media presence.
Someone posted about &lt;a href=&quot;https://nostr.com/&quot;&gt;Nostr&lt;/a&gt; and after reading about the protocol I decided to give it a try.
Nostr is a true decentralized social network protocol, and as such does not present the same issues as Mastodon in terms of fragmentation.
Running a server seemed simpler, and content would be more discoverable across servers.
But to my big dismay the network seemed full of cryptobros, web3 enthusiasts, and other people I did not desire to engage with.
Back when I was in university, Web 3.0, the future of the web, was all about the semantic web and linked data.
Not at all about crypto currencies, smart contracts and pyramid schemes.
But I digress.&lt;/p&gt;
&lt;h2 id=&quot;atproto-and-bluesky&quot;&gt;ATProto and Bluesky&lt;/h2&gt;
&lt;p&gt;I was about to give up on the idea of having a comment system when I came across the &lt;a href=&quot;https://atproto.com/&quot;&gt;AT Protocol&lt;/a&gt; and &lt;a href=&quot;https://blueskyweb.xyz&quot;&gt;Bluesky&lt;/a&gt;.
ATProto saw its infancy inside Twitter, but was later spun out as an independent project and company.
Like Mastodon the protocol is federated, but not focused on keeping instances separate.
Instead ATProto is based on global discovery services and freedom to choose your algorithms.
No matter what instance you are on you can see content from other instances, perfect!&lt;/p&gt;
&lt;p&gt;So after receiving an invite to the Bluesky server I started looking at the protocol and client libraries.
I won’t go into too much details about the protocol here, but I will try to summarise the important bits.&lt;/p&gt;
&lt;p&gt;Every user has a &lt;em&gt;repository&lt;/em&gt; of data records, each record being some unspecified type of data.
Each ATProto data server also has a lexicon of &lt;em&gt;record types&lt;/em&gt; that enumerate the types .
For Bluesky data types could be things like post, like, follow, profile, etc.
Additionnaly the lexicon describes &lt;em&gt;methods&lt;/em&gt;, i.e. things you can do on the server.
For Bluesky these include fetching a post thread or creating a new post.&lt;/p&gt;
&lt;p&gt;For my comment system I essentially only needed three methods from the Bluesky server:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;app.bsky.feed.getPostThread&lt;/code&gt; to fetch all the replies to a post I use as a comment thread&lt;/li&gt;
&lt;li&gt;&lt;code&gt;app.bsky.feed.post&lt;/code&gt; to add a new comment to a blog post or reply to an existing comment&lt;/li&gt;
&lt;li&gt;&lt;code&gt;app.bsky.feed.like&lt;/code&gt; to allow users to like a comment&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;implementation&quot;&gt;Implementation&lt;/h2&gt;
&lt;p&gt;I had a few goals for the implementation of my Bluesky-based comment system:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Keep it reasonsbly light weight&lt;/li&gt;
&lt;li&gt;Fit seamlessly into my blog design&lt;/li&gt;
&lt;li&gt;Simple enough implementation&lt;/li&gt;
&lt;li&gt;Don’t gather any data unless necessary&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My choice fell on a client-side only solution using the &lt;a href=&quot;https://docs.astro.build/en/concepts/islands/&quot;&gt;Astro islands pattern&lt;/a&gt;.
The islands pattern allows you to integrate client-side components at specific points in your static site.
Astro also supports &lt;a href=&quot;https://www.solidjs.com/&quot;&gt;Solid&lt;/a&gt;, a relatively young client-side library for building user interfaces.
Conceptually it is similar to React, but escews the virtual DOM and instead compiles to native DOM operations.
It also has a very small run time footprint, but still manages to be fast and provide the features I need.&lt;/p&gt;
&lt;p&gt;I would also need to talk to the Bluesky server somehow.
While I could have implemented the lexicon methods from scratch we are fortunate enough that there is an &lt;a href=&quot;https://github.com/bluesky-social/atproto/tree/main/packages/api&quot;&gt;ATProto client&lt;/a&gt;.
The ATProto client libraries are written in TypeScript and are quite easy to use in a typical Type/JavaScript project.
It provides a simple API for talking to the server and also handles authentication.&lt;/p&gt;
&lt;p&gt;You can find the source code for the comment system &lt;a href=&quot;https://github.com/snorremd/snorreio/blob/main/src/components/comments&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;authentication&quot;&gt;Authentication&lt;/h3&gt;
&lt;p&gt;Users authenticate using their Bluesky handle and app password.
To keep the authentication live I cache the authentication token in local storage so that it can be reused on page reloads.
The token is also used to fetch the user’s profile information, which is used to display the user’s avatar and name.&lt;/p&gt;
&lt;h3 id=&quot;fetching-and-displaying-comments&quot;&gt;Fetching and displaying comments&lt;/h3&gt;
&lt;p&gt;The first thing I do when the comment component is mounted and a user is logged in is to fetch the comments for the current post.
I do this by calling the &lt;code&gt;app.bsky.feed.getPostThread&lt;/code&gt;.
The reponse is a tree shaped structure of posts, with an optional &lt;code&gt;parent&lt;/code&gt; and a list of one or more &lt;code&gt;replies&lt;/code&gt;.
The &lt;code&gt;parent&lt;/code&gt; is the post that the current post is a reply to, and the &lt;code&gt;replies&lt;/code&gt; are the posts that are replies to the current post.&lt;/p&gt;
&lt;p&gt;I initially thought that the simplest way to display the comments would be to use a recursive component.
This would make the rendering code a bit more complex, but it would allow me to render without having to do data transformations.
With this approach I would display the thread using the old school nested comments view where each reply is indented.
But how would this handle very long reply chains?
And would users familiar with the modern flat comments view be confused by the nested view?&lt;/p&gt;
&lt;p&gt;I decided to go with a flat view mimicing the Bluesky app, but I was stumped on how they flattened the tree!
Fortunately Bluesky is open source, so I could just go and look at the source code.
It turns out that two functions are essential in determining the view.
The &lt;a href=&quot;https://github.com/bluesky-social/social-app/blob/257c15ec1f1b327e21f6e1f5707e6c0724d3afc6/src/state/models/content/post-thread-item.ts#L74&quot;&gt;&lt;code&gt;PostThreadItemModel.assignTreeModels&lt;/code&gt;&lt;/a&gt;
method determines for each post if reply lines should be shown.
The &lt;a href=&quot;https://github.com/bluesky-social/social-app/blob/257c15ec1f1b327e21f6e1f5707e6c0724d3afc6/src/view/com/post-thread/PostThread.tsx#L329C11-L329C24&quot;&gt;&lt;code&gt;flattenThread&lt;/code&gt;&lt;/a&gt;
function then flattens the tree into a list of posts, first walking up any parent posts and then walking down the replies.
There is also a sorting step, but I decided to skip that as I don’t expect to have a lot of comments.&lt;/p&gt;
&lt;h4 id=&quot;should-we-show-reply-lines&quot;&gt;Should we show reply lines?&lt;/h4&gt;
&lt;p&gt;I simplified the &lt;code&gt;assignTreeModels&lt;/code&gt; method, but the basic idea is the same.
When you fetch a post thread you can specify a &lt;code&gt;highlightedPost&lt;/code&gt; which is the post that the user is currently viewing.
This puts the outermost post in the response in the middle of the tree!
After checking the first parent we recursively check the parent’s parent until we reach the original post.&lt;/p&gt;
&lt;p&gt;Next we start enumerating all the replies and for each reply check if we should add reply lines.
Reply lines are added if the reply has replies of its own.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; addThreadUIData&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;  threadViewPost&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; ThreadViewPostUI&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;  walkChildren&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;  walkParent&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; ThreadViewPostUI&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; parent &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; threadViewPost.parent;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (walkParent &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; AppBskyFeedDefs.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;isFeedViewPost&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(threadViewPost.parent)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // Recursively add UI data to parent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; newParent&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      ...&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;threadViewPost.parent,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      showParentReplyLine: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      showChildReplyLine: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      isHighlightedPost: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;satisfies&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; ThreadViewPostUI&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    threadViewPost.parent &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; newParent;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    addThreadUIData&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(newParent, (walkChildren &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;), (walkParent &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; replies&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; ThreadViewPostUI&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (walkChildren &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; threadViewPost.replies?.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    replies &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; threadViewPost.replies&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;reply&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (AppBskyFeedDefs.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;isThreadViewPost&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(reply)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;          // Recursively add UI data to children&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;          return&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; addThreadUIData&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;            ...&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;reply,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;            showParentReplyLine: threadViewPost?.isHighlightedPost&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;              ?&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;              :&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;            showChildReplyLine:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;              (reply?.replies?.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; ??&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;            isHighlightedPost: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;satisfies&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; ThreadViewPostUI&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        return&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; undefined&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt; x&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; is&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; ThreadViewPostUI&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; undefined&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;threadViewPost, parent, replies };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;flattening-the-tree&quot;&gt;Flattening the tree&lt;/h4&gt;
&lt;p&gt;Here the Bluesky app code used a fairly smart trick.
JavaScript has a concept called &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator&quot;&gt;generators&lt;/a&gt;.
Generators allow you to write functions that can be paused and resumed.
The Bluesky app ingeniously uses this to flatten the tree.
The &lt;code&gt;flattenThread&lt;/code&gt; function is a generator that yields posts as it walks up the tree and then down the replies.
By using a recursive generator function we can produce a flat list without producing a lot of intermediate data structures.&lt;/p&gt;
&lt;p&gt;My &lt;code&gt;flatten&lt;/code&gt; function is more or less the same as theirs.
It first recursively walks up the tree, yielding the result of calling &lt;code&gt;flatten&lt;/code&gt; on the parent.
Once we reach the top of the tree we yield the post being flattened.
This ensures the root parent is yielded first, then the second parent, and so forth.
Note that the tree does not contain the siblings of the parents as this data is not interesting in context of the highlighted post.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;flatten&lt;/code&gt; function then yields the highlighted post as it has now yielded all parents.&lt;/p&gt;
&lt;p&gt;Finally we walk down the replies yielding the result of recursively calling &lt;code&gt;flatten&lt;/code&gt; on each reply.
This causes the recursive calls to be evaluated in a &lt;a href=&quot;https://en.wikipedia.org/wiki/Tree_traversal&quot;&gt;pre order traversal&lt;/a&gt; of the tree.
It begins with the left most child, then the left most child of the left most child, and so forth.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; function*&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; flatten&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;  thread&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; ThreadViewPostUI&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Generator&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ThreadViewPostUI&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (thread.parent) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;isKnownType&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(thread.parent)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (AppBskyFeedDefs.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;isThreadViewPost&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(thread.parent)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        yield*&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; flatten&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(thread.parent &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; ThreadViewPostUI&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  yield&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; thread;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (thread.replies &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; thread.replies.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; reply&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; of&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; thread.replies) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;isKnownType&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(reply)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (AppBskyFeedDefs.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;isThreadViewPost&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(reply)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;          yield*&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; flatten&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(reply &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; ThreadViewPostUI&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you think about the order in which the posts are yielded you will recognise the Bluesky app view.
It shows a chain of posts down to the highlihted post without any of the sibling replies.
From the highligted post it shows the replies in a flat list, showing nested replies as a chain.
This is exactly what we want!&lt;/p&gt;
&lt;h3 id=&quot;styling-and-layout&quot;&gt;Styling and layout&lt;/h3&gt;
&lt;p&gt;I wanted the comment system to fit seamlessly into my blog design.
So I just used the same styling setup as the rest of my blog.
It uses &lt;a href=&quot;https://tailwindcss.com/&quot;&gt;Tailwind CSS&lt;/a&gt; and &lt;a href=&quot;https://postcss.org/&quot;&gt;PostCSS&lt;/a&gt; to style content.
Tailwidn has seen its fair share of criticism, but I find it to be a very pleasent and flexible way to style content.&lt;/p&gt;
&lt;p&gt;Essentially Tailwind is a set of CSS utility classes that represent common CSS properties.
What makes Tailwind so special is that the utility classes are built on top of a design system.
Unlike using regular CSS, where you have to decide on the values for each property, Tailwind provides a set of values that work well together.&lt;/p&gt;
&lt;p&gt;Tailwind defines a list of colors, whitespace sizes, font sizes, border radii, etc.
You can then use these values to get consistent styling across your site.
For example, instead of deciding on a specific font size for a heading you can use the &lt;code&gt;text-2xl&lt;/code&gt; class.
If you always use the &lt;code&gt;text-2xl&lt;/code&gt; class for h1 headings you can easily change the font size for all headings by changing the value of &lt;code&gt;text-2xl&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You could of course define a design system using CSS Custom Properties (aka CSS variables).
But then you’d have to write css classes for each type of layout and component in your markup.
Tailwind frees you from having to artifically separate style from markup and grouping css attributes into classes.
Instead you can just use the utility classes directly in your markup.&lt;/p&gt;
&lt;p&gt;With Tailwind you’d write something like this:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;bg-gray-100 rounded-lg p-4&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;text-2xl&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;Hello world&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;text-lg&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;This is a paragraph&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Instead of this:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;my-component&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;my-component__heading&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;Hello world&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;my-component__paragraph&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;This is a paragraph&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;css&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;.my-component&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  background-color&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;--color-gray-100&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  border-radius&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;--border-radius&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  padding&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;--spacing-4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;.my-component__heading&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  font-size&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;--font-size-2xl&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;.my-component__paragraph&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  font-size&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;--font-size-lg&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;privacy-and-data-collection&quot;&gt;Privacy and data collection&lt;/h3&gt;
&lt;p&gt;I wanted to avoid collecting any data about my users.
The comment system is entirely handled client-side, so I don’t have to worry about storing any data.
When users comment on my blog all communication goes directly to the Bluesky server.
Users can easily check that no data is sent to my server by inspecting the network requests.
I never touch any data and never see my readers’ passwords.
All in all I consider this a big win.
Of course my readers now need to trust a third party, but if you are on Bluesky you already trust them.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I am very happy with the result.
The comment system is light weight, easy to use, and fits seamlessly into my blog design.
This is a one time integration, so I don’t have to worry about maintaining a server or database.
I also don’t have to worry about privacy as I don’t collect any data.
The only downside is that users need to have a Bluesky account, but as it becomes more available I hope this will be less of an issue.&lt;/p&gt;
&lt;p&gt;The comment system is currently in a minimal viable product state.
It works and looks pretty good, but there are missing features and imperfections.
Among other things I would like to support clicking a reply to highlight it, just like the Bluesky app.
It would also be nice to extract it into a separate component that can be reused on other sites.
But for now I am happy with the result and I hope you will enjoy using it.&lt;/p&gt;</content:encoded></item><item><title>Building beer recipe pages with Astro and Brewfather</title><link>https://snorre.io/blog/2023-12-18-beer-recipes-from-brewfather/</link><guid isPermaLink="true">https://snorre.io/blog/2023-12-18-beer-recipes-from-brewfather/</guid><description>Fetching recipes from Brewfather&apos;s API with babashka, and building static beer recipe pages with Astro.</description><pubDate>Mon, 18 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Christmas is coming up and I took an early vacation to spend some time on my side projects.
One of my precious hobbies is home brewing which I get to do every so often.
Me and my friend like to experiment with different recipes that we make ourselves.
For recipes I use a tool called &lt;a href=&quot;https://brewfather.app/&quot;&gt;Brewfather&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Brewfather is a great tool for creating and managing your recipes and brew sessions.
As a home brewer I have often found help in reading and learning from other people’s recipes.
So I wanted a way to share my recipes with the home brewing world.
There is a function in Brewfather to share individual recipes via links, but I wanted to have a place where I could share all my recipes in one place.
As I already have this site I thought it would be a good idea to add a section for my recipes here.&lt;/p&gt;
&lt;h2 id=&quot;brewfather-api&quot;&gt;Brewfather API&lt;/h2&gt;
&lt;p&gt;Fortunately for me Brewfather has &lt;a href=&quot;https://docs.brewfather.app/api&quot;&gt;an official API&lt;/a&gt; that I can use to fetch my recipes.
The API is provided as a REST-like API with endpoints for fetching recipes, batches, and inventory.
So I set out to build a helper script that would download each recipe and save it as a JSON file.
Because I’m in love with &lt;a href=&quot;https://clojure.org/&quot;&gt;Clojure&lt;/a&gt; from my old job, I decided to use &lt;a href=&quot;https://https://babashka.org/&quot;&gt;babashka&lt;/a&gt; to build it.&lt;/p&gt;
&lt;p&gt;The script is pretty simple, it essentially boils down to a few steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Define some global variables&lt;/li&gt;
&lt;li&gt;Fetch the API secret using the 1Password CLI&lt;/li&gt;
&lt;li&gt;Fetch the list of recipes not already downloaded&lt;/li&gt;
&lt;li&gt;Fetch each recipe and save it as a JSON file&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The main function then looks like this:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;clojure&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;defn&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; main&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [&amp;amp; args]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  (&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;op-available?&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  (&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;as-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;op-secret!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) $&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;basic-auth&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; client $)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;list-remote-recipes!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; $ (&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;last-recipe!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; :_id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; $)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    (&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;doseq&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [id $]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      (&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &amp;quot;Fetcing recipe&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; id)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      (&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;fetch-remote-recipe!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;basic-auth&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; client (&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;op-secret!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)) id)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          (&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;write-recipe!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)))))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I keep the secret stored in 1Password and fetch it directly from 1Password using their CLI to avoid leaking it.
Leaking the secret can happen if you pass it as an environment variable or as a command line argument.
Brewfather uses basic authentication so I create a basic auth header using the hard-coded client id and the secret.
Then I fetch the list of recipes that I haven’t already downloaded.
Because I order the recipes by date I can use the last recipe I downloaded as a starting point.
I then map the list of recipes to their ids and fetch each recipe and save it as a JSON file.&lt;/p&gt;
&lt;h2 id=&quot;astro&quot;&gt;Astro&lt;/h2&gt;
&lt;p&gt;Now that I have all my recipes downloaded I need to build a page to display them.
Astro has great support for &lt;a href=&quot;https://docs.astro.build/en/guides/content-collections&quot;&gt;data collections&lt;/a&gt;.
This allows me to define a collection type for my beer recipes and strongly type them via &lt;a href=&quot;https://zod.dev/&quot;&gt;zod schemas&lt;/a&gt;.
So I created a &lt;code&gt;config.ts&lt;/code&gt; file in &lt;code&gt;src/content/config.ts&lt;/code&gt; and defined my collection type:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;typescript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Sub schemas elided for brevity&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; beerRecipesCollection&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; defineCollection&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  type: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;data&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  schema: z.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    name: z.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    slug: z.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    _timestamp_ms: z.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    abv: z.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ibu: z.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    color: z.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    fg: z.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    og: z.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    batchSize: z.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// liters&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    style: style.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;optional&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;nullable&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    mash: mashAndFerment,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    fermentables: z.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(fermentable),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    yeasts: z.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(yeast),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    hops: z.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(hop),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    equipment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; collections&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  beers: beerRecipesCollection,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So now I have a collection of beer recipes that I can use in my pages.
I then defined two pages, one for the list of recipes and one for the individual recipes.&lt;/p&gt;
&lt;h3 id=&quot;list-page&quot;&gt;List page&lt;/h3&gt;
&lt;p&gt;The list page, &lt;code&gt;/src/pages/beers.astro&lt;/code&gt;, is pretty simple.
It just lists all the recipes in the collection.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;astro&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { getCollection } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &amp;quot;astro:content&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; BaseLayout &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &amp;quot;../layouts/BaseLayout.astro&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; BeerGlass &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &amp;quot;../components/BeerGlass.astro&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { SITE_TITLE, SITE_DESCRIPTION } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &amp;quot;../config&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Use Astro.glob() to fetch all posts, and then sort them by date.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; recipes&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; getCollection&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;beers&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)).&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; b.data._timestamp_ms &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; a.data._timestamp_ms;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;/* Simplified layout example */&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;BaseLayout&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;={&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;SITE_TITLE&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;={&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;SITE_DESCRIPTION&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;Beer recipes&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {recipes.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;recipe&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; href&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;`/recipes/${&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;recipe&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;slug&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&amp;gt;{recipe.data.name}&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ))}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;BaseLayout&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;recipe-page&quot;&gt;Recipe page&lt;/h3&gt;
&lt;p&gt;The recipe page, &lt;code&gt;/src/pages/beers/[slug].astro&lt;/code&gt;, is a bit more involved.
Astro requires you to define a &lt;code&gt;getStaticPaths&lt;/code&gt; function that returns a list of paths to render.
For each path you return you specify any parameters and properties that should be passed to the page.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;astro&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { getCollection } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &amp;#39;astro:content&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { SITE_TITLE, SITE_DESCRIPTION } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &amp;#39;../../config&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; BaseLayout &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &amp;#39;../../layouts/BaseLayout.astro&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; BeerGlass &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &amp;#39;../../components/BeerGlass.astro&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; async&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; getStaticPaths&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; beers&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; getCollection&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;#39;beers&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; beers.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;beer&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      params: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        slug: beer.data.slug&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      props: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        beer: beer.data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;slug&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Astro.params;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;beer&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Astro.props;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;/* Simplified layout */&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;BaseLayout&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;={&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;SITE_TITLE&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;={&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;SITE_DESCRIPTION&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;{beer.name}&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;BeerGlass&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; beer&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;={beer} /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;BaseLayout&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;some-design-choices&quot;&gt;Some design choices&lt;/h2&gt;
&lt;p&gt;For the beer recipe design I wanted to keep it simple like the rest of the site.
However, I wanted to add some color to the page to make it stand out a bit.
Also it is common to show which color the beer will have based on the recipe.
I ended up using ChatGPT to help generate a simple vector like image of a tulip style beer glass.
This was then vectorized using &lt;a href=&quot;https://vectorizer.ai/&quot;&gt;Vectorizer.ai&lt;/a&gt; to convert the webp raster image to an SVG.
The result from that was a promising SVG with only three different colors used for the beer liquid.
I then edited away artifacts using &lt;a href=&quot;https://krita.org/en/&quot;&gt;Krita&lt;/a&gt; which has some simple SVG support.&lt;/p&gt;
&lt;p&gt;From the SVG I then created an Astro component which accepts a beer color (SRM).
It then calculates the primary beer color in RGB and two darker shades of the same color.
I do this by simply incrementing the SRM value by 2 and 4 respectively and using the same converter as with the base color.&lt;/p&gt;
&lt;p&gt;The end result turned out to be pretty good, but don’t take my word for it, see for yourself:&lt;/p&gt;
&lt;div class=&quot;flex min-w-full justify-center&quot;&gt;&lt;div class=&quot;w-64 h-64&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;fill-[${rgbColor} w-64 h-64&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 36 36&quot;&gt; &lt;defs&gt;&lt;/defs&gt; &lt;path id=&quot;shape0&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 10.393984646722 3.24851063866497)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M384.119 800.308C389.392 800.401 395.079 800.381 401.179 800.248C405.299 800.161 408.469 800.568 410.689 801.468C415.949 803.598 420.779 810.198 420.289 816.268C419.669 823.858 412.349 829.318 404.999 829.328C277.499 829.355 146.952 829.355 13.3589 829.328C8.63888 829.328 4.09888 825.978 1.87888 822.058C-2.73112 813.888 1.52888 803.918 10.4389 801.028C11.9855 800.528 13.9555 800.285 16.3489 800.298C22.1289 800.338 27.6889 800.265 33.0289 800.078C33.1769 800.076 33.3188 800.017 33.4263 799.913C33.5337 799.809 33.5989 799.668 33.6089 799.518C33.7489 797.391 34.0889 795.351 34.6289 793.398C38.5755 779.138 46.7822 768.285 59.2489 760.838C67.2389 756.068 77.9989 753.418 87.8689 753.798C91.7089 753.938 95.6189 754.578 99.3589 753.338C121.612 745.945 138.126 732.518 148.899 713.058C160.649 691.848 162.149 664.098 156.689 640.298C150.949 615.338 135.539 594.358 113.659 581.418C104.759 576.151 97.1322 571.378 90.7789 567.098C79.8722 559.751 69.4389 550.391 59.4789 539.018C41.7922 518.825 28.7222 496.301 20.2689 471.448C13.2089 450.695 9.41555 429.945 8.88888 409.198C8.39555 389.938 9.51888 370.588 12.2589 351.148C15.7689 326.188 18.7489 301.968 22.2689 277.258C23.1955 270.798 23.9055 264.308 24.3989 257.788C25.2922 245.915 26.1489 234.441 26.9689 223.368C28.2189 206.548 28.2189 189.968 28.2289 172.948C28.229 172.665 28.1641 172.386 28.0392 172.133C27.9143 171.88 27.7328 171.659 27.5089 171.488C4.71888 154.278 -3.35112 123.728 10.2489 97.8679C21.8189 75.8479 44.3589 62.0579 69.5789 63.3579C72.9922 63.5379 76.3389 64.1179 79.6189 65.0979C79.7826 65.1468 79.9567 65.1513 80.1235 65.1109C80.2903 65.0705 80.4439 64.9867 80.5689 64.8679C95.3422 50.8279 113.322 44.9613 134.509 47.2679C134.656 47.2852 134.804 47.2536 134.932 47.1778C135.061 47.102 135.161 46.9862 135.219 46.8479C136.972 42.6213 139.372 38.5079 142.419 34.5079C153.299 20.2379 166.749 9.32792 184.089 3.97792C204.569 -2.34875 224.312 -1.12875 243.319 7.63792C258.599 14.6779 272.559 26.6579 280.469 41.6579C280.596 41.9046 280.792 41.9846 281.059 41.8979C289.839 38.9646 299.389 37.9446 309.709 38.8379C326.729 40.3079 342.309 50.4379 353.989 63.2879C354.516 63.8679 355.166 64.1746 355.939 64.2079C361.419 64.4546 366.656 65.5513 371.649 67.4979C392.199 75.5079 406.519 91.1379 411.669 112.968C413.189 119.421 413.456 125.841 412.469 132.228C409.882 148.975 401.956 162.205 388.689 171.918C387.729 172.628 387.729 173.468 387.719 174.528C387.586 191.895 387.899 207.108 388.659 220.168C389.549 235.238 390.999 253.908 393.189 270.758C396.622 297.205 400.169 324.231 403.829 351.838C404.689 358.351 405.536 366.615 406.369 376.628C407.042 384.655 407.406 391.321 407.459 396.628C407.679 420.268 404.476 443.035 397.849 464.928C386.419 502.718 363.929 536.538 333.029 561.268C324.009 568.498 312.959 575.088 302.869 581.488C297.502 584.888 292.979 588.131 289.299 591.218C265.139 611.508 255.039 640.758 256.429 672.398C258.039 709.018 277.959 738.488 312.639 751.718C317.389 753.528 321.449 754.508 326.659 754.038C338.269 753.008 349.089 755.608 359.129 762.058C371.639 770.088 381.589 784.038 383.299 799.558C383.352 800.045 383.626 800.295 384.119 800.308ZM34.9389 123.938C34.6255 130.038 36.5689 135.461 40.7689 140.208C42.9155 142.635 45.5089 143.855 48.5489 143.868C57.4489 143.895 67.6722 143.898 79.2189 143.878C80.8589 143.878 81.9889 142.308 82.5389 140.958C82.6855 140.585 82.6522 140.231 82.4389 139.898C80.5522 136.978 80.8189 134.321 83.2389 131.928C87.7189 127.508 91.8289 130.808 94.8789 134.678C97.7389 138.308 103.749 143.708 108.819 143.768C117.746 143.855 126.882 143.871 136.229 143.818C142.909 143.768 150.429 136.098 154.769 131.618C156.269 130.068 158.029 129.188 160.259 129.608C164.159 130.328 166.106 132.778 166.099 136.958C166.099 138.248 165.299 139.248 164.549 140.218C164.261 140.59 164.13 141.06 164.184 141.527C164.239 141.994 164.474 142.422 164.839 142.718C166.006 143.678 167.326 144.148 168.799 144.128C196.979 143.828 224.629 143.751 251.749 143.898C253.509 143.905 255.106 143.581 256.539 142.928C256.721 142.847 256.872 142.708 256.969 142.533C257.065 142.358 257.101 142.155 257.073 141.955C257.044 141.756 256.951 141.571 256.809 141.428C253.879 138.498 254.059 132.908 257.859 130.608C262.999 127.498 266.539 130.248 269.939 133.818C274.619 138.718 280.959 143.828 287.779 143.838C296.859 143.865 305.789 143.868 314.569 143.848C321.399 143.828 328.259 136.098 332.759 131.638C335.086 129.338 337.459 128.821 339.879 130.088C343.819 132.161 344.612 135.195 342.259 139.188C342.08 139.495 341.983 139.844 341.98 140.198C341.976 140.552 342.066 140.901 342.239 141.208C343.319 143.118 344.959 144.088 347.179 144.068C354.066 144.001 361.086 143.928 368.239 143.848C370.352 143.821 372.149 143.235 373.629 142.088C379.589 137.488 382.416 131.278 382.109 123.458C381.969 109.928 371.589 99.2079 359.169 95.4779C358.953 95.4151 358.724 95.4137 358.51 95.4738C358.296 95.534 358.105 95.6534 357.959 95.8179C355.212 98.9446 351.706 100.435 347.439 100.288C341.069 100.068 338.009 96.4579 335.789 91.1479C332.202 82.5946 326.232 76.3279 317.879 72.3479C307.626 67.4546 296.802 67.5779 285.409 72.7179C282.069 74.2179 279.519 77.4279 276.309 79.4679C269.159 84.0279 261.339 79.8879 260.179 71.8979C258.606 61.0979 253.279 51.6813 244.199 43.6479C217.109 19.6679 175.399 28.6579 160.839 61.6279C158.766 66.3279 157.699 70.8946 157.639 75.3279C157.559 80.8679 155.339 86.2279 149.929 88.1679C144.262 90.2146 139.372 89.0513 135.259 84.6779C133.749 83.0679 132.859 81.0279 131.499 79.3379C131.286 79.0646 131.012 78.8779 130.679 78.7779C128.472 78.1113 126.346 77.8213 124.299 77.9079C113.326 78.3813 104.429 83.1579 97.6089 92.2379C94.2189 96.7479 94.0089 102.468 90.0089 106.458C86.8589 109.588 81.6689 110.618 77.7089 108.488C73.0155 105.968 70.9422 101.938 71.4889 96.3979C71.5755 95.5313 71.1922 95.0446 70.3389 94.9379C59.7789 93.5446 50.8422 96.5046 43.5289 103.818C38.0555 109.291 35.1922 115.998 34.9389 123.938ZM70.3189 172.868L60.5489 172.868C60.0022 172.868 59.7255 173.141 59.7189 173.688C59.4855 194.395 58.5655 214.878 56.9589 235.138C56.6655 238.818 56.5355 242.431 56.5689 245.978C56.5689 246.378 56.7689 246.578 57.1689 246.578L287.389 246.598L306.739 246.558L315.789 246.558C316.622 246.558 317.009 246.145 316.949 245.318C315.196 221.491 313.862 197.675 312.949 173.868C312.939 173.596 312.822 173.339 312.625 173.151C312.427 172.963 312.163 172.858 311.889 172.858L302.559 172.868L102.799 172.818L85.9489 172.788ZM345.659 172.918L336.369 172.938C335.276 172.938 334.742 173.485 334.769 174.578C335.302 197.585 336.822 220.561 339.329 243.508C339.429 244.421 339.629 245.291 339.929 246.118C339.981 246.258 340.075 246.379 340.199 246.463C340.322 246.547 340.469 246.591 340.619 246.588L349.349 246.478L358.959 246.388C359.056 246.388 359.152 246.362 359.234 246.311C359.317 246.259 359.384 246.186 359.427 246.099C359.47 246.012 359.488 245.915 359.479 245.818C358.169 231.648 357.729 217.678 356.929 203.398C356.396 193.905 356.209 183.971 356.369 173.598C356.371 173.466 356.337 173.335 356.273 173.221C356.208 173.106 356.114 173.011 356.001 172.945C355.888 172.88 355.759 172.846 355.629 172.848ZM285.139 272.498L66.0789 272.778L56.5789 272.838C56.2688 272.842 55.9676 272.941 55.7169 273.122C55.4662 273.302 55.2782 273.556 55.1789 273.848C53.5922 278.475 52.3889 283.555 51.5689 289.088C50.7689 294.528 50.0622 299.925 49.4489 305.278C45.8889 336.418 40.7589 367.688 40.1089 398.048C39.6822 418.115 42.5555 438.068 48.7289 457.908C57.0789 484.768 71.6889 508.708 92.4189 527.918C99.6455 535.011 106.386 540.555 112.639 544.548C120.992 549.888 128.172 554.048 134.179 557.028C152.646 566.188 172.619 571.811 194.099 573.898C204.712 574.931 216.622 574.575 229.829 572.828C240.356 571.415 249.986 569.291 258.719 566.458C291.679 555.758 320.169 534.368 341.689 507.238C357.689 487.038 368.109 461.898 373.119 436.298C376.719 417.938 377.099 398.938 375.549 380.068C373.189 351.368 369.499 324.108 365.409 293.848C364.422 286.581 363.209 279.731 361.769 273.298C361.729 273.128 361.634 272.976 361.499 272.867C361.365 272.758 361.199 272.699 361.029 272.698ZM175.049 601.798L173.779 601.438C173.706 601.418 173.627 601.42 173.555 601.444C173.482 601.467 173.419 601.512 173.372 601.571C173.326 601.631 173.299 601.702 173.295 601.776C173.29 601.851 173.309 601.925 173.349 601.988C181.216 615.461 186.096 629.798 187.989 644.998C191.409 672.498 189.379 702.208 176.579 727.128C176.519 727.245 176.501 727.378 176.529 727.506C176.556 727.635 176.626 727.75 176.728 727.832C176.831 727.914 176.958 727.959 177.089 727.958L184.889 727.958L212.439 727.998L239.709 727.978C239.797 727.978 239.883 727.947 239.952 727.892C240.021 727.837 240.069 727.76 240.088 727.674C240.108 727.588 240.097 727.497 240.059 727.418C237.179 721.278 233.859 715.348 231.849 708.858C226.049 690.188 225.419 668.538 227.059 648.518C228.539 630.531 233.812 615.041 242.879 602.048C243.406 601.301 243.229 601.051 242.349 601.298C237.362 602.725 232.109 603.628 226.589 604.008C209.329 605.188 192.149 604.451 175.049 601.798ZM222.789 744.938L176.989 744.988L164.659 745.098C164.465 745.098 164.274 745.14 164.1 745.221C163.925 745.302 163.771 745.421 163.649 745.568C156.089 754.508 148.589 762.038 139.249 767.968C138.469 768.461 138.542 768.711 139.469 768.718L156.889 768.828L252.749 768.818C260.109 768.858 267.559 768.855 275.099 768.808C276.206 768.801 277.269 768.665 278.289 768.398C278.709 768.285 278.732 768.118 278.359 767.898C268.546 762.031 260.359 754.481 253.799 745.248C253.572 744.935 253.266 744.781 252.879 744.788ZM86.8189 800.748L255.819 800.808L353.109 800.688C353.226 800.687 353.341 800.651 353.437 800.584C353.534 800.517 353.608 800.422 353.649 800.312C353.69 800.202 353.697 800.082 353.669 799.968C352.002 793.395 347.412 788.538 339.899 785.398L239.059 785.248C221.492 784.995 203.922 784.911 186.349 784.998C151.302 785.178 116.719 785.111 82.5989 784.798C73.5889 784.718 65.6689 791.198 63.5189 799.828C63.4885 799.952 63.4965 800.082 63.5417 800.201C63.5869 800.32 63.6672 800.423 63.7721 800.496C63.8769 800.568 64.0014 800.608 64.1289 800.608Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape1&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6223046875 4.3066710451255)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.17 93.3591L341.7 94.8091C341.347 94.9025 341.043 95.0758 340.79 95.3291C334.81 101.209 327.56 101.079 319.06 100.739C316.15 100.619 313.98 99.6891 312.72 96.9491C310.21 91.4791 305.03 84.9891 298.07 88.5091C296.217 89.4491 294.677 90.6225 293.45 92.0291C288.01 98.2791 282.29 103.559 274.1 105.299C270.267 106.112 266.1 106.416 261.6 106.209C253.04 105.819 244.67 101.199 239.15 94.8491C232.37 87.0391 226.88 84.2491 219.24 92.9691C214.89 97.9391 209.89 101.049 202.97 101.219C196.37 101.379 189.917 101.426 183.61 101.359C182.93 101.352 182.43 100.989 182.11 100.269C182.01 100.04 181.975 99.7876 182.008 99.5391C182.042 99.2906 182.143 99.0554 182.3 98.8591C183.04 97.9325 183.813 97.0725 184.62 96.2791C187.09 93.8491 185.64 89.9291 183.51 87.8291C180.65 85.0091 175.91 85.9891 173.39 88.9391C172.23 90.2925 171.17 91.6391 170.21 92.9791C163.5 102.299 152.67 101.929 142.47 100.679C134.9 99.7591 131.64 94.3891 126.62 89.6591C123.633 86.8525 120.593 86.8391 117.5 89.6191C112.63 93.9791 108.24 99.7591 102.47 102.719C88.07 110.129 72.61 106.679 62.57 94.0391C58.62 89.0591 52.95 85.2191 47.21 90.7591C44.54 93.3491 43.94 96.9991 40.53 99.0891C36.59 101.509 29.55 101.139 24.26 101.029C18.64 100.899 13.25 100.999 9.85 97.1991C7.82 94.9191 4 93.8291 2.11 96.9691C1.02333 98.7691 0.446667 98.6225 0.38 96.5291C0.366667 95.9891 0.24 95.0925 0 93.8391C0.253333 85.8991 3.11667 79.1925 8.59 73.7191C15.9033 66.4058 24.84 63.4458 35.4 64.8391C36.2533 64.9458 36.6367 65.4325 36.55 66.2991C36.0033 71.8391 38.0767 75.8691 42.77 78.3891C46.73 80.5191 51.92 79.4891 55.07 76.3591C59.07 72.3691 59.28 66.6491 62.67 62.1391C69.49 53.0591 78.3867 48.2825 89.36 47.8091C91.4067 47.7225 93.5333 48.0125 95.74 48.6791C96.0733 48.7791 96.3467 48.9658 96.56 49.2391C97.92 50.9291 98.81 52.9691 100.32 54.5791C104.433 58.9525 109.323 60.1158 114.99 58.0691C120.4 56.1291 122.62 50.7691 122.7 45.2291C122.76 40.7958 123.827 36.2291 125.9 31.5291C140.46 -1.44087 182.17 -10.4309 209.26 13.5491C218.34 21.5825 223.667 30.9991 225.24 41.7991C226.4 49.7891 234.22 53.9291 241.37 49.3691C244.58 47.3291 247.13 44.1191 250.47 42.6191C261.863 37.4791 272.687 37.3558 282.94 42.2491C291.293 46.2291 297.263 52.4958 300.85 61.0491C303.07 66.3591 306.13 69.9691 312.5 70.1891C316.767 70.3358 320.273 68.8458 323.02 65.7191C323.166 65.5546 323.357 65.4352 323.571 65.3751C323.785 65.3149 324.014 65.3163 324.23 65.3791C336.65 69.1091 347.03 79.8291 347.17 93.3591Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape2&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6211575655465 7.33540715628013)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.203 7.20842C347.509 15.0284 344.683 21.2384 338.723 25.8384C337.243 26.9851 335.446 27.5718 333.333 27.5984C326.179 27.6784 319.159 27.7518 312.273 27.8184C310.053 27.8384 308.413 26.8684 307.333 24.9584C307.159 24.651 307.07 24.3028 307.074 23.9484C307.077 23.594 307.173 23.2458 307.353 22.9384C309.706 18.9451 308.913 15.9118 304.973 13.8384C302.553 12.5718 300.179 13.0884 297.853 15.3884C293.353 19.8484 286.493 27.5784 279.663 27.5984C270.883 27.6184 261.953 27.6151 252.873 27.5884C246.053 27.5784 239.713 22.4684 235.033 17.5684C231.633 13.9984 228.093 11.2484 222.953 14.3584C219.153 16.6584 218.973 22.2484 221.903 25.1784C222.045 25.3214 222.137 25.5067 222.166 25.706C222.195 25.9053 222.159 26.108 222.062 26.2834C221.966 26.4588 221.815 26.5975 221.633 26.6784C220.199 27.3318 218.603 27.6551 216.843 27.6484C189.723 27.5018 162.073 27.5784 133.893 27.8784C132.419 27.8984 131.099 27.4284 129.933 26.4684C129.567 26.1723 129.332 25.7446 129.278 25.2775C129.224 24.8105 129.355 24.3403 129.643 23.9684C130.393 22.9984 131.193 21.9984 131.193 20.7084C131.199 16.5284 129.253 14.0784 125.353 13.3584C123.123 12.9384 121.363 13.8184 119.863 15.3684C115.523 19.8484 108.003 27.5184 101.323 27.5684C91.976 27.6218 82.8393 27.6051 73.9126 27.5184C68.8426 27.4584 62.8326 22.0584 59.9726 18.4284C56.9226 14.5584 52.8126 11.2584 48.3326 15.6784C45.9126 18.0718 45.646 20.7284 47.5326 23.6484C47.746 23.9818 47.7793 24.3351 47.6326 24.7084C47.0826 26.0584 45.9526 27.6284 44.3126 27.6284C32.766 27.6484 22.5426 27.6451 13.6426 27.6184C10.6026 27.6051 8.0093 26.3851 5.86263 23.9584C1.66263 19.2118 -0.280704 13.7884 0.0326292 7.68842C0.272629 8.94175 0.399296 9.83842 0.412629 10.3784C0.479296 12.4718 1.05596 12.6184 2.14263 10.8184C4.03263 7.67842 7.85263 8.76842 9.88263 11.0484C13.2826 14.8484 18.6726 14.7484 24.2926 14.8784C29.5826 14.9884 36.6226 15.3584 40.5626 12.9384C43.9726 10.8484 44.5726 7.19842 47.2426 4.60842C52.9826 -0.931581 58.6526 2.90842 62.6026 7.88842C72.6426 20.5284 88.1026 23.9784 102.503 16.5684C108.273 13.6084 112.663 7.82842 117.533 3.46842C120.626 0.688419 123.666 0.701752 126.653 3.50842C131.673 8.23842 134.933 13.6084 142.503 14.5284C152.703 15.7784 163.533 16.1484 170.243 6.82842C171.203 5.48842 172.263 4.14175 173.423 2.78842C175.943 -0.161581 180.683 -1.14158 183.543 1.67842C185.673 3.77842 187.123 7.69842 184.653 10.1284C183.846 10.9218 183.073 11.7818 182.333 12.7084C182.175 12.9047 182.074 13.1399 182.041 13.3884C182.007 13.6369 182.043 13.8894 182.143 14.1184C182.463 14.8384 182.963 15.2018 183.643 15.2084C189.949 15.2751 196.403 15.2284 203.003 15.0684C209.923 14.8984 214.923 11.7884 219.273 6.81842C226.913 -1.90158 232.403 0.888419 239.183 8.69842C244.703 15.0484 253.073 19.6684 261.633 20.0584C266.133 20.2651 270.299 19.9618 274.133 19.1484C282.323 17.4084 288.043 12.1284 293.483 5.87842C294.709 4.47175 296.249 3.29842 298.103 2.35842C305.063 -1.16158 310.243 5.32842 312.753 10.7984C314.013 13.5384 316.183 14.4684 319.093 14.5884C327.593 14.9284 334.843 15.0584 340.823 9.17842C341.076 8.92509 341.379 8.75175 341.733 8.65842Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape3&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.7941352600339 9.3230859375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M17.6779 0C16.5513 11.84 15.9213 19.36 15.7879 22.56C15.3079 33.9733 14.6346 46.28 13.7679 59.48C13.6013 62.04 13.1046 63.7467 12.2779 64.6C8.55793 68.45 -0.30207 67.53 0.00793038 61.06C1.34793 33.3133 2.02793 12.9867 2.04793 0.08Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape4&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9413128810975 9.32414062500001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M201.657 0.05C201.63 7.10333 201.687 11.5967 201.827 13.53C203.28 33.53 204.617 53.6 205.837 73.74L186.487 73.78L193.557 73.61C193.714 73.6076 193.867 73.5609 193.998 73.4752C194.129 73.3896 194.234 73.2685 194.299 73.126C194.364 72.9835 194.388 72.8254 194.367 72.67C193.367 64.75 192.894 56.7733 192.947 48.74C196.9 43.82 196.69 38.93 192.317 34.07C191.537 32.47 191.137 31.2867 191.117 30.52C190.984 25.7933 191.01 21.2667 191.197 16.94C191.213 16.5684 191.128 16.1993 190.951 15.872C190.773 15.5446 190.51 15.2711 190.189 15.0807C189.868 14.8902 189.501 14.7897 189.127 14.79L153.317 14.9C152.777 12.9667 151.747 11.28 150.227 9.84C148.927 8.60667 147.257 7.7 145.217 7.12C138.364 5.17333 133.557 7.71667 130.797 14.75C116.39 14.8967 101.944 14.9467 87.4571 14.9C61.1271 14.81 34.7871 15.13 8.5371 15.06C6.00377 15.0533 4.15377 14.7633 2.9871 14.19C0.773767 13.11 -0.209566 11.2233 0.0371003 8.53C0.150434 7.29667 0.770434 4.45333 1.8971 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape5&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.5460546875 9.32519283839548)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M3.69 73.6301L0 0.0700704L9.97 7.03745e-05C10.1004 -0.00175254 10.2289 0.031869 10.3421 0.0974247C10.4553 0.16298 10.5492 0.258107 10.6139 0.372872C10.6786 0.487637 10.7118 0.617903 10.71 0.75007C10.55 11.1234 10.7367 21.0567 11.27 30.5501C12.07 44.8301 12.51 58.8001 13.82 72.9701C13.8293 73.0668 13.8114 73.1643 13.7681 73.2514C13.7249 73.3384 13.6581 73.4116 13.5754 73.4627C13.4926 73.5137 13.3972 73.5405 13.3 73.5401Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape6&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.3825550063776 9.3230859375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M13.7551 0.08C13.7351 12.9867 13.0551 33.3133 11.7151 61.06C11.4051 67.53 20.2651 68.45 23.9851 64.6C24.8118 63.7467 25.3084 62.04 25.4751 59.48C26.3418 46.28 27.0151 33.9733 27.4951 22.56C27.6284 19.36 28.2584 11.84 29.3851 0L46.2351 0.03C45.1084 4.48333 44.4884 7.32667 44.3751 8.56C44.1284 11.2533 45.1118 13.14 47.3251 14.22C48.4918 14.7933 50.3418 15.0833 52.8751 15.09C79.1251 15.16 105.465 14.84 131.795 14.93C146.282 14.9767 160.728 14.9267 175.135 14.78C174.568 20.8133 176.498 24.9267 180.925 27.12C183.338 28.3133 185.805 28.72 188.325 28.34C194.755 27.36 198.095 21.26 197.655 14.93L233.465 14.82C233.839 14.8197 234.206 14.9202 234.527 15.1107C234.848 15.3011 235.111 15.5746 235.289 15.902C235.466 16.2293 235.551 16.5984 235.535 16.97C235.348 21.2967 235.322 25.8233 235.455 30.55C235.475 31.3167 235.875 32.5 236.655 34.1C232.788 31.5133 229.168 30.99 225.795 32.53C211.935 38.83 224.195 59.55 237.285 48.77C237.232 56.8033 237.705 64.78 238.705 72.7C238.726 72.8554 238.702 73.0135 238.637 73.156C238.572 73.2985 238.467 73.4196 238.336 73.5052C238.205 73.5909 238.052 73.6376 237.895 73.64L230.825 73.81L0.605102 73.79C0.205102 73.79 0.00510204 73.59 0.00510204 73.19C-0.0282313 69.6433 0.101769 66.03 0.395102 62.35C2.00177 42.09 2.92177 21.6067 3.1551 0.9C3.16177 0.353333 3.43844 0.08 3.9851 0.08ZM127.005 36.5C127.005 34.413 126.456 32.3624 125.412 30.555C124.369 28.7476 122.867 27.2464 121.06 26.203C119.253 25.1595 117.202 24.61 115.115 24.61C111.963 24.61 108.937 25.8635 106.708 28.0925C104.479 30.3215 103.225 33.3478 103.225 36.5C103.225 39.6522 104.479 42.6785 106.708 44.9075C108.937 47.1365 111.963 48.39 115.115 48.39C117.202 48.39 119.253 47.8405 121.06 46.797C122.867 45.7536 124.369 44.2524 125.412 42.445C126.456 40.6376 127.005 38.587 127.005 36.5ZM75.9704 37.4184C76.0574 34.3019 74.8637 31.2741 72.6541 29.007C70.4445 26.7398 67.3954 25.4143 64.1835 25.3246C62.057 25.2652 59.9523 25.7501 58.0818 26.7303C56.2114 27.7105 54.6403 29.152 53.5271 30.9092C52.414 32.6664 51.7974 34.6782 51.7398 36.7416C51.6528 39.8581 52.8465 42.8859 55.0561 45.153C57.2657 47.4202 60.3148 48.7457 63.5267 48.8354C65.6532 48.8948 67.7579 48.4099 69.6284 47.4297C71.4988 46.4495 73.0699 45.008 74.1831 43.2508C75.2962 41.4936 75.9128 39.4818 75.9704 37.4184ZM183.874 50.7982C183.856 49.4819 183.468 48.1937 182.749 47.0635C182.03 45.9334 181.006 45.0007 179.779 44.3595C178.552 43.7184 177.166 43.3911 175.76 43.4107C173.637 43.4404 171.61 44.2595 170.128 45.6863C168.646 47.1131 167.828 49.0336 167.856 51.0218C167.874 52.3381 168.262 53.6263 168.981 54.7565C169.7 55.8866 170.725 56.8193 171.951 57.4605C173.178 58.1016 174.564 58.4289 175.97 58.4093C178.093 58.3796 180.121 57.5605 181.603 56.1337C183.084 54.7069 183.902 52.7864 183.874 50.7982Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape7&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.0305953125001 9.32554685349047)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.0064 0.0100006L9.3364 6.11826e-07C9.61064 -0.000292647 9.87453 0.104847 10.0721 0.293135C10.2697 0.481423 10.3861 0.738544 10.3964 1.01C11.3097 24.8167 12.6431 48.6333 14.3964 72.46C14.4564 73.2867 14.0697 73.7 13.2364 73.7L4.1864 73.7C2.9664 53.56 1.62973 33.49 0.1764 13.49C0.0364 11.5567 -0.0202667 7.06333 0.0064 0.0100006Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape8&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1631696428572 9.32765624999999)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M10.891 0L14.581 73.56L5.85095 73.67C5.70139 73.6731 5.55452 73.6294 5.43088 73.5452C5.30724 73.461 5.21287 73.3403 5.16095 73.2C4.86095 72.3733 4.66095 71.5033 4.56095 70.59C2.05429 47.6433 0.534286 24.6667 0.000952381 1.66C-0.0257143 0.566667 0.507619 0.02 1.60095 0.02Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape9&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.5362571970961 9.55219950584632)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.6165 8.41299C23.0565 14.743 19.7165 20.843 13.2865 21.823C10.7665 22.203 8.2998 21.7963 5.88646 20.603C1.4598 18.4097 -0.470205 14.2963 0.0964619 8.26299C2.85646 1.22966 7.66313 -1.31367 14.5165 0.632992C16.5565 1.21299 18.2265 2.11966 19.5265 3.35299C21.0465 4.79299 22.0765 6.47966 22.6165 8.41299Z&quot;&gt;&lt;/path&gt; &lt;circle id=&quot;shape10&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.0115625 10.18828125)&quot; r=&quot;11.89&quot; cx=&quot;11.89&quot; cy=&quot;11.89&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape11&quot; transform=&quot;matrix(0.0351425431068875 0.000981620111375468 -0.000981620111375468 0.0351425431068875 14.2130771675543 10.2015061448131)&quot; rx=&quot;12.12&quot; ry=&quot;11.76&quot; cx=&quot;12.12&quot; cy=&quot;11.76&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape12&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 20.1057469902912 10.4364122450525)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M16.9732 2.43205C21.3465 7.29205 21.5565 12.1821 17.6032 17.1021C4.5132 27.8821 -7.7468 7.16205 6.1132 0.862052C9.48653 -0.677948 13.1065 -0.154615 16.9732 2.43205Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape13&quot; transform=&quot;matrix(0.0351528231097021 -0.000490857902548076 0.000490857902548076 0.0351528231097021 18.2800569526222 10.8531762234766)&quot; rx=&quot;8.01&quot; ry=&quot;7.5&quot; cx=&quot;8.01&quot; cy=&quot;7.5&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape14&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.47390625 12.828515625)&quot; fill=&quot;rgb(191,146,59)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0 300.33C1.52 298.69 3.53 298.057 6.03 298.43C6.10297 298.443 6.17377 298.447 6.24 298.44C6.65333 298.413 6.88667 298.26 6.94 297.98C7 297.66 7.19333 297.493 7.52 297.48L10.29 297.39C10.4233 297.383 10.5567 297.367 10.69 297.34C11.0167 297.267 11.1733 297.127 11.16 296.92C11.1467 296.7 11.2467 296.563 11.46 296.51C12.1467 296.337 12.7433 295.997 13.25 295.49C13.49 295.257 13.58 294.973 13.52 294.64C13.1333 292.653 12.8767 290.647 12.75 288.62C12.69 287.79 12.27 287.35 11.7 286.83C11.4533 286.603 11.3933 286.337 11.52 286.03C11.8533 285.197 11.6767 284.573 10.99 284.16C10.7367 284 10.46 283.923 10.16 283.93L6.56 284.02C15.1 281.92 21.0833 280.04 24.51 278.38C27.5033 276.927 30.4033 275.357 33.21 273.67C33.319 273.603 33.3974 273.495 33.4282 273.371C33.4589 273.246 33.4397 273.115 33.3746 273.004C33.3096 272.894 33.2037 272.813 33.08 272.78C32.5067 272.62 31.9433 272.67 31.39 272.93C63.5767 260.003 88.4967 238.95 106.15 209.77C109.223 204.703 112.093 199 114.76 192.66C118.06 184.807 120.343 178.587 121.61 174C123.097 168.613 124.457 162.397 125.69 155.35C126.657 149.857 126.873 144.25 126.34 138.53C127.853 138.57 128.907 138.097 129.5 137.11C131.56 133.67 131.433 130.473 129.12 127.52C128.24 126.39 127.07 126.39 125.77 126.38C120.017 126.347 114.427 126.37 109 126.45C108.613 125.77 108.27 125.09 107.97 124.41C107.69 123.77 107.527 123.037 107.48 122.21C106.953 112.977 106.213 103.723 105.26 94.45C110.127 94.5633 114.617 94.5833 118.73 94.51C121.27 94.47 123.93 94.86 126 93.31C128.053 91.77 128.717 89.61 127.99 86.83C127.23 83.89 124.98 82.2967 121.24 82.05L120.9 72.32C124.973 70.3667 126.23 67.5767 124.67 63.95C123.697 61.6833 121.82 60.52 119.04 60.46C117.273 58.24 116.223 56.5633 115.89 55.43C113.43 47.1033 110.547 38.9133 107.24 30.86C106.947 30.1467 107 29.0333 107.4 27.52C109.087 27.4933 110.883 27.5267 112.79 27.62C115.45 27.7533 117.403 26.9667 118.65 25.26C121.02 22.01 120.02 17.98 116.55 16.23C115.597 15.75 114.193 15.5133 112.34 15.52C107.533 15.54 102.823 15.4767 98.21 15.33C97.6033 13.9433 96.9433 12.6033 96.23 11.31C94.38 7.96 93.99 4.82 92.56 1.46C92.4467 1.18667 92.5067 0.963333 92.74 0.79L93.19 0.46C93.4567 0.273333 93.4267 0.176667 93.1 0.17L55.31 0L131.2 0.2C131.371 0.200762 131.536 0.26037 131.671 0.369176C131.805 0.477981 131.9 0.629779 131.94 0.8C133.38 7.23333 134.593 14.0833 135.58 21.35C139.67 51.61 143.36 78.87 145.72 107.57C147.27 126.44 146.89 145.44 143.29 163.8C138.28 189.4 127.86 214.54 111.86 234.74C90.34 261.87 61.85 283.26 28.89 293.96C20.1567 296.793 10.5267 298.917 0 300.33Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape15&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.2758764491296 12.828515625)&quot; fill=&quot;rgb(236,230,26)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M231.61 0L269.4 0.17C269.726 0.176667 269.756 0.273333 269.49 0.46L269.04 0.79C268.806 0.963333 268.746 1.18667 268.86 1.46C270.29 4.82 270.68 7.96 272.53 11.31C273.243 12.6033 273.903 13.9433 274.51 15.33C268.76 17.07 269.07 27.78 275.82 27.53C278.38 27.43 281.006 27.4267 283.7 27.52C283.3 29.0333 283.246 30.1467 283.54 30.86C286.846 38.9133 289.73 47.1033 292.19 55.43C292.523 56.5633 293.573 58.24 295.34 60.46C290.98 60.76 286.806 61.0267 282.82 61.26C277.7 61.56 274.45 67.2 278.08 71.26C278.86 72.1333 280.413 72.6 282.74 72.66C287.386 72.7733 292.206 72.66 297.2 72.32L297.54 82.05C293.013 81.9567 288.443 81.9633 283.83 82.07C281.84 82.11 280.61 82.75 279.5 84.26C276.44 88.44 277.126 91.8367 281.56 94.45C282.513 103.723 283.253 112.977 283.78 122.21C283.826 123.037 283.99 123.77 284.27 124.41C284.57 125.09 284.913 125.77 285.3 126.45C282.193 127.497 280.633 129.463 280.62 132.35C280.613 134.79 281.763 136.753 284.07 138.24C281.93 156.593 277.493 173.123 270.76 187.83C261.606 207.817 247.22 225.063 227.6 239.57C218.546 246.263 208.406 252.023 197.18 256.85C191.52 259.28 187.21 264.45 191.61 270.42C195.03 275.03 202.58 274.56 207.69 272.93C208.243 272.67 208.806 272.62 209.38 272.78C209.503 272.813 209.609 272.894 209.674 273.004C209.739 273.115 209.758 273.246 209.728 273.371C209.697 273.495 209.619 273.603 209.51 273.67C206.703 275.357 203.803 276.927 200.81 278.38C197.383 280.04 191.4 281.92 182.86 284.02C165.386 287.427 148.786 288.113 133.06 286.08C116.433 283.94 99.2895 279.17 81.6295 271.77C75.1162 269.043 68.6828 266.14 62.3295 263.06C54.3762 259.2 46.8962 254.463 39.8895 248.85C40.5695 248.377 41.3595 247.947 42.2595 247.56C44.5695 246.55 46.3695 244.3 44.1695 241.99C29.1962 226.303 18.1928 209.247 11.1595 190.82C1.95285 166.687 -1.55715 141.62 0.629514 115.62C2.01618 99.0867 3.45618 82.5733 4.94951 66.08C5.49618 59.9533 6.20618 53.32 7.07951 46.18C8.95285 30.8733 10.7762 15.5733 12.5495 0.28ZM230.747 11.7302C228.758 9.7412 226.058 8.62261 223.245 8.62261C220.432 8.62261 217.731 9.7412 215.742 11.7302L213.89 13.5829C211.901 15.5719 210.782 18.2724 210.782 21.0853C210.782 23.8982 211.901 26.5987 213.89 28.5877L215.092 29.7898C217.081 31.7788 219.781 32.8974 222.594 32.8974C225.407 32.8974 228.108 31.7788 230.097 29.7898L231.949 27.9371C233.938 25.9481 235.057 23.2476 235.057 20.4347C235.057 17.6218 233.938 14.9213 231.949 12.9323ZM47.1595 186.78C39.7128 170.84 35.7195 154.833 35.1795 138.76C34.9528 131.94 35.0895 124.72 35.5895 117.1C37.1495 93.44 39.2662 67.4833 41.9395 39.23C42.3395 35.0167 42.6262 30.7267 42.7995 26.36C43.4195 10.9 25.2095 12.45 24.4195 25.69C23.0462 48.79 21.1195 72.2233 18.6395 95.99C17.6595 105.337 16.9995 114.63 16.6595 123.87C16.3328 132.65 16.6595 140.653 17.6395 147.88C19.5062 161.707 22.9728 175.147 28.0395 188.2C29.1795 191.153 30.6662 194.07 32.4995 196.95C35.2995 201.37 41.5395 202.72 45.3395 198.89C48.7328 195.483 49.3395 191.447 47.1595 186.78ZM87.1943 37.8021C86.8236 36.4743 85.902 35.3574 84.6342 34.6994C83.3663 34.0413 81.8534 33.8945 80.4311 34.2916C79.0088 34.6887 77.7908 35.598 77.0472 36.8177C76.3037 38.0374 76.094 39.4701 76.4647 40.7979C76.8355 42.1257 77.757 43.2426 79.0249 43.9006C80.2927 44.5587 81.8056 44.7055 83.2279 44.3084C84.6502 43.9113 85.8682 43.002 86.6118 41.7823C87.3554 40.5626 87.565 39.1299 87.1943 37.8021ZM242.9 63.3691C242.905 60.5116 242.14 57.7024 240.682 55.2252C239.224 52.7479 237.124 50.6888 234.594 49.2556C232.064 47.8225 229.192 47.0651 226.268 47.06C223.344 47.0549 220.469 47.8022 217.934 49.2266C215.399 50.6509 213.292 52.7027 211.826 55.1748C210.359 57.6469 209.585 60.4534 209.58 63.3109C209.575 66.1684 210.34 68.9776 211.797 71.4548C213.255 73.9321 215.355 75.9912 217.885 77.4244C220.415 78.8575 223.287 79.6149 226.211 79.62C229.135 79.6251 232.01 78.8778 234.545 77.4534C237.08 76.0291 239.187 73.9773 240.653 71.5052C242.12 69.0331 242.895 66.2266 242.9 63.3691ZM85.9041 71.8823C88.1531 72.912 90.7367 72.9736 93.0816 72.0534C95.4266 71.1333 97.3455 69.3049 98.4127 66.9739C99.1193 65.4306 99.4215 63.7348 99.2889 62.0574C99.1563 60.38 98.5935 58.7796 97.6572 57.4176C96.721 56.0556 95.4439 54.9794 93.9549 54.2977C91.7059 53.268 89.1223 53.2064 86.7774 54.1266C84.4325 55.0467 82.5135 56.8751 81.4463 59.2061C80.7398 60.7494 80.4375 62.4452 80.5701 64.1226C80.7028 65.8 81.2656 67.4004 82.2018 68.7624C83.1381 70.1244 84.4151 71.2006 85.9041 71.8823ZM60.6086 105.171C63.2448 106.638 66.3725 106.974 69.2978 106.105C72.223 105.236 74.7122 103.231 76.213 100.535C77.7138 97.8381 78.1063 94.6659 77.3035 91.7217C76.5007 88.7775 74.5666 86.2966 71.9304 84.8293C69.2942 83.362 66.1665 83.0257 63.2413 83.8948C60.316 84.7639 57.8268 86.7691 56.326 89.4655C54.8252 92.1619 54.4327 95.3341 55.2355 98.2783C56.0384 101.222 57.9724 103.703 60.6086 105.171ZM187.08 98.11C187.08 96.1959 186.318 94.3582 184.965 93.0047C183.611 91.6512 181.774 90.89 179.86 90.89C177.945 90.89 176.108 91.6512 174.754 93.0047C173.401 94.3582 172.64 96.1959 172.64 98.11C172.64 100.024 173.401 101.862 174.754 103.215C176.108 104.569 177.945 105.33 179.86 105.33C181.127 105.33 182.372 104.996 183.47 104.363C184.567 103.729 185.479 102.817 186.112 101.72C186.746 100.623 187.08 99.3773 187.08 98.11ZM234.564 99.0027C233.705 97.863 232.551 96.9774 231.217 96.4351C229.883 95.8929 228.416 95.7129 226.964 95.9133C225.513 96.1138 224.127 96.6877 222.947 97.5771C221.766 98.4665 220.833 99.6405 220.24 100.981C219.647 102.321 219.416 103.78 219.57 105.212C219.723 106.644 220.256 107.998 221.115 109.137C221.974 110.277 223.128 111.163 224.462 111.705C225.796 112.247 227.263 112.427 228.715 112.227C230.166 112.026 231.552 111.452 232.732 110.563C233.913 109.673 234.846 108.499 235.439 107.159C236.032 105.819 236.263 104.36 236.109 102.928C235.956 101.496 235.423 100.142 234.564 99.0027ZM47.9695 214.56C45.1695 220.83 50.0195 225.32 54.0495 229.45C57.6895 233.19 61.8995 236.09 66.6995 232.86C71.8895 229.38 72.0595 223.24 67.9795 218.66C64.2095 214.41 60.6395 209.6 54.3295 209.99C51.4095 210.17 49.1195 211.99 47.9695 214.56Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape16&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.8026079545455 12.838359375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M26.0114 0C24.238 15.2933 22.4147 30.5933 20.5414 45.9C19.668 53.04 18.958 59.6733 18.4114 65.8C16.918 82.2933 15.478 98.8067 14.0914 115.34C11.9047 141.34 15.4147 166.407 24.6214 190.54C31.6547 208.967 42.658 226.023 57.6314 241.71C59.8314 244.02 58.0314 246.27 55.7214 247.28C54.8214 247.667 54.0314 248.097 53.3514 248.57C51.9014 250.07 52.3314 253.14 52.3514 255.14C31.6214 235.93 17.0114 211.99 8.66137 185.13C2.48804 165.29 -0.385293 145.337 0.0413737 125.27C0.691374 94.91 5.82137 63.64 9.38137 32.5C9.99471 27.1467 10.7014 21.75 11.5014 16.31C12.3214 10.7767 13.5247 5.69667 15.1114 1.07C15.2107 0.778294 15.3987 0.524438 15.6494 0.343583C15.9001 0.162728 16.2013 0.0636261 16.5114 0.06Z&quot;&gt;&lt;/path&gt; &lt;rect id=&quot;shape17&quot; transform=&quot;matrix(0.0248592227760896 -0.0248592227760896 0.0248592227760896 0.0248592227760896 19.531681996495 13.569794617477)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; width=&quot;23.84&quot; height=&quot;22.92&quot; rx=&quot;10.61&quot; ry=&quot;10.61&quot;&gt;&lt;/rect&gt; &lt;path id=&quot;shape18&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.857255859375 13.3649990428515)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M30.6225 171.52C32.8025 176.187 32.1958 180.223 28.8025 183.63C25.0025 187.46 18.7625 186.11 15.9625 181.69C14.1292 178.81 12.6425 175.893 11.5025 172.94C6.43583 159.887 2.96917 146.447 1.1025 132.62C0.1225 125.393 -0.204167 117.39 0.1225 108.61C0.4625 99.37 1.1225 90.0767 2.1025 80.73C4.5825 56.9634 6.50917 33.53 7.8825 10.43C8.6725 -2.80997 26.8825 -4.35997 26.2625 11.1C26.0892 15.4667 25.8025 19.7567 25.4025 23.97C22.7292 52.2234 20.6125 78.18 19.0525 101.84C18.5525 109.46 18.4158 116.68 18.6425 123.5C19.1825 139.573 23.1758 155.58 30.6225 171.52Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape19&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.7841415488515 13.3674609375)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.0522 0C8.66553 0.146667 13.3755 0.21 18.1822 0.19C20.0355 0.183333 21.4389 0.42 22.3922 0.9C25.8622 2.65 26.8622 6.68 24.4922 9.93C23.2455 11.6367 21.2922 12.4233 18.6322 12.29C16.7255 12.1967 14.9289 12.1633 13.2422 12.19C10.5489 12.0967 7.9222 12.1 5.3622 12.2C-1.3878 12.45 -1.6978 1.74 4.0522 0Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape20&quot; transform=&quot;matrix(0.0338611839889802 -0.00945421244350544 0.00945421244350544 0.0338611839889802 14.9149266129752 14.0867380565676)&quot; rx=&quot;5.57&quot; ry=&quot;5.2&quot; cx=&quot;5.57&quot; cy=&quot;5.2&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape21&quot; transform=&quot;matrix(0.0351561964539828 6.13592003636124e-05 -6.13592003636124e-05 0.0351561964539828 19.6449060698586 14.4819473774511)&quot; rx=&quot;16.66&quot; ry=&quot;16.28&quot; cx=&quot;16.66&quot; cy=&quot;16.28&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape22&quot; transform=&quot;matrix(-0.0146348716029047 0.031965331958686 -0.031965331958686 -0.0146348716029047 15.8772166930746 14.8739620295146)&quot; rx=&quot;9.67&quot; ry=&quot;9.33&quot; cx=&quot;9.67&quot; cy=&quot;9.33&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape23&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.997793706651 14.9540625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M18.805 0C21.585 0.06 23.4616 1.22333 24.435 3.49C25.995 7.11667 24.7383 9.90667 20.665 11.86C15.6716 12.2 10.8516 12.3133 6.20498 12.2C3.87831 12.14 2.32498 11.6733 1.54498 10.8C-2.08502 6.74 1.16498 1.1 6.28498 0.8C10.2716 0.566667 14.445 0.3 18.805 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape24&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.0361349190606 15.7107890625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M19.9144 0.0653333C23.6544 0.312 25.9044 1.90533 26.6644 4.84533C27.3911 7.62533 26.7277 9.78533 24.6744 11.3253C22.6044 12.8753 19.9444 12.4853 17.4044 12.5253C13.2911 12.5987 8.80105 12.5787 3.93438 12.4653C-0.498949 9.852 -1.18562 6.45533 1.87438 2.27533C2.98438 0.765333 4.21438 0.125333 6.20438 0.0853333C10.8177 -0.0213333 15.3877 -0.028 19.9144 0.0653333Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape25&quot; transform=&quot;matrix(-0.0170977282180133 0.0307185547160906 -0.0307185547160906 -0.0170977282180133 15.1542587716268 16.0053675452257)&quot; rx=&quot;11.64&quot; ry=&quot;11.38&quot; cx=&quot;11.64&quot; cy=&quot;11.38&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;circle id=&quot;shape26&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.345234375 16.0238671875)&quot; r=&quot;7.22&quot; cx=&quot;7.22&quot; cy=&quot;7.22&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape27&quot; transform=&quot;matrix(0.0280770296501001 -0.0211575594076892 0.0211575594076892 0.0280770296501001 19.8774398273616 16.4371069616574)&quot; rx=&quot;8.42&quot; ry=&quot;8.13&quot; cx=&quot;8.42&quot; cy=&quot;8.13&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape28&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1414052368516 17.2710454963236)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.02 12.1647L3.45003 11.8747C1.14336 10.388 -0.00663785 8.42471 2.88184e-05 5.98471C0.0133622 3.09804 1.57336 1.13137 4.68003 0.0847059C10.1067 0.00470588 15.6967 -0.0186275 21.45 0.0147059C22.75 0.0247059 23.92 0.0247059 24.8 1.15471C27.1134 4.10804 27.24 7.30471 25.18 10.7447C24.5867 11.7314 23.5334 12.2047 22.02 12.1647Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape29&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.9485123620206 17.688515625)&quot; fill=&quot;rgb(213,188,38)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M94.2701 0L112.84 0.29C113.373 6.01 113.157 11.6167 112.19 17.11C110.957 24.1567 109.597 30.3733 108.11 35.76C106.843 40.3467 104.56 46.5667 101.26 54.42C98.5934 60.76 95.7234 66.4633 92.6501 71.53C74.9968 100.71 50.0768 121.763 17.8901 134.69C12.7801 136.32 5.23009 136.79 1.81009 132.18C-2.58991 126.21 1.72009 121.04 7.38009 118.61C18.6068 113.783 28.7468 108.023 37.8001 101.33C57.4201 86.8233 71.8068 69.5767 80.9601 49.59C87.6934 34.8833 92.1301 18.3533 94.2701 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape30&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9331058615201 20.210194296345)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.830544 4.59225C1.98054 2.02225 4.27054 0.202251 7.19054 0.0222511C13.5005 -0.367749 17.0705 4.44225 20.8405 8.69225C24.9205 13.2723 24.7505 19.4123 19.5605 22.8923C14.7605 26.1223 10.5505 23.2223 6.91054 19.4823C2.88054 15.3523 -1.96946 10.8623 0.830544 4.59225Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape31&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.6404577789765 21.5771484375)&quot; fill=&quot;rgb(213,188,38)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.07476 0C8.08142 5.61333 15.5614 10.35 23.5148 14.21C29.8681 17.29 36.3014 20.1933 42.8148 22.92C60.4748 30.32 77.6181 35.09 94.2448 37.23C109.971 39.2633 126.571 38.5767 144.045 35.17L147.645 35.08C147.945 35.0733 148.221 35.15 148.475 35.31C149.161 35.7233 149.338 36.3467 149.005 37.18C148.878 37.4867 148.938 37.7533 149.185 37.98C149.755 38.5 150.175 38.94 150.235 39.77C150.361 41.7967 150.618 43.8033 151.005 45.79C151.065 46.1233 150.975 46.4067 150.735 46.64C150.228 47.1467 149.631 47.4867 148.945 47.66C148.731 47.7133 148.631 47.85 148.645 48.07C148.658 48.2767 148.501 48.4167 148.175 48.49C148.041 48.5167 147.908 48.5333 147.775 48.54L145.005 48.63C144.678 48.6433 144.485 48.81 144.425 49.13C144.371 49.41 144.138 49.5633 143.725 49.59C143.659 49.5967 143.588 49.5933 143.515 49.58C141.015 49.2067 139.005 49.84 137.485 51.48C124.278 53.2267 112.368 53.5833 101.755 52.55C80.2748 50.4633 60.3014 44.84 41.8348 35.68C35.8281 32.7 28.6481 28.54 20.2948 23.2C14.0414 19.2067 7.30142 13.6633 0.0747565 6.57C0.0547565 4.57 -0.375243 1.5 1.07476 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape32&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.548046875 24.3846604970638)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M37.39 126.792L36.84 125.732C36.6867 125.445 36.61 125.139 36.61 124.812L36.29 50.1519C39.97 50.1319 42.74 50.0419 44.93 47.3519C46.0567 45.9652 46.4067 44.4152 45.98 42.7019C44.81 38.0219 40.08 37.5119 35.72 37.6019L35.91 26.2919C40.16 26.9019 44.77 27.8519 48.81 25.9619C52.26 24.3519 53.31 20.2319 50.85 17.2519C48.51 14.4319 45.36 14.2119 41.99 14.2719C35.7567 14.3852 29.3167 14.4052 22.67 14.3319C19.49 14.3019 16.81 15.9619 15.14 18.6319C15.2 16.6619 12.86 15.6819 11.44 14.7519C10.6133 14.2119 9.90667 13.5852 9.32 12.8719C6.57333 9.53188 3.78 6.23188 0.94 2.97188C0.46 2.41855 0.146667 1.62521 0 0.591879C17.1 3.24521 34.28 3.98188 51.54 2.80188C57.06 2.42188 62.3133 1.51855 67.3 0.0918792C68.18 -0.154787 68.3567 0.0952125 67.83 0.841879C58.7633 13.8352 53.49 29.3252 52.01 47.3119C50.37 67.3319 51 88.9819 56.8 107.652C58.81 114.142 62.13 120.072 65.01 126.212C65.0485 126.291 65.0589 126.382 65.0394 126.468C65.02 126.554 64.9718 126.631 64.9029 126.686C64.834 126.741 64.7483 126.772 64.66 126.772Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape33&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.486355851717 24.3923298330305)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.75477 0.373729C1.90143 1.40706 2.21477 2.2004 2.69477 2.75373C5.53477 6.01373 8.3281 9.31373 11.0748 12.6537C11.6614 13.3671 12.3681 13.9937 13.1948 14.5337C14.6148 15.4637 16.9548 16.4437 16.8948 18.4137L16.5848 19.0537C15.9714 19.3604 15.6748 19.8204 15.6948 20.4337C15.8148 23.3437 16.3448 26.1237 18.0248 28.6937C19.9714 31.6737 22.1714 34.5471 24.6248 37.3137C19.6548 39.6737 18.5548 46.9937 24.3448 49.3137C24.1981 53.2071 24.2048 57.1237 24.3648 61.0637C24.5581 65.7371 24.5748 69.6437 24.4148 72.7837C24.2014 77.0371 23.9914 81.3304 23.7848 85.6637C23.1248 99.8304 19.6748 113.244 13.4348 125.904C13.2814 126.21 13.0314 126.384 12.6848 126.424L11.5948 126.534L3.79477 126.534C3.66373 126.534 3.5364 126.49 3.43437 126.408C3.33234 126.325 3.26171 126.21 3.23447 126.082C3.20722 125.954 3.22499 125.82 3.28477 125.704C16.0848 100.784 18.1148 71.0737 14.6948 43.5737C12.8014 28.3737 7.92143 14.0371 0.0547669 0.563729C0.0152725 0.50031 -0.00361813 0.426609 0.000572506 0.352292C0.00476314 0.277975 0.0318434 0.20644 0.0782619 0.147067C0.12468 0.0876949 0.188315 0.0431997 0.26082 0.0194171C0.333326 -0.0043654 0.411387 -0.00634806 0.484767 0.0137292Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape34&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.0617214476865 24.8861307529877)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M21.2988 12.0278C16.7455 11.8878 12.1288 11.8545 7.44881 11.9278C4.74215 11.9678 2.94548 11.7312 2.05881 11.2178C0.238812 10.1645 -0.374521 8.0945 0.218812 5.00784L0.528812 4.36784C2.19881 1.69784 4.87881 0.0378364 8.05881 0.0678364C14.7055 0.14117 21.1455 0.12117 27.3788 0.00783636C30.7488 -0.0521636 33.8988 0.167836 36.2388 2.98784C38.6988 5.96784 37.6488 10.0878 34.1988 11.6978C30.1588 13.5878 25.5488 12.6378 21.2988 12.0278Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape35&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.038091694079 25.0621875000001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.890947 0C0.297614 3.08667 0.910947 5.15667 2.73095 6.21C3.61761 6.72333 5.41428 6.96 8.12095 6.92C12.8009 6.84667 17.4176 6.88 21.9709 7.02L21.7809 18.33L8.93095 18.26C6.47761 15.4933 4.27761 12.62 2.33095 9.64C0.650947 7.07 0.120947 4.29 0.000947368 1.38C-0.0190526 0.766667 0.277614 0.306667 0.890947 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape36&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.2047130847683 25.704140625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.19149 0L17.0415 0.07C21.4015 -0.02 26.1315 0.49 27.3015 5.17C27.7282 6.88333 27.3782 8.43333 26.2515 9.82C24.0615 12.51 21.2915 12.6 17.6115 12.62L3.91149 12C-1.87851 9.68 -0.778506 2.36 4.19149 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape37&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.893984375 26.126015625)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M12.75 0L26.45 0.62L26.77 75.28C26.77 75.6067 26.8467 75.9133 27 76.2L27.55 77.26L0 77.22L1.09 77.11C1.43667 77.07 1.68667 76.8967 1.84 76.59C8.08 63.93 11.53 50.5167 12.19 36.35C12.3967 32.0167 12.6067 27.7233 12.82 23.47C12.98 20.33 12.9633 16.4233 12.77 11.75C12.61 7.81 12.6033 3.89333 12.75 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape38&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.22640625 29.4324536132813)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M29.96 24.0302C30.7067 23.5835 30.1467 23.1702 28.28 22.7902C27.96 22.7235 27.6733 22.5835 27.42 22.3702C24.9333 20.2235 22.8967 18.7069 21.31 17.8202C12.91 13.1069 5.80667 7.21687 0 0.150208L30.09 0.000208333C30.4767 -0.00645833 30.7833 0.146875 31.01 0.460208C37.57 9.69354 45.7567 17.2435 55.57 23.1102C55.9433 23.3302 55.92 23.4969 55.5 23.6102C54.48 23.8769 53.4167 24.0135 52.31 24.0202C44.77 24.0669 37.32 24.0702 29.96 24.0302Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape39&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.2706541442871 29.4394921875)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M38.2747 0C35.2147 4.74667 31.2681 10.0433 26.4347 15.89C23.4547 19.49 20.7014 22.14 18.1747 23.84L0.754727 23.73C-0.17194 23.7233 -0.245273 23.4733 0.534727 22.98C9.87473 17.05 17.3747 9.52 24.9347 0.58C25.0571 0.432797 25.211 0.314351 25.3856 0.233119C25.5601 0.151886 25.7511 0.109846 25.9447 0.11Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape40&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.909609375 29.437734375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M65.9 0C71.7067 7.06667 78.81 12.9567 87.21 17.67C88.7967 18.5567 90.8333 20.0733 93.32 22.22C93.5733 22.4333 93.86 22.5733 94.18 22.64C96.0467 23.02 96.6067 23.4333 95.86 23.88L0 23.89C2.52667 22.19 5.28 19.54 8.26 15.94C13.0933 10.0933 17.04 4.79667 20.1 0.05Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape41&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.6264334548969 30.8390367406574)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M175.558 0.450733C176.245 0.450733 176.568 0.567399 176.528 0.800733C176.494 1.0303 176.388 1.24303 176.226 1.40826C176.065 1.5735 175.855 1.68291 175.628 1.72073C171.935 2.3474 168.581 2.65073 165.568 2.63073C163.998 2.62073 162.798 3.35073 161.188 3.18073C160.808 3.14073 160.445 3.20407 160.098 3.37073L158.488 4.16073C158.195 4.30073 157.958 4.50407 157.778 4.77073C157.045 5.85073 156.111 6.47073 154.978 6.63073C153.258 6.87073 151.491 6.99073 149.678 6.99073C111.858 6.8974 73.5681 6.84073 34.8081 6.82073C28.6781 6.82073 24.4281 9.63073 23.3181 15.9507L0.628115 15.8107C0.50059 15.8104 0.376138 15.7713 0.2713 15.6987C0.166463 15.626 0.0861025 15.5233 0.0409006 15.404C-0.00430136 15.2848 -0.0122487 15.1546 0.0181151 15.0307C2.16812 6.40073 10.0881 -0.0792673 19.0981 0.00073271C53.2181 0.314066 87.8014 0.380733 122.848 0.200733C140.421 0.114066 157.991 0.197399 175.558 0.450733Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape42&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.4462109375 30.8548828125)&quot; fill=&quot;rgb(236,230,26)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M152.24 0L253.08 0.15C253.047 2.17 252.56 3.72667 251.62 4.82C250.867 5.69333 249.93 6.13667 248.81 6.15C221.383 6.39 194.363 6.58667 167.75 6.74C167.283 6.74 167.03 6.97333 166.99 7.44C166.87 8.95333 167.113 10.3433 167.72 11.61C167.847 11.8833 167.89 12.1667 167.85 12.46L167.63 14.18C167.577 14.5867 167.74 14.86 168.12 15C168.573 15.1667 168.867 15.3533 169 15.56L0 15.5C1.11 9.18 5.36 6.37 11.49 6.37C50.25 6.39 88.54 6.44667 126.36 6.54C128.173 6.54 129.94 6.42 131.66 6.18C132.793 6.02 133.727 5.4 134.46 4.32C134.64 4.05333 134.877 3.85 135.17 3.71L136.78 2.92C137.127 2.75333 137.49 2.69 137.87 2.73C139.48 2.9 140.68 2.17 142.25 2.18C145.263 2.2 148.617 1.89667 152.31 1.27C152.537 1.23218 152.746 1.12277 152.908 0.957532C153.07 0.792295 153.175 0.579568 153.21 0.35C153.25 0.116667 152.927 -1.13687e-13 152.24 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape43&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 19.3159081135321 30.86015625)&quot; fill=&quot;rgb(213,188,38)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M86.1197 0C93.6331 3.14 98.2231 7.99667 99.8897 14.57C99.9181 14.684 99.9111 14.804 99.8698 14.914C99.8285 15.024 99.7547 15.1189 99.6583 15.186C99.5618 15.2532 99.4472 15.2894 99.3297 15.29L2.03972 15.41C1.90639 15.2033 1.61306 15.0167 1.15972 14.85C0.779725 14.71 0.616391 14.4367 0.669725 14.03L0.889725 12.31C0.929725 12.0167 0.886391 11.7333 0.759725 11.46C0.153058 10.1933 -0.0902752 8.80333 0.0297248 7.29C0.0697248 6.82333 0.323058 6.59 0.789725 6.59C27.4031 6.43667 54.4231 6.24 81.8497 6C82.9697 5.98667 83.9064 5.54333 84.6597 4.67C85.5997 3.57667 86.0864 2.02 86.1197 0Z&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt;&lt;/div&gt;
&lt;ul class=&quot;flex flex-row flex-wrap justify-center min-w-full&quot;&gt;&lt;div class=&quot;w-16 h-16&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;fill-[${rgbColor} w-16 h-16&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 36 36&quot;&gt; &lt;defs&gt;&lt;/defs&gt; &lt;path id=&quot;shape0&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 10.393984646722 3.24851063866497)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M384.119 800.308C389.392 800.401 395.079 800.381 401.179 800.248C405.299 800.161 408.469 800.568 410.689 801.468C415.949 803.598 420.779 810.198 420.289 816.268C419.669 823.858 412.349 829.318 404.999 829.328C277.499 829.355 146.952 829.355 13.3589 829.328C8.63888 829.328 4.09888 825.978 1.87888 822.058C-2.73112 813.888 1.52888 803.918 10.4389 801.028C11.9855 800.528 13.9555 800.285 16.3489 800.298C22.1289 800.338 27.6889 800.265 33.0289 800.078C33.1769 800.076 33.3188 800.017 33.4263 799.913C33.5337 799.809 33.5989 799.668 33.6089 799.518C33.7489 797.391 34.0889 795.351 34.6289 793.398C38.5755 779.138 46.7822 768.285 59.2489 760.838C67.2389 756.068 77.9989 753.418 87.8689 753.798C91.7089 753.938 95.6189 754.578 99.3589 753.338C121.612 745.945 138.126 732.518 148.899 713.058C160.649 691.848 162.149 664.098 156.689 640.298C150.949 615.338 135.539 594.358 113.659 581.418C104.759 576.151 97.1322 571.378 90.7789 567.098C79.8722 559.751 69.4389 550.391 59.4789 539.018C41.7922 518.825 28.7222 496.301 20.2689 471.448C13.2089 450.695 9.41555 429.945 8.88888 409.198C8.39555 389.938 9.51888 370.588 12.2589 351.148C15.7689 326.188 18.7489 301.968 22.2689 277.258C23.1955 270.798 23.9055 264.308 24.3989 257.788C25.2922 245.915 26.1489 234.441 26.9689 223.368C28.2189 206.548 28.2189 189.968 28.2289 172.948C28.229 172.665 28.1641 172.386 28.0392 172.133C27.9143 171.88 27.7328 171.659 27.5089 171.488C4.71888 154.278 -3.35112 123.728 10.2489 97.8679C21.8189 75.8479 44.3589 62.0579 69.5789 63.3579C72.9922 63.5379 76.3389 64.1179 79.6189 65.0979C79.7826 65.1468 79.9567 65.1513 80.1235 65.1109C80.2903 65.0705 80.4439 64.9867 80.5689 64.8679C95.3422 50.8279 113.322 44.9613 134.509 47.2679C134.656 47.2852 134.804 47.2536 134.932 47.1778C135.061 47.102 135.161 46.9862 135.219 46.8479C136.972 42.6213 139.372 38.5079 142.419 34.5079C153.299 20.2379 166.749 9.32792 184.089 3.97792C204.569 -2.34875 224.312 -1.12875 243.319 7.63792C258.599 14.6779 272.559 26.6579 280.469 41.6579C280.596 41.9046 280.792 41.9846 281.059 41.8979C289.839 38.9646 299.389 37.9446 309.709 38.8379C326.729 40.3079 342.309 50.4379 353.989 63.2879C354.516 63.8679 355.166 64.1746 355.939 64.2079C361.419 64.4546 366.656 65.5513 371.649 67.4979C392.199 75.5079 406.519 91.1379 411.669 112.968C413.189 119.421 413.456 125.841 412.469 132.228C409.882 148.975 401.956 162.205 388.689 171.918C387.729 172.628 387.729 173.468 387.719 174.528C387.586 191.895 387.899 207.108 388.659 220.168C389.549 235.238 390.999 253.908 393.189 270.758C396.622 297.205 400.169 324.231 403.829 351.838C404.689 358.351 405.536 366.615 406.369 376.628C407.042 384.655 407.406 391.321 407.459 396.628C407.679 420.268 404.476 443.035 397.849 464.928C386.419 502.718 363.929 536.538 333.029 561.268C324.009 568.498 312.959 575.088 302.869 581.488C297.502 584.888 292.979 588.131 289.299 591.218C265.139 611.508 255.039 640.758 256.429 672.398C258.039 709.018 277.959 738.488 312.639 751.718C317.389 753.528 321.449 754.508 326.659 754.038C338.269 753.008 349.089 755.608 359.129 762.058C371.639 770.088 381.589 784.038 383.299 799.558C383.352 800.045 383.626 800.295 384.119 800.308ZM34.9389 123.938C34.6255 130.038 36.5689 135.461 40.7689 140.208C42.9155 142.635 45.5089 143.855 48.5489 143.868C57.4489 143.895 67.6722 143.898 79.2189 143.878C80.8589 143.878 81.9889 142.308 82.5389 140.958C82.6855 140.585 82.6522 140.231 82.4389 139.898C80.5522 136.978 80.8189 134.321 83.2389 131.928C87.7189 127.508 91.8289 130.808 94.8789 134.678C97.7389 138.308 103.749 143.708 108.819 143.768C117.746 143.855 126.882 143.871 136.229 143.818C142.909 143.768 150.429 136.098 154.769 131.618C156.269 130.068 158.029 129.188 160.259 129.608C164.159 130.328 166.106 132.778 166.099 136.958C166.099 138.248 165.299 139.248 164.549 140.218C164.261 140.59 164.13 141.06 164.184 141.527C164.239 141.994 164.474 142.422 164.839 142.718C166.006 143.678 167.326 144.148 168.799 144.128C196.979 143.828 224.629 143.751 251.749 143.898C253.509 143.905 255.106 143.581 256.539 142.928C256.721 142.847 256.872 142.708 256.969 142.533C257.065 142.358 257.101 142.155 257.073 141.955C257.044 141.756 256.951 141.571 256.809 141.428C253.879 138.498 254.059 132.908 257.859 130.608C262.999 127.498 266.539 130.248 269.939 133.818C274.619 138.718 280.959 143.828 287.779 143.838C296.859 143.865 305.789 143.868 314.569 143.848C321.399 143.828 328.259 136.098 332.759 131.638C335.086 129.338 337.459 128.821 339.879 130.088C343.819 132.161 344.612 135.195 342.259 139.188C342.08 139.495 341.983 139.844 341.98 140.198C341.976 140.552 342.066 140.901 342.239 141.208C343.319 143.118 344.959 144.088 347.179 144.068C354.066 144.001 361.086 143.928 368.239 143.848C370.352 143.821 372.149 143.235 373.629 142.088C379.589 137.488 382.416 131.278 382.109 123.458C381.969 109.928 371.589 99.2079 359.169 95.4779C358.953 95.4151 358.724 95.4137 358.51 95.4738C358.296 95.534 358.105 95.6534 357.959 95.8179C355.212 98.9446 351.706 100.435 347.439 100.288C341.069 100.068 338.009 96.4579 335.789 91.1479C332.202 82.5946 326.232 76.3279 317.879 72.3479C307.626 67.4546 296.802 67.5779 285.409 72.7179C282.069 74.2179 279.519 77.4279 276.309 79.4679C269.159 84.0279 261.339 79.8879 260.179 71.8979C258.606 61.0979 253.279 51.6813 244.199 43.6479C217.109 19.6679 175.399 28.6579 160.839 61.6279C158.766 66.3279 157.699 70.8946 157.639 75.3279C157.559 80.8679 155.339 86.2279 149.929 88.1679C144.262 90.2146 139.372 89.0513 135.259 84.6779C133.749 83.0679 132.859 81.0279 131.499 79.3379C131.286 79.0646 131.012 78.8779 130.679 78.7779C128.472 78.1113 126.346 77.8213 124.299 77.9079C113.326 78.3813 104.429 83.1579 97.6089 92.2379C94.2189 96.7479 94.0089 102.468 90.0089 106.458C86.8589 109.588 81.6689 110.618 77.7089 108.488C73.0155 105.968 70.9422 101.938 71.4889 96.3979C71.5755 95.5313 71.1922 95.0446 70.3389 94.9379C59.7789 93.5446 50.8422 96.5046 43.5289 103.818C38.0555 109.291 35.1922 115.998 34.9389 123.938ZM70.3189 172.868L60.5489 172.868C60.0022 172.868 59.7255 173.141 59.7189 173.688C59.4855 194.395 58.5655 214.878 56.9589 235.138C56.6655 238.818 56.5355 242.431 56.5689 245.978C56.5689 246.378 56.7689 246.578 57.1689 246.578L287.389 246.598L306.739 246.558L315.789 246.558C316.622 246.558 317.009 246.145 316.949 245.318C315.196 221.491 313.862 197.675 312.949 173.868C312.939 173.596 312.822 173.339 312.625 173.151C312.427 172.963 312.163 172.858 311.889 172.858L302.559 172.868L102.799 172.818L85.9489 172.788ZM345.659 172.918L336.369 172.938C335.276 172.938 334.742 173.485 334.769 174.578C335.302 197.585 336.822 220.561 339.329 243.508C339.429 244.421 339.629 245.291 339.929 246.118C339.981 246.258 340.075 246.379 340.199 246.463C340.322 246.547 340.469 246.591 340.619 246.588L349.349 246.478L358.959 246.388C359.056 246.388 359.152 246.362 359.234 246.311C359.317 246.259 359.384 246.186 359.427 246.099C359.47 246.012 359.488 245.915 359.479 245.818C358.169 231.648 357.729 217.678 356.929 203.398C356.396 193.905 356.209 183.971 356.369 173.598C356.371 173.466 356.337 173.335 356.273 173.221C356.208 173.106 356.114 173.011 356.001 172.945C355.888 172.88 355.759 172.846 355.629 172.848ZM285.139 272.498L66.0789 272.778L56.5789 272.838C56.2688 272.842 55.9676 272.941 55.7169 273.122C55.4662 273.302 55.2782 273.556 55.1789 273.848C53.5922 278.475 52.3889 283.555 51.5689 289.088C50.7689 294.528 50.0622 299.925 49.4489 305.278C45.8889 336.418 40.7589 367.688 40.1089 398.048C39.6822 418.115 42.5555 438.068 48.7289 457.908C57.0789 484.768 71.6889 508.708 92.4189 527.918C99.6455 535.011 106.386 540.555 112.639 544.548C120.992 549.888 128.172 554.048 134.179 557.028C152.646 566.188 172.619 571.811 194.099 573.898C204.712 574.931 216.622 574.575 229.829 572.828C240.356 571.415 249.986 569.291 258.719 566.458C291.679 555.758 320.169 534.368 341.689 507.238C357.689 487.038 368.109 461.898 373.119 436.298C376.719 417.938 377.099 398.938 375.549 380.068C373.189 351.368 369.499 324.108 365.409 293.848C364.422 286.581 363.209 279.731 361.769 273.298C361.729 273.128 361.634 272.976 361.499 272.867C361.365 272.758 361.199 272.699 361.029 272.698ZM175.049 601.798L173.779 601.438C173.706 601.418 173.627 601.42 173.555 601.444C173.482 601.467 173.419 601.512 173.372 601.571C173.326 601.631 173.299 601.702 173.295 601.776C173.29 601.851 173.309 601.925 173.349 601.988C181.216 615.461 186.096 629.798 187.989 644.998C191.409 672.498 189.379 702.208 176.579 727.128C176.519 727.245 176.501 727.378 176.529 727.506C176.556 727.635 176.626 727.75 176.728 727.832C176.831 727.914 176.958 727.959 177.089 727.958L184.889 727.958L212.439 727.998L239.709 727.978C239.797 727.978 239.883 727.947 239.952 727.892C240.021 727.837 240.069 727.76 240.088 727.674C240.108 727.588 240.097 727.497 240.059 727.418C237.179 721.278 233.859 715.348 231.849 708.858C226.049 690.188 225.419 668.538 227.059 648.518C228.539 630.531 233.812 615.041 242.879 602.048C243.406 601.301 243.229 601.051 242.349 601.298C237.362 602.725 232.109 603.628 226.589 604.008C209.329 605.188 192.149 604.451 175.049 601.798ZM222.789 744.938L176.989 744.988L164.659 745.098C164.465 745.098 164.274 745.14 164.1 745.221C163.925 745.302 163.771 745.421 163.649 745.568C156.089 754.508 148.589 762.038 139.249 767.968C138.469 768.461 138.542 768.711 139.469 768.718L156.889 768.828L252.749 768.818C260.109 768.858 267.559 768.855 275.099 768.808C276.206 768.801 277.269 768.665 278.289 768.398C278.709 768.285 278.732 768.118 278.359 767.898C268.546 762.031 260.359 754.481 253.799 745.248C253.572 744.935 253.266 744.781 252.879 744.788ZM86.8189 800.748L255.819 800.808L353.109 800.688C353.226 800.687 353.341 800.651 353.437 800.584C353.534 800.517 353.608 800.422 353.649 800.312C353.69 800.202 353.697 800.082 353.669 799.968C352.002 793.395 347.412 788.538 339.899 785.398L239.059 785.248C221.492 784.995 203.922 784.911 186.349 784.998C151.302 785.178 116.719 785.111 82.5989 784.798C73.5889 784.718 65.6689 791.198 63.5189 799.828C63.4885 799.952 63.4965 800.082 63.5417 800.201C63.5869 800.32 63.6672 800.423 63.7721 800.496C63.8769 800.568 64.0014 800.608 64.1289 800.608Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape1&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6223046875 4.3066710451255)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.17 93.3591L341.7 94.8091C341.347 94.9025 341.043 95.0758 340.79 95.3291C334.81 101.209 327.56 101.079 319.06 100.739C316.15 100.619 313.98 99.6891 312.72 96.9491C310.21 91.4791 305.03 84.9891 298.07 88.5091C296.217 89.4491 294.677 90.6225 293.45 92.0291C288.01 98.2791 282.29 103.559 274.1 105.299C270.267 106.112 266.1 106.416 261.6 106.209C253.04 105.819 244.67 101.199 239.15 94.8491C232.37 87.0391 226.88 84.2491 219.24 92.9691C214.89 97.9391 209.89 101.049 202.97 101.219C196.37 101.379 189.917 101.426 183.61 101.359C182.93 101.352 182.43 100.989 182.11 100.269C182.01 100.04 181.975 99.7876 182.008 99.5391C182.042 99.2906 182.143 99.0554 182.3 98.8591C183.04 97.9325 183.813 97.0725 184.62 96.2791C187.09 93.8491 185.64 89.9291 183.51 87.8291C180.65 85.0091 175.91 85.9891 173.39 88.9391C172.23 90.2925 171.17 91.6391 170.21 92.9791C163.5 102.299 152.67 101.929 142.47 100.679C134.9 99.7591 131.64 94.3891 126.62 89.6591C123.633 86.8525 120.593 86.8391 117.5 89.6191C112.63 93.9791 108.24 99.7591 102.47 102.719C88.07 110.129 72.61 106.679 62.57 94.0391C58.62 89.0591 52.95 85.2191 47.21 90.7591C44.54 93.3491 43.94 96.9991 40.53 99.0891C36.59 101.509 29.55 101.139 24.26 101.029C18.64 100.899 13.25 100.999 9.85 97.1991C7.82 94.9191 4 93.8291 2.11 96.9691C1.02333 98.7691 0.446667 98.6225 0.38 96.5291C0.366667 95.9891 0.24 95.0925 0 93.8391C0.253333 85.8991 3.11667 79.1925 8.59 73.7191C15.9033 66.4058 24.84 63.4458 35.4 64.8391C36.2533 64.9458 36.6367 65.4325 36.55 66.2991C36.0033 71.8391 38.0767 75.8691 42.77 78.3891C46.73 80.5191 51.92 79.4891 55.07 76.3591C59.07 72.3691 59.28 66.6491 62.67 62.1391C69.49 53.0591 78.3867 48.2825 89.36 47.8091C91.4067 47.7225 93.5333 48.0125 95.74 48.6791C96.0733 48.7791 96.3467 48.9658 96.56 49.2391C97.92 50.9291 98.81 52.9691 100.32 54.5791C104.433 58.9525 109.323 60.1158 114.99 58.0691C120.4 56.1291 122.62 50.7691 122.7 45.2291C122.76 40.7958 123.827 36.2291 125.9 31.5291C140.46 -1.44087 182.17 -10.4309 209.26 13.5491C218.34 21.5825 223.667 30.9991 225.24 41.7991C226.4 49.7891 234.22 53.9291 241.37 49.3691C244.58 47.3291 247.13 44.1191 250.47 42.6191C261.863 37.4791 272.687 37.3558 282.94 42.2491C291.293 46.2291 297.263 52.4958 300.85 61.0491C303.07 66.3591 306.13 69.9691 312.5 70.1891C316.767 70.3358 320.273 68.8458 323.02 65.7191C323.166 65.5546 323.357 65.4352 323.571 65.3751C323.785 65.3149 324.014 65.3163 324.23 65.3791C336.65 69.1091 347.03 79.8291 347.17 93.3591Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape2&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6211575655465 7.33540715628013)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.203 7.20842C347.509 15.0284 344.683 21.2384 338.723 25.8384C337.243 26.9851 335.446 27.5718 333.333 27.5984C326.179 27.6784 319.159 27.7518 312.273 27.8184C310.053 27.8384 308.413 26.8684 307.333 24.9584C307.159 24.651 307.07 24.3028 307.074 23.9484C307.077 23.594 307.173 23.2458 307.353 22.9384C309.706 18.9451 308.913 15.9118 304.973 13.8384C302.553 12.5718 300.179 13.0884 297.853 15.3884C293.353 19.8484 286.493 27.5784 279.663 27.5984C270.883 27.6184 261.953 27.6151 252.873 27.5884C246.053 27.5784 239.713 22.4684 235.033 17.5684C231.633 13.9984 228.093 11.2484 222.953 14.3584C219.153 16.6584 218.973 22.2484 221.903 25.1784C222.045 25.3214 222.137 25.5067 222.166 25.706C222.195 25.9053 222.159 26.108 222.062 26.2834C221.966 26.4588 221.815 26.5975 221.633 26.6784C220.199 27.3318 218.603 27.6551 216.843 27.6484C189.723 27.5018 162.073 27.5784 133.893 27.8784C132.419 27.8984 131.099 27.4284 129.933 26.4684C129.567 26.1723 129.332 25.7446 129.278 25.2775C129.224 24.8105 129.355 24.3403 129.643 23.9684C130.393 22.9984 131.193 21.9984 131.193 20.7084C131.199 16.5284 129.253 14.0784 125.353 13.3584C123.123 12.9384 121.363 13.8184 119.863 15.3684C115.523 19.8484 108.003 27.5184 101.323 27.5684C91.976 27.6218 82.8393 27.6051 73.9126 27.5184C68.8426 27.4584 62.8326 22.0584 59.9726 18.4284C56.9226 14.5584 52.8126 11.2584 48.3326 15.6784C45.9126 18.0718 45.646 20.7284 47.5326 23.6484C47.746 23.9818 47.7793 24.3351 47.6326 24.7084C47.0826 26.0584 45.9526 27.6284 44.3126 27.6284C32.766 27.6484 22.5426 27.6451 13.6426 27.6184C10.6026 27.6051 8.0093 26.3851 5.86263 23.9584C1.66263 19.2118 -0.280704 13.7884 0.0326292 7.68842C0.272629 8.94175 0.399296 9.83842 0.412629 10.3784C0.479296 12.4718 1.05596 12.6184 2.14263 10.8184C4.03263 7.67842 7.85263 8.76842 9.88263 11.0484C13.2826 14.8484 18.6726 14.7484 24.2926 14.8784C29.5826 14.9884 36.6226 15.3584 40.5626 12.9384C43.9726 10.8484 44.5726 7.19842 47.2426 4.60842C52.9826 -0.931581 58.6526 2.90842 62.6026 7.88842C72.6426 20.5284 88.1026 23.9784 102.503 16.5684C108.273 13.6084 112.663 7.82842 117.533 3.46842C120.626 0.688419 123.666 0.701752 126.653 3.50842C131.673 8.23842 134.933 13.6084 142.503 14.5284C152.703 15.7784 163.533 16.1484 170.243 6.82842C171.203 5.48842 172.263 4.14175 173.423 2.78842C175.943 -0.161581 180.683 -1.14158 183.543 1.67842C185.673 3.77842 187.123 7.69842 184.653 10.1284C183.846 10.9218 183.073 11.7818 182.333 12.7084C182.175 12.9047 182.074 13.1399 182.041 13.3884C182.007 13.6369 182.043 13.8894 182.143 14.1184C182.463 14.8384 182.963 15.2018 183.643 15.2084C189.949 15.2751 196.403 15.2284 203.003 15.0684C209.923 14.8984 214.923 11.7884 219.273 6.81842C226.913 -1.90158 232.403 0.888419 239.183 8.69842C244.703 15.0484 253.073 19.6684 261.633 20.0584C266.133 20.2651 270.299 19.9618 274.133 19.1484C282.323 17.4084 288.043 12.1284 293.483 5.87842C294.709 4.47175 296.249 3.29842 298.103 2.35842C305.063 -1.16158 310.243 5.32842 312.753 10.7984C314.013 13.5384 316.183 14.4684 319.093 14.5884C327.593 14.9284 334.843 15.0584 340.823 9.17842C341.076 8.92509 341.379 8.75175 341.733 8.65842Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape3&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.7941352600339 9.3230859375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M17.6779 0C16.5513 11.84 15.9213 19.36 15.7879 22.56C15.3079 33.9733 14.6346 46.28 13.7679 59.48C13.6013 62.04 13.1046 63.7467 12.2779 64.6C8.55793 68.45 -0.30207 67.53 0.00793038 61.06C1.34793 33.3133 2.02793 12.9867 2.04793 0.08Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape4&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9413128810975 9.32414062500001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M201.657 0.05C201.63 7.10333 201.687 11.5967 201.827 13.53C203.28 33.53 204.617 53.6 205.837 73.74L186.487 73.78L193.557 73.61C193.714 73.6076 193.867 73.5609 193.998 73.4752C194.129 73.3896 194.234 73.2685 194.299 73.126C194.364 72.9835 194.388 72.8254 194.367 72.67C193.367 64.75 192.894 56.7733 192.947 48.74C196.9 43.82 196.69 38.93 192.317 34.07C191.537 32.47 191.137 31.2867 191.117 30.52C190.984 25.7933 191.01 21.2667 191.197 16.94C191.213 16.5684 191.128 16.1993 190.951 15.872C190.773 15.5446 190.51 15.2711 190.189 15.0807C189.868 14.8902 189.501 14.7897 189.127 14.79L153.317 14.9C152.777 12.9667 151.747 11.28 150.227 9.84C148.927 8.60667 147.257 7.7 145.217 7.12C138.364 5.17333 133.557 7.71667 130.797 14.75C116.39 14.8967 101.944 14.9467 87.4571 14.9C61.1271 14.81 34.7871 15.13 8.5371 15.06C6.00377 15.0533 4.15377 14.7633 2.9871 14.19C0.773767 13.11 -0.209566 11.2233 0.0371003 8.53C0.150434 7.29667 0.770434 4.45333 1.8971 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape5&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.5460546875 9.32519283839548)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M3.69 73.6301L0 0.0700704L9.97 7.03745e-05C10.1004 -0.00175254 10.2289 0.031869 10.3421 0.0974247C10.4553 0.16298 10.5492 0.258107 10.6139 0.372872C10.6786 0.487637 10.7118 0.617903 10.71 0.75007C10.55 11.1234 10.7367 21.0567 11.27 30.5501C12.07 44.8301 12.51 58.8001 13.82 72.9701C13.8293 73.0668 13.8114 73.1643 13.7681 73.2514C13.7249 73.3384 13.6581 73.4116 13.5754 73.4627C13.4926 73.5137 13.3972 73.5405 13.3 73.5401Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape6&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.3825550063776 9.3230859375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M13.7551 0.08C13.7351 12.9867 13.0551 33.3133 11.7151 61.06C11.4051 67.53 20.2651 68.45 23.9851 64.6C24.8118 63.7467 25.3084 62.04 25.4751 59.48C26.3418 46.28 27.0151 33.9733 27.4951 22.56C27.6284 19.36 28.2584 11.84 29.3851 0L46.2351 0.03C45.1084 4.48333 44.4884 7.32667 44.3751 8.56C44.1284 11.2533 45.1118 13.14 47.3251 14.22C48.4918 14.7933 50.3418 15.0833 52.8751 15.09C79.1251 15.16 105.465 14.84 131.795 14.93C146.282 14.9767 160.728 14.9267 175.135 14.78C174.568 20.8133 176.498 24.9267 180.925 27.12C183.338 28.3133 185.805 28.72 188.325 28.34C194.755 27.36 198.095 21.26 197.655 14.93L233.465 14.82C233.839 14.8197 234.206 14.9202 234.527 15.1107C234.848 15.3011 235.111 15.5746 235.289 15.902C235.466 16.2293 235.551 16.5984 235.535 16.97C235.348 21.2967 235.322 25.8233 235.455 30.55C235.475 31.3167 235.875 32.5 236.655 34.1C232.788 31.5133 229.168 30.99 225.795 32.53C211.935 38.83 224.195 59.55 237.285 48.77C237.232 56.8033 237.705 64.78 238.705 72.7C238.726 72.8554 238.702 73.0135 238.637 73.156C238.572 73.2985 238.467 73.4196 238.336 73.5052C238.205 73.5909 238.052 73.6376 237.895 73.64L230.825 73.81L0.605102 73.79C0.205102 73.79 0.00510204 73.59 0.00510204 73.19C-0.0282313 69.6433 0.101769 66.03 0.395102 62.35C2.00177 42.09 2.92177 21.6067 3.1551 0.9C3.16177 0.353333 3.43844 0.08 3.9851 0.08ZM127.005 36.5C127.005 34.413 126.456 32.3624 125.412 30.555C124.369 28.7476 122.867 27.2464 121.06 26.203C119.253 25.1595 117.202 24.61 115.115 24.61C111.963 24.61 108.937 25.8635 106.708 28.0925C104.479 30.3215 103.225 33.3478 103.225 36.5C103.225 39.6522 104.479 42.6785 106.708 44.9075C108.937 47.1365 111.963 48.39 115.115 48.39C117.202 48.39 119.253 47.8405 121.06 46.797C122.867 45.7536 124.369 44.2524 125.412 42.445C126.456 40.6376 127.005 38.587 127.005 36.5ZM75.9704 37.4184C76.0574 34.3019 74.8637 31.2741 72.6541 29.007C70.4445 26.7398 67.3954 25.4143 64.1835 25.3246C62.057 25.2652 59.9523 25.7501 58.0818 26.7303C56.2114 27.7105 54.6403 29.152 53.5271 30.9092C52.414 32.6664 51.7974 34.6782 51.7398 36.7416C51.6528 39.8581 52.8465 42.8859 55.0561 45.153C57.2657 47.4202 60.3148 48.7457 63.5267 48.8354C65.6532 48.8948 67.7579 48.4099 69.6284 47.4297C71.4988 46.4495 73.0699 45.008 74.1831 43.2508C75.2962 41.4936 75.9128 39.4818 75.9704 37.4184ZM183.874 50.7982C183.856 49.4819 183.468 48.1937 182.749 47.0635C182.03 45.9334 181.006 45.0007 179.779 44.3595C178.552 43.7184 177.166 43.3911 175.76 43.4107C173.637 43.4404 171.61 44.2595 170.128 45.6863C168.646 47.1131 167.828 49.0336 167.856 51.0218C167.874 52.3381 168.262 53.6263 168.981 54.7565C169.7 55.8866 170.725 56.8193 171.951 57.4605C173.178 58.1016 174.564 58.4289 175.97 58.4093C178.093 58.3796 180.121 57.5605 181.603 56.1337C183.084 54.7069 183.902 52.7864 183.874 50.7982Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape7&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.0305953125001 9.32554685349047)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.0064 0.0100006L9.3364 6.11826e-07C9.61064 -0.000292647 9.87453 0.104847 10.0721 0.293135C10.2697 0.481423 10.3861 0.738544 10.3964 1.01C11.3097 24.8167 12.6431 48.6333 14.3964 72.46C14.4564 73.2867 14.0697 73.7 13.2364 73.7L4.1864 73.7C2.9664 53.56 1.62973 33.49 0.1764 13.49C0.0364 11.5567 -0.0202667 7.06333 0.0064 0.0100006Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape8&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1631696428572 9.32765624999999)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M10.891 0L14.581 73.56L5.85095 73.67C5.70139 73.6731 5.55452 73.6294 5.43088 73.5452C5.30724 73.461 5.21287 73.3403 5.16095 73.2C4.86095 72.3733 4.66095 71.5033 4.56095 70.59C2.05429 47.6433 0.534286 24.6667 0.000952381 1.66C-0.0257143 0.566667 0.507619 0.02 1.60095 0.02Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape9&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.5362571970961 9.55219950584632)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.6165 8.41299C23.0565 14.743 19.7165 20.843 13.2865 21.823C10.7665 22.203 8.2998 21.7963 5.88646 20.603C1.4598 18.4097 -0.470205 14.2963 0.0964619 8.26299C2.85646 1.22966 7.66313 -1.31367 14.5165 0.632992C16.5565 1.21299 18.2265 2.11966 19.5265 3.35299C21.0465 4.79299 22.0765 6.47966 22.6165 8.41299Z&quot;&gt;&lt;/path&gt; &lt;circle id=&quot;shape10&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.0115625 10.18828125)&quot; r=&quot;11.89&quot; cx=&quot;11.89&quot; cy=&quot;11.89&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape11&quot; transform=&quot;matrix(0.0351425431068875 0.000981620111375468 -0.000981620111375468 0.0351425431068875 14.2130771675543 10.2015061448131)&quot; rx=&quot;12.12&quot; ry=&quot;11.76&quot; cx=&quot;12.12&quot; cy=&quot;11.76&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape12&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 20.1057469902912 10.4364122450525)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M16.9732 2.43205C21.3465 7.29205 21.5565 12.1821 17.6032 17.1021C4.5132 27.8821 -7.7468 7.16205 6.1132 0.862052C9.48653 -0.677948 13.1065 -0.154615 16.9732 2.43205Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape13&quot; transform=&quot;matrix(0.0351528231097021 -0.000490857902548076 0.000490857902548076 0.0351528231097021 18.2800569526222 10.8531762234766)&quot; rx=&quot;8.01&quot; ry=&quot;7.5&quot; cx=&quot;8.01&quot; cy=&quot;7.5&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape14&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.47390625 12.828515625)&quot; fill=&quot;rgb(224,208,27)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0 300.33C1.52 298.69 3.53 298.057 6.03 298.43C6.10297 298.443 6.17377 298.447 6.24 298.44C6.65333 298.413 6.88667 298.26 6.94 297.98C7 297.66 7.19333 297.493 7.52 297.48L10.29 297.39C10.4233 297.383 10.5567 297.367 10.69 297.34C11.0167 297.267 11.1733 297.127 11.16 296.92C11.1467 296.7 11.2467 296.563 11.46 296.51C12.1467 296.337 12.7433 295.997 13.25 295.49C13.49 295.257 13.58 294.973 13.52 294.64C13.1333 292.653 12.8767 290.647 12.75 288.62C12.69 287.79 12.27 287.35 11.7 286.83C11.4533 286.603 11.3933 286.337 11.52 286.03C11.8533 285.197 11.6767 284.573 10.99 284.16C10.7367 284 10.46 283.923 10.16 283.93L6.56 284.02C15.1 281.92 21.0833 280.04 24.51 278.38C27.5033 276.927 30.4033 275.357 33.21 273.67C33.319 273.603 33.3974 273.495 33.4282 273.371C33.4589 273.246 33.4397 273.115 33.3746 273.004C33.3096 272.894 33.2037 272.813 33.08 272.78C32.5067 272.62 31.9433 272.67 31.39 272.93C63.5767 260.003 88.4967 238.95 106.15 209.77C109.223 204.703 112.093 199 114.76 192.66C118.06 184.807 120.343 178.587 121.61 174C123.097 168.613 124.457 162.397 125.69 155.35C126.657 149.857 126.873 144.25 126.34 138.53C127.853 138.57 128.907 138.097 129.5 137.11C131.56 133.67 131.433 130.473 129.12 127.52C128.24 126.39 127.07 126.39 125.77 126.38C120.017 126.347 114.427 126.37 109 126.45C108.613 125.77 108.27 125.09 107.97 124.41C107.69 123.77 107.527 123.037 107.48 122.21C106.953 112.977 106.213 103.723 105.26 94.45C110.127 94.5633 114.617 94.5833 118.73 94.51C121.27 94.47 123.93 94.86 126 93.31C128.053 91.77 128.717 89.61 127.99 86.83C127.23 83.89 124.98 82.2967 121.24 82.05L120.9 72.32C124.973 70.3667 126.23 67.5767 124.67 63.95C123.697 61.6833 121.82 60.52 119.04 60.46C117.273 58.24 116.223 56.5633 115.89 55.43C113.43 47.1033 110.547 38.9133 107.24 30.86C106.947 30.1467 107 29.0333 107.4 27.52C109.087 27.4933 110.883 27.5267 112.79 27.62C115.45 27.7533 117.403 26.9667 118.65 25.26C121.02 22.01 120.02 17.98 116.55 16.23C115.597 15.75 114.193 15.5133 112.34 15.52C107.533 15.54 102.823 15.4767 98.21 15.33C97.6033 13.9433 96.9433 12.6033 96.23 11.31C94.38 7.96 93.99 4.82 92.56 1.46C92.4467 1.18667 92.5067 0.963333 92.74 0.79L93.19 0.46C93.4567 0.273333 93.4267 0.176667 93.1 0.17L55.31 0L131.2 0.2C131.371 0.200762 131.536 0.26037 131.671 0.369176C131.805 0.477981 131.9 0.629779 131.94 0.8C133.38 7.23333 134.593 14.0833 135.58 21.35C139.67 51.61 143.36 78.87 145.72 107.57C147.27 126.44 146.89 145.44 143.29 163.8C138.28 189.4 127.86 214.54 111.86 234.74C90.34 261.87 61.85 283.26 28.89 293.96C20.1567 296.793 10.5267 298.917 0 300.33Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape15&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.2758764491296 12.828515625)&quot; fill=&quot;rgb(243,249,147)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M231.61 0L269.4 0.17C269.726 0.176667 269.756 0.273333 269.49 0.46L269.04 0.79C268.806 0.963333 268.746 1.18667 268.86 1.46C270.29 4.82 270.68 7.96 272.53 11.31C273.243 12.6033 273.903 13.9433 274.51 15.33C268.76 17.07 269.07 27.78 275.82 27.53C278.38 27.43 281.006 27.4267 283.7 27.52C283.3 29.0333 283.246 30.1467 283.54 30.86C286.846 38.9133 289.73 47.1033 292.19 55.43C292.523 56.5633 293.573 58.24 295.34 60.46C290.98 60.76 286.806 61.0267 282.82 61.26C277.7 61.56 274.45 67.2 278.08 71.26C278.86 72.1333 280.413 72.6 282.74 72.66C287.386 72.7733 292.206 72.66 297.2 72.32L297.54 82.05C293.013 81.9567 288.443 81.9633 283.83 82.07C281.84 82.11 280.61 82.75 279.5 84.26C276.44 88.44 277.126 91.8367 281.56 94.45C282.513 103.723 283.253 112.977 283.78 122.21C283.826 123.037 283.99 123.77 284.27 124.41C284.57 125.09 284.913 125.77 285.3 126.45C282.193 127.497 280.633 129.463 280.62 132.35C280.613 134.79 281.763 136.753 284.07 138.24C281.93 156.593 277.493 173.123 270.76 187.83C261.606 207.817 247.22 225.063 227.6 239.57C218.546 246.263 208.406 252.023 197.18 256.85C191.52 259.28 187.21 264.45 191.61 270.42C195.03 275.03 202.58 274.56 207.69 272.93C208.243 272.67 208.806 272.62 209.38 272.78C209.503 272.813 209.609 272.894 209.674 273.004C209.739 273.115 209.758 273.246 209.728 273.371C209.697 273.495 209.619 273.603 209.51 273.67C206.703 275.357 203.803 276.927 200.81 278.38C197.383 280.04 191.4 281.92 182.86 284.02C165.386 287.427 148.786 288.113 133.06 286.08C116.433 283.94 99.2895 279.17 81.6295 271.77C75.1162 269.043 68.6828 266.14 62.3295 263.06C54.3762 259.2 46.8962 254.463 39.8895 248.85C40.5695 248.377 41.3595 247.947 42.2595 247.56C44.5695 246.55 46.3695 244.3 44.1695 241.99C29.1962 226.303 18.1928 209.247 11.1595 190.82C1.95285 166.687 -1.55715 141.62 0.629514 115.62C2.01618 99.0867 3.45618 82.5733 4.94951 66.08C5.49618 59.9533 6.20618 53.32 7.07951 46.18C8.95285 30.8733 10.7762 15.5733 12.5495 0.28ZM230.747 11.7302C228.758 9.7412 226.058 8.62261 223.245 8.62261C220.432 8.62261 217.731 9.7412 215.742 11.7302L213.89 13.5829C211.901 15.5719 210.782 18.2724 210.782 21.0853C210.782 23.8982 211.901 26.5987 213.89 28.5877L215.092 29.7898C217.081 31.7788 219.781 32.8974 222.594 32.8974C225.407 32.8974 228.108 31.7788 230.097 29.7898L231.949 27.9371C233.938 25.9481 235.057 23.2476 235.057 20.4347C235.057 17.6218 233.938 14.9213 231.949 12.9323ZM47.1595 186.78C39.7128 170.84 35.7195 154.833 35.1795 138.76C34.9528 131.94 35.0895 124.72 35.5895 117.1C37.1495 93.44 39.2662 67.4833 41.9395 39.23C42.3395 35.0167 42.6262 30.7267 42.7995 26.36C43.4195 10.9 25.2095 12.45 24.4195 25.69C23.0462 48.79 21.1195 72.2233 18.6395 95.99C17.6595 105.337 16.9995 114.63 16.6595 123.87C16.3328 132.65 16.6595 140.653 17.6395 147.88C19.5062 161.707 22.9728 175.147 28.0395 188.2C29.1795 191.153 30.6662 194.07 32.4995 196.95C35.2995 201.37 41.5395 202.72 45.3395 198.89C48.7328 195.483 49.3395 191.447 47.1595 186.78ZM87.1943 37.8021C86.8236 36.4743 85.902 35.3574 84.6342 34.6994C83.3663 34.0413 81.8534 33.8945 80.4311 34.2916C79.0088 34.6887 77.7908 35.598 77.0472 36.8177C76.3037 38.0374 76.094 39.4701 76.4647 40.7979C76.8355 42.1257 77.757 43.2426 79.0249 43.9006C80.2927 44.5587 81.8056 44.7055 83.2279 44.3084C84.6502 43.9113 85.8682 43.002 86.6118 41.7823C87.3554 40.5626 87.565 39.1299 87.1943 37.8021ZM242.9 63.3691C242.905 60.5116 242.14 57.7024 240.682 55.2252C239.224 52.7479 237.124 50.6888 234.594 49.2556C232.064 47.8225 229.192 47.0651 226.268 47.06C223.344 47.0549 220.469 47.8022 217.934 49.2266C215.399 50.6509 213.292 52.7027 211.826 55.1748C210.359 57.6469 209.585 60.4534 209.58 63.3109C209.575 66.1684 210.34 68.9776 211.797 71.4548C213.255 73.9321 215.355 75.9912 217.885 77.4244C220.415 78.8575 223.287 79.6149 226.211 79.62C229.135 79.6251 232.01 78.8778 234.545 77.4534C237.08 76.0291 239.187 73.9773 240.653 71.5052C242.12 69.0331 242.895 66.2266 242.9 63.3691ZM85.9041 71.8823C88.1531 72.912 90.7367 72.9736 93.0816 72.0534C95.4266 71.1333 97.3455 69.3049 98.4127 66.9739C99.1193 65.4306 99.4215 63.7348 99.2889 62.0574C99.1563 60.38 98.5935 58.7796 97.6572 57.4176C96.721 56.0556 95.4439 54.9794 93.9549 54.2977C91.7059 53.268 89.1223 53.2064 86.7774 54.1266C84.4325 55.0467 82.5135 56.8751 81.4463 59.2061C80.7398 60.7494 80.4375 62.4452 80.5701 64.1226C80.7028 65.8 81.2656 67.4004 82.2018 68.7624C83.1381 70.1244 84.4151 71.2006 85.9041 71.8823ZM60.6086 105.171C63.2448 106.638 66.3725 106.974 69.2978 106.105C72.223 105.236 74.7122 103.231 76.213 100.535C77.7138 97.8381 78.1063 94.6659 77.3035 91.7217C76.5007 88.7775 74.5666 86.2966 71.9304 84.8293C69.2942 83.362 66.1665 83.0257 63.2413 83.8948C60.316 84.7639 57.8268 86.7691 56.326 89.4655C54.8252 92.1619 54.4327 95.3341 55.2355 98.2783C56.0384 101.222 57.9724 103.703 60.6086 105.171ZM187.08 98.11C187.08 96.1959 186.318 94.3582 184.965 93.0047C183.611 91.6512 181.774 90.89 179.86 90.89C177.945 90.89 176.108 91.6512 174.754 93.0047C173.401 94.3582 172.64 96.1959 172.64 98.11C172.64 100.024 173.401 101.862 174.754 103.215C176.108 104.569 177.945 105.33 179.86 105.33C181.127 105.33 182.372 104.996 183.47 104.363C184.567 103.729 185.479 102.817 186.112 101.72C186.746 100.623 187.08 99.3773 187.08 98.11ZM234.564 99.0027C233.705 97.863 232.551 96.9774 231.217 96.4351C229.883 95.8929 228.416 95.7129 226.964 95.9133C225.513 96.1138 224.127 96.6877 222.947 97.5771C221.766 98.4665 220.833 99.6405 220.24 100.981C219.647 102.321 219.416 103.78 219.57 105.212C219.723 106.644 220.256 107.998 221.115 109.137C221.974 110.277 223.128 111.163 224.462 111.705C225.796 112.247 227.263 112.427 228.715 112.227C230.166 112.026 231.552 111.452 232.732 110.563C233.913 109.673 234.846 108.499 235.439 107.159C236.032 105.819 236.263 104.36 236.109 102.928C235.956 101.496 235.423 100.142 234.564 99.0027ZM47.9695 214.56C45.1695 220.83 50.0195 225.32 54.0495 229.45C57.6895 233.19 61.8995 236.09 66.6995 232.86C71.8895 229.38 72.0595 223.24 67.9795 218.66C64.2095 214.41 60.6395 209.6 54.3295 209.99C51.4095 210.17 49.1195 211.99 47.9695 214.56Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape16&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.8026079545455 12.838359375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M26.0114 0C24.238 15.2933 22.4147 30.5933 20.5414 45.9C19.668 53.04 18.958 59.6733 18.4114 65.8C16.918 82.2933 15.478 98.8067 14.0914 115.34C11.9047 141.34 15.4147 166.407 24.6214 190.54C31.6547 208.967 42.658 226.023 57.6314 241.71C59.8314 244.02 58.0314 246.27 55.7214 247.28C54.8214 247.667 54.0314 248.097 53.3514 248.57C51.9014 250.07 52.3314 253.14 52.3514 255.14C31.6214 235.93 17.0114 211.99 8.66137 185.13C2.48804 165.29 -0.385293 145.337 0.0413737 125.27C0.691374 94.91 5.82137 63.64 9.38137 32.5C9.99471 27.1467 10.7014 21.75 11.5014 16.31C12.3214 10.7767 13.5247 5.69667 15.1114 1.07C15.2107 0.778294 15.3987 0.524438 15.6494 0.343583C15.9001 0.162728 16.2013 0.0636261 16.5114 0.06Z&quot;&gt;&lt;/path&gt; &lt;rect id=&quot;shape17&quot; transform=&quot;matrix(0.0248592227760896 -0.0248592227760896 0.0248592227760896 0.0248592227760896 19.531681996495 13.569794617477)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; width=&quot;23.84&quot; height=&quot;22.92&quot; rx=&quot;10.61&quot; ry=&quot;10.61&quot;&gt;&lt;/rect&gt; &lt;path id=&quot;shape18&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.857255859375 13.3649990428515)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M30.6225 171.52C32.8025 176.187 32.1958 180.223 28.8025 183.63C25.0025 187.46 18.7625 186.11 15.9625 181.69C14.1292 178.81 12.6425 175.893 11.5025 172.94C6.43583 159.887 2.96917 146.447 1.1025 132.62C0.1225 125.393 -0.204167 117.39 0.1225 108.61C0.4625 99.37 1.1225 90.0767 2.1025 80.73C4.5825 56.9634 6.50917 33.53 7.8825 10.43C8.6725 -2.80997 26.8825 -4.35997 26.2625 11.1C26.0892 15.4667 25.8025 19.7567 25.4025 23.97C22.7292 52.2234 20.6125 78.18 19.0525 101.84C18.5525 109.46 18.4158 116.68 18.6425 123.5C19.1825 139.573 23.1758 155.58 30.6225 171.52Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape19&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.7841415488515 13.3674609375)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.0522 0C8.66553 0.146667 13.3755 0.21 18.1822 0.19C20.0355 0.183333 21.4389 0.42 22.3922 0.9C25.8622 2.65 26.8622 6.68 24.4922 9.93C23.2455 11.6367 21.2922 12.4233 18.6322 12.29C16.7255 12.1967 14.9289 12.1633 13.2422 12.19C10.5489 12.0967 7.9222 12.1 5.3622 12.2C-1.3878 12.45 -1.6978 1.74 4.0522 0Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape20&quot; transform=&quot;matrix(0.0338611839889802 -0.00945421244350544 0.00945421244350544 0.0338611839889802 14.9149266129752 14.0867380565676)&quot; rx=&quot;5.57&quot; ry=&quot;5.2&quot; cx=&quot;5.57&quot; cy=&quot;5.2&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape21&quot; transform=&quot;matrix(0.0351561964539828 6.13592003636124e-05 -6.13592003636124e-05 0.0351561964539828 19.6449060698586 14.4819473774511)&quot; rx=&quot;16.66&quot; ry=&quot;16.28&quot; cx=&quot;16.66&quot; cy=&quot;16.28&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape22&quot; transform=&quot;matrix(-0.0146348716029047 0.031965331958686 -0.031965331958686 -0.0146348716029047 15.8772166930746 14.8739620295146)&quot; rx=&quot;9.67&quot; ry=&quot;9.33&quot; cx=&quot;9.67&quot; cy=&quot;9.33&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape23&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.997793706651 14.9540625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M18.805 0C21.585 0.06 23.4616 1.22333 24.435 3.49C25.995 7.11667 24.7383 9.90667 20.665 11.86C15.6716 12.2 10.8516 12.3133 6.20498 12.2C3.87831 12.14 2.32498 11.6733 1.54498 10.8C-2.08502 6.74 1.16498 1.1 6.28498 0.8C10.2716 0.566667 14.445 0.3 18.805 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape24&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.0361349190606 15.7107890625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M19.9144 0.0653333C23.6544 0.312 25.9044 1.90533 26.6644 4.84533C27.3911 7.62533 26.7277 9.78533 24.6744 11.3253C22.6044 12.8753 19.9444 12.4853 17.4044 12.5253C13.2911 12.5987 8.80105 12.5787 3.93438 12.4653C-0.498949 9.852 -1.18562 6.45533 1.87438 2.27533C2.98438 0.765333 4.21438 0.125333 6.20438 0.0853333C10.8177 -0.0213333 15.3877 -0.028 19.9144 0.0653333Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape25&quot; transform=&quot;matrix(-0.0170977282180133 0.0307185547160906 -0.0307185547160906 -0.0170977282180133 15.1542587716268 16.0053675452257)&quot; rx=&quot;11.64&quot; ry=&quot;11.38&quot; cx=&quot;11.64&quot; cy=&quot;11.38&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;circle id=&quot;shape26&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.345234375 16.0238671875)&quot; r=&quot;7.22&quot; cx=&quot;7.22&quot; cy=&quot;7.22&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape27&quot; transform=&quot;matrix(0.0280770296501001 -0.0211575594076892 0.0211575594076892 0.0280770296501001 19.8774398273616 16.4371069616574)&quot; rx=&quot;8.42&quot; ry=&quot;8.13&quot; cx=&quot;8.42&quot; cy=&quot;8.13&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape28&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1414052368516 17.2710454963236)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.02 12.1647L3.45003 11.8747C1.14336 10.388 -0.00663785 8.42471 2.88184e-05 5.98471C0.0133622 3.09804 1.57336 1.13137 4.68003 0.0847059C10.1067 0.00470588 15.6967 -0.0186275 21.45 0.0147059C22.75 0.0247059 23.92 0.0247059 24.8 1.15471C27.1134 4.10804 27.24 7.30471 25.18 10.7447C24.5867 11.7314 23.5334 12.2047 22.02 12.1647Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape29&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.9485123620206 17.688515625)&quot; fill=&quot;rgb(246,245,19)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M94.2701 0L112.84 0.29C113.373 6.01 113.157 11.6167 112.19 17.11C110.957 24.1567 109.597 30.3733 108.11 35.76C106.843 40.3467 104.56 46.5667 101.26 54.42C98.5934 60.76 95.7234 66.4633 92.6501 71.53C74.9968 100.71 50.0768 121.763 17.8901 134.69C12.7801 136.32 5.23009 136.79 1.81009 132.18C-2.58991 126.21 1.72009 121.04 7.38009 118.61C18.6068 113.783 28.7468 108.023 37.8001 101.33C57.4201 86.8233 71.8068 69.5767 80.9601 49.59C87.6934 34.8833 92.1301 18.3533 94.2701 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape30&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9331058615201 20.210194296345)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.830544 4.59225C1.98054 2.02225 4.27054 0.202251 7.19054 0.0222511C13.5005 -0.367749 17.0705 4.44225 20.8405 8.69225C24.9205 13.2723 24.7505 19.4123 19.5605 22.8923C14.7605 26.1223 10.5505 23.2223 6.91054 19.4823C2.88054 15.3523 -1.96946 10.8623 0.830544 4.59225Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape31&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.6404577789765 21.5771484375)&quot; fill=&quot;rgb(246,245,19)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.07476 0C8.08142 5.61333 15.5614 10.35 23.5148 14.21C29.8681 17.29 36.3014 20.1933 42.8148 22.92C60.4748 30.32 77.6181 35.09 94.2448 37.23C109.971 39.2633 126.571 38.5767 144.045 35.17L147.645 35.08C147.945 35.0733 148.221 35.15 148.475 35.31C149.161 35.7233 149.338 36.3467 149.005 37.18C148.878 37.4867 148.938 37.7533 149.185 37.98C149.755 38.5 150.175 38.94 150.235 39.77C150.361 41.7967 150.618 43.8033 151.005 45.79C151.065 46.1233 150.975 46.4067 150.735 46.64C150.228 47.1467 149.631 47.4867 148.945 47.66C148.731 47.7133 148.631 47.85 148.645 48.07C148.658 48.2767 148.501 48.4167 148.175 48.49C148.041 48.5167 147.908 48.5333 147.775 48.54L145.005 48.63C144.678 48.6433 144.485 48.81 144.425 49.13C144.371 49.41 144.138 49.5633 143.725 49.59C143.659 49.5967 143.588 49.5933 143.515 49.58C141.015 49.2067 139.005 49.84 137.485 51.48C124.278 53.2267 112.368 53.5833 101.755 52.55C80.2748 50.4633 60.3014 44.84 41.8348 35.68C35.8281 32.7 28.6481 28.54 20.2948 23.2C14.0414 19.2067 7.30142 13.6633 0.0747565 6.57C0.0547565 4.57 -0.375243 1.5 1.07476 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape32&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.548046875 24.3846604970638)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M37.39 126.792L36.84 125.732C36.6867 125.445 36.61 125.139 36.61 124.812L36.29 50.1519C39.97 50.1319 42.74 50.0419 44.93 47.3519C46.0567 45.9652 46.4067 44.4152 45.98 42.7019C44.81 38.0219 40.08 37.5119 35.72 37.6019L35.91 26.2919C40.16 26.9019 44.77 27.8519 48.81 25.9619C52.26 24.3519 53.31 20.2319 50.85 17.2519C48.51 14.4319 45.36 14.2119 41.99 14.2719C35.7567 14.3852 29.3167 14.4052 22.67 14.3319C19.49 14.3019 16.81 15.9619 15.14 18.6319C15.2 16.6619 12.86 15.6819 11.44 14.7519C10.6133 14.2119 9.90667 13.5852 9.32 12.8719C6.57333 9.53188 3.78 6.23188 0.94 2.97188C0.46 2.41855 0.146667 1.62521 0 0.591879C17.1 3.24521 34.28 3.98188 51.54 2.80188C57.06 2.42188 62.3133 1.51855 67.3 0.0918792C68.18 -0.154787 68.3567 0.0952125 67.83 0.841879C58.7633 13.8352 53.49 29.3252 52.01 47.3119C50.37 67.3319 51 88.9819 56.8 107.652C58.81 114.142 62.13 120.072 65.01 126.212C65.0485 126.291 65.0589 126.382 65.0394 126.468C65.02 126.554 64.9718 126.631 64.9029 126.686C64.834 126.741 64.7483 126.772 64.66 126.772Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape33&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.486355851717 24.3923298330305)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.75477 0.373729C1.90143 1.40706 2.21477 2.2004 2.69477 2.75373C5.53477 6.01373 8.3281 9.31373 11.0748 12.6537C11.6614 13.3671 12.3681 13.9937 13.1948 14.5337C14.6148 15.4637 16.9548 16.4437 16.8948 18.4137L16.5848 19.0537C15.9714 19.3604 15.6748 19.8204 15.6948 20.4337C15.8148 23.3437 16.3448 26.1237 18.0248 28.6937C19.9714 31.6737 22.1714 34.5471 24.6248 37.3137C19.6548 39.6737 18.5548 46.9937 24.3448 49.3137C24.1981 53.2071 24.2048 57.1237 24.3648 61.0637C24.5581 65.7371 24.5748 69.6437 24.4148 72.7837C24.2014 77.0371 23.9914 81.3304 23.7848 85.6637C23.1248 99.8304 19.6748 113.244 13.4348 125.904C13.2814 126.21 13.0314 126.384 12.6848 126.424L11.5948 126.534L3.79477 126.534C3.66373 126.534 3.5364 126.49 3.43437 126.408C3.33234 126.325 3.26171 126.21 3.23447 126.082C3.20722 125.954 3.22499 125.82 3.28477 125.704C16.0848 100.784 18.1148 71.0737 14.6948 43.5737C12.8014 28.3737 7.92143 14.0371 0.0547669 0.563729C0.0152725 0.50031 -0.00361813 0.426609 0.000572506 0.352292C0.00476314 0.277975 0.0318434 0.20644 0.0782619 0.147067C0.12468 0.0876949 0.188315 0.0431997 0.26082 0.0194171C0.333326 -0.0043654 0.411387 -0.00634806 0.484767 0.0137292Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape34&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.0617214476865 24.8861307529877)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M21.2988 12.0278C16.7455 11.8878 12.1288 11.8545 7.44881 11.9278C4.74215 11.9678 2.94548 11.7312 2.05881 11.2178C0.238812 10.1645 -0.374521 8.0945 0.218812 5.00784L0.528812 4.36784C2.19881 1.69784 4.87881 0.0378364 8.05881 0.0678364C14.7055 0.14117 21.1455 0.12117 27.3788 0.00783636C30.7488 -0.0521636 33.8988 0.167836 36.2388 2.98784C38.6988 5.96784 37.6488 10.0878 34.1988 11.6978C30.1588 13.5878 25.5488 12.6378 21.2988 12.0278Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape35&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.038091694079 25.0621875000001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.890947 0C0.297614 3.08667 0.910947 5.15667 2.73095 6.21C3.61761 6.72333 5.41428 6.96 8.12095 6.92C12.8009 6.84667 17.4176 6.88 21.9709 7.02L21.7809 18.33L8.93095 18.26C6.47761 15.4933 4.27761 12.62 2.33095 9.64C0.650947 7.07 0.120947 4.29 0.000947368 1.38C-0.0190526 0.766667 0.277614 0.306667 0.890947 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape36&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.2047130847683 25.704140625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.19149 0L17.0415 0.07C21.4015 -0.02 26.1315 0.49 27.3015 5.17C27.7282 6.88333 27.3782 8.43333 26.2515 9.82C24.0615 12.51 21.2915 12.6 17.6115 12.62L3.91149 12C-1.87851 9.68 -0.778506 2.36 4.19149 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape37&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.893984375 26.126015625)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M12.75 0L26.45 0.62L26.77 75.28C26.77 75.6067 26.8467 75.9133 27 76.2L27.55 77.26L0 77.22L1.09 77.11C1.43667 77.07 1.68667 76.8967 1.84 76.59C8.08 63.93 11.53 50.5167 12.19 36.35C12.3967 32.0167 12.6067 27.7233 12.82 23.47C12.98 20.33 12.9633 16.4233 12.77 11.75C12.61 7.81 12.6033 3.89333 12.75 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape38&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.22640625 29.4324536132813)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M29.96 24.0302C30.7067 23.5835 30.1467 23.1702 28.28 22.7902C27.96 22.7235 27.6733 22.5835 27.42 22.3702C24.9333 20.2235 22.8967 18.7069 21.31 17.8202C12.91 13.1069 5.80667 7.21687 0 0.150208L30.09 0.000208333C30.4767 -0.00645833 30.7833 0.146875 31.01 0.460208C37.57 9.69354 45.7567 17.2435 55.57 23.1102C55.9433 23.3302 55.92 23.4969 55.5 23.6102C54.48 23.8769 53.4167 24.0135 52.31 24.0202C44.77 24.0669 37.32 24.0702 29.96 24.0302Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape39&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.2706541442871 29.4394921875)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M38.2747 0C35.2147 4.74667 31.2681 10.0433 26.4347 15.89C23.4547 19.49 20.7014 22.14 18.1747 23.84L0.754727 23.73C-0.17194 23.7233 -0.245273 23.4733 0.534727 22.98C9.87473 17.05 17.3747 9.52 24.9347 0.58C25.0571 0.432797 25.211 0.314351 25.3856 0.233119C25.5601 0.151886 25.7511 0.109846 25.9447 0.11Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape40&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.909609375 29.437734375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M65.9 0C71.7067 7.06667 78.81 12.9567 87.21 17.67C88.7967 18.5567 90.8333 20.0733 93.32 22.22C93.5733 22.4333 93.86 22.5733 94.18 22.64C96.0467 23.02 96.6067 23.4333 95.86 23.88L0 23.89C2.52667 22.19 5.28 19.54 8.26 15.94C13.0933 10.0933 17.04 4.79667 20.1 0.05Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape41&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.6264334548969 30.8390367406574)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M175.558 0.450733C176.245 0.450733 176.568 0.567399 176.528 0.800733C176.494 1.0303 176.388 1.24303 176.226 1.40826C176.065 1.5735 175.855 1.68291 175.628 1.72073C171.935 2.3474 168.581 2.65073 165.568 2.63073C163.998 2.62073 162.798 3.35073 161.188 3.18073C160.808 3.14073 160.445 3.20407 160.098 3.37073L158.488 4.16073C158.195 4.30073 157.958 4.50407 157.778 4.77073C157.045 5.85073 156.111 6.47073 154.978 6.63073C153.258 6.87073 151.491 6.99073 149.678 6.99073C111.858 6.8974 73.5681 6.84073 34.8081 6.82073C28.6781 6.82073 24.4281 9.63073 23.3181 15.9507L0.628115 15.8107C0.50059 15.8104 0.376138 15.7713 0.2713 15.6987C0.166463 15.626 0.0861025 15.5233 0.0409006 15.404C-0.00430136 15.2848 -0.0122487 15.1546 0.0181151 15.0307C2.16812 6.40073 10.0881 -0.0792673 19.0981 0.00073271C53.2181 0.314066 87.8014 0.380733 122.848 0.200733C140.421 0.114066 157.991 0.197399 175.558 0.450733Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape42&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.4462109375 30.8548828125)&quot; fill=&quot;rgb(243,249,147)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M152.24 0L253.08 0.15C253.047 2.17 252.56 3.72667 251.62 4.82C250.867 5.69333 249.93 6.13667 248.81 6.15C221.383 6.39 194.363 6.58667 167.75 6.74C167.283 6.74 167.03 6.97333 166.99 7.44C166.87 8.95333 167.113 10.3433 167.72 11.61C167.847 11.8833 167.89 12.1667 167.85 12.46L167.63 14.18C167.577 14.5867 167.74 14.86 168.12 15C168.573 15.1667 168.867 15.3533 169 15.56L0 15.5C1.11 9.18 5.36 6.37 11.49 6.37C50.25 6.39 88.54 6.44667 126.36 6.54C128.173 6.54 129.94 6.42 131.66 6.18C132.793 6.02 133.727 5.4 134.46 4.32C134.64 4.05333 134.877 3.85 135.17 3.71L136.78 2.92C137.127 2.75333 137.49 2.69 137.87 2.73C139.48 2.9 140.68 2.17 142.25 2.18C145.263 2.2 148.617 1.89667 152.31 1.27C152.537 1.23218 152.746 1.12277 152.908 0.957532C153.07 0.792295 153.175 0.579568 153.21 0.35C153.25 0.116667 152.927 -1.13687e-13 152.24 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape43&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 19.3159081135321 30.86015625)&quot; fill=&quot;rgb(246,245,19)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M86.1197 0C93.6331 3.14 98.2231 7.99667 99.8897 14.57C99.9181 14.684 99.9111 14.804 99.8698 14.914C99.8285 15.024 99.7547 15.1189 99.6583 15.186C99.5618 15.2532 99.4472 15.2894 99.3297 15.29L2.03972 15.41C1.90639 15.2033 1.61306 15.0167 1.15972 14.85C0.779725 14.71 0.616391 14.4367 0.669725 14.03L0.889725 12.31C0.929725 12.0167 0.886391 11.7333 0.759725 11.46C0.153058 10.1933 -0.0902752 8.80333 0.0297248 7.29C0.0697248 6.82333 0.323058 6.59 0.789725 6.59C27.4031 6.43667 54.4231 6.24 81.8497 6C82.9697 5.98667 83.9064 5.54333 84.6597 4.67C85.5997 3.57667 86.0864 2.02 86.1197 0Z&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt;&lt;div class=&quot;w-16 h-16&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;fill-[${rgbColor} w-16 h-16&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 36 36&quot;&gt; &lt;defs&gt;&lt;/defs&gt; &lt;path id=&quot;shape0&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 10.393984646722 3.24851063866497)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M384.119 800.308C389.392 800.401 395.079 800.381 401.179 800.248C405.299 800.161 408.469 800.568 410.689 801.468C415.949 803.598 420.779 810.198 420.289 816.268C419.669 823.858 412.349 829.318 404.999 829.328C277.499 829.355 146.952 829.355 13.3589 829.328C8.63888 829.328 4.09888 825.978 1.87888 822.058C-2.73112 813.888 1.52888 803.918 10.4389 801.028C11.9855 800.528 13.9555 800.285 16.3489 800.298C22.1289 800.338 27.6889 800.265 33.0289 800.078C33.1769 800.076 33.3188 800.017 33.4263 799.913C33.5337 799.809 33.5989 799.668 33.6089 799.518C33.7489 797.391 34.0889 795.351 34.6289 793.398C38.5755 779.138 46.7822 768.285 59.2489 760.838C67.2389 756.068 77.9989 753.418 87.8689 753.798C91.7089 753.938 95.6189 754.578 99.3589 753.338C121.612 745.945 138.126 732.518 148.899 713.058C160.649 691.848 162.149 664.098 156.689 640.298C150.949 615.338 135.539 594.358 113.659 581.418C104.759 576.151 97.1322 571.378 90.7789 567.098C79.8722 559.751 69.4389 550.391 59.4789 539.018C41.7922 518.825 28.7222 496.301 20.2689 471.448C13.2089 450.695 9.41555 429.945 8.88888 409.198C8.39555 389.938 9.51888 370.588 12.2589 351.148C15.7689 326.188 18.7489 301.968 22.2689 277.258C23.1955 270.798 23.9055 264.308 24.3989 257.788C25.2922 245.915 26.1489 234.441 26.9689 223.368C28.2189 206.548 28.2189 189.968 28.2289 172.948C28.229 172.665 28.1641 172.386 28.0392 172.133C27.9143 171.88 27.7328 171.659 27.5089 171.488C4.71888 154.278 -3.35112 123.728 10.2489 97.8679C21.8189 75.8479 44.3589 62.0579 69.5789 63.3579C72.9922 63.5379 76.3389 64.1179 79.6189 65.0979C79.7826 65.1468 79.9567 65.1513 80.1235 65.1109C80.2903 65.0705 80.4439 64.9867 80.5689 64.8679C95.3422 50.8279 113.322 44.9613 134.509 47.2679C134.656 47.2852 134.804 47.2536 134.932 47.1778C135.061 47.102 135.161 46.9862 135.219 46.8479C136.972 42.6213 139.372 38.5079 142.419 34.5079C153.299 20.2379 166.749 9.32792 184.089 3.97792C204.569 -2.34875 224.312 -1.12875 243.319 7.63792C258.599 14.6779 272.559 26.6579 280.469 41.6579C280.596 41.9046 280.792 41.9846 281.059 41.8979C289.839 38.9646 299.389 37.9446 309.709 38.8379C326.729 40.3079 342.309 50.4379 353.989 63.2879C354.516 63.8679 355.166 64.1746 355.939 64.2079C361.419 64.4546 366.656 65.5513 371.649 67.4979C392.199 75.5079 406.519 91.1379 411.669 112.968C413.189 119.421 413.456 125.841 412.469 132.228C409.882 148.975 401.956 162.205 388.689 171.918C387.729 172.628 387.729 173.468 387.719 174.528C387.586 191.895 387.899 207.108 388.659 220.168C389.549 235.238 390.999 253.908 393.189 270.758C396.622 297.205 400.169 324.231 403.829 351.838C404.689 358.351 405.536 366.615 406.369 376.628C407.042 384.655 407.406 391.321 407.459 396.628C407.679 420.268 404.476 443.035 397.849 464.928C386.419 502.718 363.929 536.538 333.029 561.268C324.009 568.498 312.959 575.088 302.869 581.488C297.502 584.888 292.979 588.131 289.299 591.218C265.139 611.508 255.039 640.758 256.429 672.398C258.039 709.018 277.959 738.488 312.639 751.718C317.389 753.528 321.449 754.508 326.659 754.038C338.269 753.008 349.089 755.608 359.129 762.058C371.639 770.088 381.589 784.038 383.299 799.558C383.352 800.045 383.626 800.295 384.119 800.308ZM34.9389 123.938C34.6255 130.038 36.5689 135.461 40.7689 140.208C42.9155 142.635 45.5089 143.855 48.5489 143.868C57.4489 143.895 67.6722 143.898 79.2189 143.878C80.8589 143.878 81.9889 142.308 82.5389 140.958C82.6855 140.585 82.6522 140.231 82.4389 139.898C80.5522 136.978 80.8189 134.321 83.2389 131.928C87.7189 127.508 91.8289 130.808 94.8789 134.678C97.7389 138.308 103.749 143.708 108.819 143.768C117.746 143.855 126.882 143.871 136.229 143.818C142.909 143.768 150.429 136.098 154.769 131.618C156.269 130.068 158.029 129.188 160.259 129.608C164.159 130.328 166.106 132.778 166.099 136.958C166.099 138.248 165.299 139.248 164.549 140.218C164.261 140.59 164.13 141.06 164.184 141.527C164.239 141.994 164.474 142.422 164.839 142.718C166.006 143.678 167.326 144.148 168.799 144.128C196.979 143.828 224.629 143.751 251.749 143.898C253.509 143.905 255.106 143.581 256.539 142.928C256.721 142.847 256.872 142.708 256.969 142.533C257.065 142.358 257.101 142.155 257.073 141.955C257.044 141.756 256.951 141.571 256.809 141.428C253.879 138.498 254.059 132.908 257.859 130.608C262.999 127.498 266.539 130.248 269.939 133.818C274.619 138.718 280.959 143.828 287.779 143.838C296.859 143.865 305.789 143.868 314.569 143.848C321.399 143.828 328.259 136.098 332.759 131.638C335.086 129.338 337.459 128.821 339.879 130.088C343.819 132.161 344.612 135.195 342.259 139.188C342.08 139.495 341.983 139.844 341.98 140.198C341.976 140.552 342.066 140.901 342.239 141.208C343.319 143.118 344.959 144.088 347.179 144.068C354.066 144.001 361.086 143.928 368.239 143.848C370.352 143.821 372.149 143.235 373.629 142.088C379.589 137.488 382.416 131.278 382.109 123.458C381.969 109.928 371.589 99.2079 359.169 95.4779C358.953 95.4151 358.724 95.4137 358.51 95.4738C358.296 95.534 358.105 95.6534 357.959 95.8179C355.212 98.9446 351.706 100.435 347.439 100.288C341.069 100.068 338.009 96.4579 335.789 91.1479C332.202 82.5946 326.232 76.3279 317.879 72.3479C307.626 67.4546 296.802 67.5779 285.409 72.7179C282.069 74.2179 279.519 77.4279 276.309 79.4679C269.159 84.0279 261.339 79.8879 260.179 71.8979C258.606 61.0979 253.279 51.6813 244.199 43.6479C217.109 19.6679 175.399 28.6579 160.839 61.6279C158.766 66.3279 157.699 70.8946 157.639 75.3279C157.559 80.8679 155.339 86.2279 149.929 88.1679C144.262 90.2146 139.372 89.0513 135.259 84.6779C133.749 83.0679 132.859 81.0279 131.499 79.3379C131.286 79.0646 131.012 78.8779 130.679 78.7779C128.472 78.1113 126.346 77.8213 124.299 77.9079C113.326 78.3813 104.429 83.1579 97.6089 92.2379C94.2189 96.7479 94.0089 102.468 90.0089 106.458C86.8589 109.588 81.6689 110.618 77.7089 108.488C73.0155 105.968 70.9422 101.938 71.4889 96.3979C71.5755 95.5313 71.1922 95.0446 70.3389 94.9379C59.7789 93.5446 50.8422 96.5046 43.5289 103.818C38.0555 109.291 35.1922 115.998 34.9389 123.938ZM70.3189 172.868L60.5489 172.868C60.0022 172.868 59.7255 173.141 59.7189 173.688C59.4855 194.395 58.5655 214.878 56.9589 235.138C56.6655 238.818 56.5355 242.431 56.5689 245.978C56.5689 246.378 56.7689 246.578 57.1689 246.578L287.389 246.598L306.739 246.558L315.789 246.558C316.622 246.558 317.009 246.145 316.949 245.318C315.196 221.491 313.862 197.675 312.949 173.868C312.939 173.596 312.822 173.339 312.625 173.151C312.427 172.963 312.163 172.858 311.889 172.858L302.559 172.868L102.799 172.818L85.9489 172.788ZM345.659 172.918L336.369 172.938C335.276 172.938 334.742 173.485 334.769 174.578C335.302 197.585 336.822 220.561 339.329 243.508C339.429 244.421 339.629 245.291 339.929 246.118C339.981 246.258 340.075 246.379 340.199 246.463C340.322 246.547 340.469 246.591 340.619 246.588L349.349 246.478L358.959 246.388C359.056 246.388 359.152 246.362 359.234 246.311C359.317 246.259 359.384 246.186 359.427 246.099C359.47 246.012 359.488 245.915 359.479 245.818C358.169 231.648 357.729 217.678 356.929 203.398C356.396 193.905 356.209 183.971 356.369 173.598C356.371 173.466 356.337 173.335 356.273 173.221C356.208 173.106 356.114 173.011 356.001 172.945C355.888 172.88 355.759 172.846 355.629 172.848ZM285.139 272.498L66.0789 272.778L56.5789 272.838C56.2688 272.842 55.9676 272.941 55.7169 273.122C55.4662 273.302 55.2782 273.556 55.1789 273.848C53.5922 278.475 52.3889 283.555 51.5689 289.088C50.7689 294.528 50.0622 299.925 49.4489 305.278C45.8889 336.418 40.7589 367.688 40.1089 398.048C39.6822 418.115 42.5555 438.068 48.7289 457.908C57.0789 484.768 71.6889 508.708 92.4189 527.918C99.6455 535.011 106.386 540.555 112.639 544.548C120.992 549.888 128.172 554.048 134.179 557.028C152.646 566.188 172.619 571.811 194.099 573.898C204.712 574.931 216.622 574.575 229.829 572.828C240.356 571.415 249.986 569.291 258.719 566.458C291.679 555.758 320.169 534.368 341.689 507.238C357.689 487.038 368.109 461.898 373.119 436.298C376.719 417.938 377.099 398.938 375.549 380.068C373.189 351.368 369.499 324.108 365.409 293.848C364.422 286.581 363.209 279.731 361.769 273.298C361.729 273.128 361.634 272.976 361.499 272.867C361.365 272.758 361.199 272.699 361.029 272.698ZM175.049 601.798L173.779 601.438C173.706 601.418 173.627 601.42 173.555 601.444C173.482 601.467 173.419 601.512 173.372 601.571C173.326 601.631 173.299 601.702 173.295 601.776C173.29 601.851 173.309 601.925 173.349 601.988C181.216 615.461 186.096 629.798 187.989 644.998C191.409 672.498 189.379 702.208 176.579 727.128C176.519 727.245 176.501 727.378 176.529 727.506C176.556 727.635 176.626 727.75 176.728 727.832C176.831 727.914 176.958 727.959 177.089 727.958L184.889 727.958L212.439 727.998L239.709 727.978C239.797 727.978 239.883 727.947 239.952 727.892C240.021 727.837 240.069 727.76 240.088 727.674C240.108 727.588 240.097 727.497 240.059 727.418C237.179 721.278 233.859 715.348 231.849 708.858C226.049 690.188 225.419 668.538 227.059 648.518C228.539 630.531 233.812 615.041 242.879 602.048C243.406 601.301 243.229 601.051 242.349 601.298C237.362 602.725 232.109 603.628 226.589 604.008C209.329 605.188 192.149 604.451 175.049 601.798ZM222.789 744.938L176.989 744.988L164.659 745.098C164.465 745.098 164.274 745.14 164.1 745.221C163.925 745.302 163.771 745.421 163.649 745.568C156.089 754.508 148.589 762.038 139.249 767.968C138.469 768.461 138.542 768.711 139.469 768.718L156.889 768.828L252.749 768.818C260.109 768.858 267.559 768.855 275.099 768.808C276.206 768.801 277.269 768.665 278.289 768.398C278.709 768.285 278.732 768.118 278.359 767.898C268.546 762.031 260.359 754.481 253.799 745.248C253.572 744.935 253.266 744.781 252.879 744.788ZM86.8189 800.748L255.819 800.808L353.109 800.688C353.226 800.687 353.341 800.651 353.437 800.584C353.534 800.517 353.608 800.422 353.649 800.312C353.69 800.202 353.697 800.082 353.669 799.968C352.002 793.395 347.412 788.538 339.899 785.398L239.059 785.248C221.492 784.995 203.922 784.911 186.349 784.998C151.302 785.178 116.719 785.111 82.5989 784.798C73.5889 784.718 65.6689 791.198 63.5189 799.828C63.4885 799.952 63.4965 800.082 63.5417 800.201C63.5869 800.32 63.6672 800.423 63.7721 800.496C63.8769 800.568 64.0014 800.608 64.1289 800.608Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape1&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6223046875 4.3066710451255)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.17 93.3591L341.7 94.8091C341.347 94.9025 341.043 95.0758 340.79 95.3291C334.81 101.209 327.56 101.079 319.06 100.739C316.15 100.619 313.98 99.6891 312.72 96.9491C310.21 91.4791 305.03 84.9891 298.07 88.5091C296.217 89.4491 294.677 90.6225 293.45 92.0291C288.01 98.2791 282.29 103.559 274.1 105.299C270.267 106.112 266.1 106.416 261.6 106.209C253.04 105.819 244.67 101.199 239.15 94.8491C232.37 87.0391 226.88 84.2491 219.24 92.9691C214.89 97.9391 209.89 101.049 202.97 101.219C196.37 101.379 189.917 101.426 183.61 101.359C182.93 101.352 182.43 100.989 182.11 100.269C182.01 100.04 181.975 99.7876 182.008 99.5391C182.042 99.2906 182.143 99.0554 182.3 98.8591C183.04 97.9325 183.813 97.0725 184.62 96.2791C187.09 93.8491 185.64 89.9291 183.51 87.8291C180.65 85.0091 175.91 85.9891 173.39 88.9391C172.23 90.2925 171.17 91.6391 170.21 92.9791C163.5 102.299 152.67 101.929 142.47 100.679C134.9 99.7591 131.64 94.3891 126.62 89.6591C123.633 86.8525 120.593 86.8391 117.5 89.6191C112.63 93.9791 108.24 99.7591 102.47 102.719C88.07 110.129 72.61 106.679 62.57 94.0391C58.62 89.0591 52.95 85.2191 47.21 90.7591C44.54 93.3491 43.94 96.9991 40.53 99.0891C36.59 101.509 29.55 101.139 24.26 101.029C18.64 100.899 13.25 100.999 9.85 97.1991C7.82 94.9191 4 93.8291 2.11 96.9691C1.02333 98.7691 0.446667 98.6225 0.38 96.5291C0.366667 95.9891 0.24 95.0925 0 93.8391C0.253333 85.8991 3.11667 79.1925 8.59 73.7191C15.9033 66.4058 24.84 63.4458 35.4 64.8391C36.2533 64.9458 36.6367 65.4325 36.55 66.2991C36.0033 71.8391 38.0767 75.8691 42.77 78.3891C46.73 80.5191 51.92 79.4891 55.07 76.3591C59.07 72.3691 59.28 66.6491 62.67 62.1391C69.49 53.0591 78.3867 48.2825 89.36 47.8091C91.4067 47.7225 93.5333 48.0125 95.74 48.6791C96.0733 48.7791 96.3467 48.9658 96.56 49.2391C97.92 50.9291 98.81 52.9691 100.32 54.5791C104.433 58.9525 109.323 60.1158 114.99 58.0691C120.4 56.1291 122.62 50.7691 122.7 45.2291C122.76 40.7958 123.827 36.2291 125.9 31.5291C140.46 -1.44087 182.17 -10.4309 209.26 13.5491C218.34 21.5825 223.667 30.9991 225.24 41.7991C226.4 49.7891 234.22 53.9291 241.37 49.3691C244.58 47.3291 247.13 44.1191 250.47 42.6191C261.863 37.4791 272.687 37.3558 282.94 42.2491C291.293 46.2291 297.263 52.4958 300.85 61.0491C303.07 66.3591 306.13 69.9691 312.5 70.1891C316.767 70.3358 320.273 68.8458 323.02 65.7191C323.166 65.5546 323.357 65.4352 323.571 65.3751C323.785 65.3149 324.014 65.3163 324.23 65.3791C336.65 69.1091 347.03 79.8291 347.17 93.3591Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape2&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6211575655465 7.33540715628013)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.203 7.20842C347.509 15.0284 344.683 21.2384 338.723 25.8384C337.243 26.9851 335.446 27.5718 333.333 27.5984C326.179 27.6784 319.159 27.7518 312.273 27.8184C310.053 27.8384 308.413 26.8684 307.333 24.9584C307.159 24.651 307.07 24.3028 307.074 23.9484C307.077 23.594 307.173 23.2458 307.353 22.9384C309.706 18.9451 308.913 15.9118 304.973 13.8384C302.553 12.5718 300.179 13.0884 297.853 15.3884C293.353 19.8484 286.493 27.5784 279.663 27.5984C270.883 27.6184 261.953 27.6151 252.873 27.5884C246.053 27.5784 239.713 22.4684 235.033 17.5684C231.633 13.9984 228.093 11.2484 222.953 14.3584C219.153 16.6584 218.973 22.2484 221.903 25.1784C222.045 25.3214 222.137 25.5067 222.166 25.706C222.195 25.9053 222.159 26.108 222.062 26.2834C221.966 26.4588 221.815 26.5975 221.633 26.6784C220.199 27.3318 218.603 27.6551 216.843 27.6484C189.723 27.5018 162.073 27.5784 133.893 27.8784C132.419 27.8984 131.099 27.4284 129.933 26.4684C129.567 26.1723 129.332 25.7446 129.278 25.2775C129.224 24.8105 129.355 24.3403 129.643 23.9684C130.393 22.9984 131.193 21.9984 131.193 20.7084C131.199 16.5284 129.253 14.0784 125.353 13.3584C123.123 12.9384 121.363 13.8184 119.863 15.3684C115.523 19.8484 108.003 27.5184 101.323 27.5684C91.976 27.6218 82.8393 27.6051 73.9126 27.5184C68.8426 27.4584 62.8326 22.0584 59.9726 18.4284C56.9226 14.5584 52.8126 11.2584 48.3326 15.6784C45.9126 18.0718 45.646 20.7284 47.5326 23.6484C47.746 23.9818 47.7793 24.3351 47.6326 24.7084C47.0826 26.0584 45.9526 27.6284 44.3126 27.6284C32.766 27.6484 22.5426 27.6451 13.6426 27.6184C10.6026 27.6051 8.0093 26.3851 5.86263 23.9584C1.66263 19.2118 -0.280704 13.7884 0.0326292 7.68842C0.272629 8.94175 0.399296 9.83842 0.412629 10.3784C0.479296 12.4718 1.05596 12.6184 2.14263 10.8184C4.03263 7.67842 7.85263 8.76842 9.88263 11.0484C13.2826 14.8484 18.6726 14.7484 24.2926 14.8784C29.5826 14.9884 36.6226 15.3584 40.5626 12.9384C43.9726 10.8484 44.5726 7.19842 47.2426 4.60842C52.9826 -0.931581 58.6526 2.90842 62.6026 7.88842C72.6426 20.5284 88.1026 23.9784 102.503 16.5684C108.273 13.6084 112.663 7.82842 117.533 3.46842C120.626 0.688419 123.666 0.701752 126.653 3.50842C131.673 8.23842 134.933 13.6084 142.503 14.5284C152.703 15.7784 163.533 16.1484 170.243 6.82842C171.203 5.48842 172.263 4.14175 173.423 2.78842C175.943 -0.161581 180.683 -1.14158 183.543 1.67842C185.673 3.77842 187.123 7.69842 184.653 10.1284C183.846 10.9218 183.073 11.7818 182.333 12.7084C182.175 12.9047 182.074 13.1399 182.041 13.3884C182.007 13.6369 182.043 13.8894 182.143 14.1184C182.463 14.8384 182.963 15.2018 183.643 15.2084C189.949 15.2751 196.403 15.2284 203.003 15.0684C209.923 14.8984 214.923 11.7884 219.273 6.81842C226.913 -1.90158 232.403 0.888419 239.183 8.69842C244.703 15.0484 253.073 19.6684 261.633 20.0584C266.133 20.2651 270.299 19.9618 274.133 19.1484C282.323 17.4084 288.043 12.1284 293.483 5.87842C294.709 4.47175 296.249 3.29842 298.103 2.35842C305.063 -1.16158 310.243 5.32842 312.753 10.7984C314.013 13.5384 316.183 14.4684 319.093 14.5884C327.593 14.9284 334.843 15.0584 340.823 9.17842C341.076 8.92509 341.379 8.75175 341.733 8.65842Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape3&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.7941352600339 9.3230859375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M17.6779 0C16.5513 11.84 15.9213 19.36 15.7879 22.56C15.3079 33.9733 14.6346 46.28 13.7679 59.48C13.6013 62.04 13.1046 63.7467 12.2779 64.6C8.55793 68.45 -0.30207 67.53 0.00793038 61.06C1.34793 33.3133 2.02793 12.9867 2.04793 0.08Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape4&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9413128810975 9.32414062500001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M201.657 0.05C201.63 7.10333 201.687 11.5967 201.827 13.53C203.28 33.53 204.617 53.6 205.837 73.74L186.487 73.78L193.557 73.61C193.714 73.6076 193.867 73.5609 193.998 73.4752C194.129 73.3896 194.234 73.2685 194.299 73.126C194.364 72.9835 194.388 72.8254 194.367 72.67C193.367 64.75 192.894 56.7733 192.947 48.74C196.9 43.82 196.69 38.93 192.317 34.07C191.537 32.47 191.137 31.2867 191.117 30.52C190.984 25.7933 191.01 21.2667 191.197 16.94C191.213 16.5684 191.128 16.1993 190.951 15.872C190.773 15.5446 190.51 15.2711 190.189 15.0807C189.868 14.8902 189.501 14.7897 189.127 14.79L153.317 14.9C152.777 12.9667 151.747 11.28 150.227 9.84C148.927 8.60667 147.257 7.7 145.217 7.12C138.364 5.17333 133.557 7.71667 130.797 14.75C116.39 14.8967 101.944 14.9467 87.4571 14.9C61.1271 14.81 34.7871 15.13 8.5371 15.06C6.00377 15.0533 4.15377 14.7633 2.9871 14.19C0.773767 13.11 -0.209566 11.2233 0.0371003 8.53C0.150434 7.29667 0.770434 4.45333 1.8971 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape5&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.5460546875 9.32519283839548)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M3.69 73.6301L0 0.0700704L9.97 7.03745e-05C10.1004 -0.00175254 10.2289 0.031869 10.3421 0.0974247C10.4553 0.16298 10.5492 0.258107 10.6139 0.372872C10.6786 0.487637 10.7118 0.617903 10.71 0.75007C10.55 11.1234 10.7367 21.0567 11.27 30.5501C12.07 44.8301 12.51 58.8001 13.82 72.9701C13.8293 73.0668 13.8114 73.1643 13.7681 73.2514C13.7249 73.3384 13.6581 73.4116 13.5754 73.4627C13.4926 73.5137 13.3972 73.5405 13.3 73.5401Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape6&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.3825550063776 9.3230859375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M13.7551 0.08C13.7351 12.9867 13.0551 33.3133 11.7151 61.06C11.4051 67.53 20.2651 68.45 23.9851 64.6C24.8118 63.7467 25.3084 62.04 25.4751 59.48C26.3418 46.28 27.0151 33.9733 27.4951 22.56C27.6284 19.36 28.2584 11.84 29.3851 0L46.2351 0.03C45.1084 4.48333 44.4884 7.32667 44.3751 8.56C44.1284 11.2533 45.1118 13.14 47.3251 14.22C48.4918 14.7933 50.3418 15.0833 52.8751 15.09C79.1251 15.16 105.465 14.84 131.795 14.93C146.282 14.9767 160.728 14.9267 175.135 14.78C174.568 20.8133 176.498 24.9267 180.925 27.12C183.338 28.3133 185.805 28.72 188.325 28.34C194.755 27.36 198.095 21.26 197.655 14.93L233.465 14.82C233.839 14.8197 234.206 14.9202 234.527 15.1107C234.848 15.3011 235.111 15.5746 235.289 15.902C235.466 16.2293 235.551 16.5984 235.535 16.97C235.348 21.2967 235.322 25.8233 235.455 30.55C235.475 31.3167 235.875 32.5 236.655 34.1C232.788 31.5133 229.168 30.99 225.795 32.53C211.935 38.83 224.195 59.55 237.285 48.77C237.232 56.8033 237.705 64.78 238.705 72.7C238.726 72.8554 238.702 73.0135 238.637 73.156C238.572 73.2985 238.467 73.4196 238.336 73.5052C238.205 73.5909 238.052 73.6376 237.895 73.64L230.825 73.81L0.605102 73.79C0.205102 73.79 0.00510204 73.59 0.00510204 73.19C-0.0282313 69.6433 0.101769 66.03 0.395102 62.35C2.00177 42.09 2.92177 21.6067 3.1551 0.9C3.16177 0.353333 3.43844 0.08 3.9851 0.08ZM127.005 36.5C127.005 34.413 126.456 32.3624 125.412 30.555C124.369 28.7476 122.867 27.2464 121.06 26.203C119.253 25.1595 117.202 24.61 115.115 24.61C111.963 24.61 108.937 25.8635 106.708 28.0925C104.479 30.3215 103.225 33.3478 103.225 36.5C103.225 39.6522 104.479 42.6785 106.708 44.9075C108.937 47.1365 111.963 48.39 115.115 48.39C117.202 48.39 119.253 47.8405 121.06 46.797C122.867 45.7536 124.369 44.2524 125.412 42.445C126.456 40.6376 127.005 38.587 127.005 36.5ZM75.9704 37.4184C76.0574 34.3019 74.8637 31.2741 72.6541 29.007C70.4445 26.7398 67.3954 25.4143 64.1835 25.3246C62.057 25.2652 59.9523 25.7501 58.0818 26.7303C56.2114 27.7105 54.6403 29.152 53.5271 30.9092C52.414 32.6664 51.7974 34.6782 51.7398 36.7416C51.6528 39.8581 52.8465 42.8859 55.0561 45.153C57.2657 47.4202 60.3148 48.7457 63.5267 48.8354C65.6532 48.8948 67.7579 48.4099 69.6284 47.4297C71.4988 46.4495 73.0699 45.008 74.1831 43.2508C75.2962 41.4936 75.9128 39.4818 75.9704 37.4184ZM183.874 50.7982C183.856 49.4819 183.468 48.1937 182.749 47.0635C182.03 45.9334 181.006 45.0007 179.779 44.3595C178.552 43.7184 177.166 43.3911 175.76 43.4107C173.637 43.4404 171.61 44.2595 170.128 45.6863C168.646 47.1131 167.828 49.0336 167.856 51.0218C167.874 52.3381 168.262 53.6263 168.981 54.7565C169.7 55.8866 170.725 56.8193 171.951 57.4605C173.178 58.1016 174.564 58.4289 175.97 58.4093C178.093 58.3796 180.121 57.5605 181.603 56.1337C183.084 54.7069 183.902 52.7864 183.874 50.7982Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape7&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.0305953125001 9.32554685349047)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.0064 0.0100006L9.3364 6.11826e-07C9.61064 -0.000292647 9.87453 0.104847 10.0721 0.293135C10.2697 0.481423 10.3861 0.738544 10.3964 1.01C11.3097 24.8167 12.6431 48.6333 14.3964 72.46C14.4564 73.2867 14.0697 73.7 13.2364 73.7L4.1864 73.7C2.9664 53.56 1.62973 33.49 0.1764 13.49C0.0364 11.5567 -0.0202667 7.06333 0.0064 0.0100006Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape8&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1631696428572 9.32765624999999)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M10.891 0L14.581 73.56L5.85095 73.67C5.70139 73.6731 5.55452 73.6294 5.43088 73.5452C5.30724 73.461 5.21287 73.3403 5.16095 73.2C4.86095 72.3733 4.66095 71.5033 4.56095 70.59C2.05429 47.6433 0.534286 24.6667 0.000952381 1.66C-0.0257143 0.566667 0.507619 0.02 1.60095 0.02Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape9&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.5362571970961 9.55219950584632)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.6165 8.41299C23.0565 14.743 19.7165 20.843 13.2865 21.823C10.7665 22.203 8.2998 21.7963 5.88646 20.603C1.4598 18.4097 -0.470205 14.2963 0.0964619 8.26299C2.85646 1.22966 7.66313 -1.31367 14.5165 0.632992C16.5565 1.21299 18.2265 2.11966 19.5265 3.35299C21.0465 4.79299 22.0765 6.47966 22.6165 8.41299Z&quot;&gt;&lt;/path&gt; &lt;circle id=&quot;shape10&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.0115625 10.18828125)&quot; r=&quot;11.89&quot; cx=&quot;11.89&quot; cy=&quot;11.89&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape11&quot; transform=&quot;matrix(0.0351425431068875 0.000981620111375468 -0.000981620111375468 0.0351425431068875 14.2130771675543 10.2015061448131)&quot; rx=&quot;12.12&quot; ry=&quot;11.76&quot; cx=&quot;12.12&quot; cy=&quot;11.76&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape12&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 20.1057469902912 10.4364122450525)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M16.9732 2.43205C21.3465 7.29205 21.5565 12.1821 17.6032 17.1021C4.5132 27.8821 -7.7468 7.16205 6.1132 0.862052C9.48653 -0.677948 13.1065 -0.154615 16.9732 2.43205Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape13&quot; transform=&quot;matrix(0.0351528231097021 -0.000490857902548076 0.000490857902548076 0.0351528231097021 18.2800569526222 10.8531762234766)&quot; rx=&quot;8.01&quot; ry=&quot;7.5&quot; cx=&quot;8.01&quot; cy=&quot;7.5&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape14&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.47390625 12.828515625)&quot; fill=&quot;rgb(213,188,38)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0 300.33C1.52 298.69 3.53 298.057 6.03 298.43C6.10297 298.443 6.17377 298.447 6.24 298.44C6.65333 298.413 6.88667 298.26 6.94 297.98C7 297.66 7.19333 297.493 7.52 297.48L10.29 297.39C10.4233 297.383 10.5567 297.367 10.69 297.34C11.0167 297.267 11.1733 297.127 11.16 296.92C11.1467 296.7 11.2467 296.563 11.46 296.51C12.1467 296.337 12.7433 295.997 13.25 295.49C13.49 295.257 13.58 294.973 13.52 294.64C13.1333 292.653 12.8767 290.647 12.75 288.62C12.69 287.79 12.27 287.35 11.7 286.83C11.4533 286.603 11.3933 286.337 11.52 286.03C11.8533 285.197 11.6767 284.573 10.99 284.16C10.7367 284 10.46 283.923 10.16 283.93L6.56 284.02C15.1 281.92 21.0833 280.04 24.51 278.38C27.5033 276.927 30.4033 275.357 33.21 273.67C33.319 273.603 33.3974 273.495 33.4282 273.371C33.4589 273.246 33.4397 273.115 33.3746 273.004C33.3096 272.894 33.2037 272.813 33.08 272.78C32.5067 272.62 31.9433 272.67 31.39 272.93C63.5767 260.003 88.4967 238.95 106.15 209.77C109.223 204.703 112.093 199 114.76 192.66C118.06 184.807 120.343 178.587 121.61 174C123.097 168.613 124.457 162.397 125.69 155.35C126.657 149.857 126.873 144.25 126.34 138.53C127.853 138.57 128.907 138.097 129.5 137.11C131.56 133.67 131.433 130.473 129.12 127.52C128.24 126.39 127.07 126.39 125.77 126.38C120.017 126.347 114.427 126.37 109 126.45C108.613 125.77 108.27 125.09 107.97 124.41C107.69 123.77 107.527 123.037 107.48 122.21C106.953 112.977 106.213 103.723 105.26 94.45C110.127 94.5633 114.617 94.5833 118.73 94.51C121.27 94.47 123.93 94.86 126 93.31C128.053 91.77 128.717 89.61 127.99 86.83C127.23 83.89 124.98 82.2967 121.24 82.05L120.9 72.32C124.973 70.3667 126.23 67.5767 124.67 63.95C123.697 61.6833 121.82 60.52 119.04 60.46C117.273 58.24 116.223 56.5633 115.89 55.43C113.43 47.1033 110.547 38.9133 107.24 30.86C106.947 30.1467 107 29.0333 107.4 27.52C109.087 27.4933 110.883 27.5267 112.79 27.62C115.45 27.7533 117.403 26.9667 118.65 25.26C121.02 22.01 120.02 17.98 116.55 16.23C115.597 15.75 114.193 15.5133 112.34 15.52C107.533 15.54 102.823 15.4767 98.21 15.33C97.6033 13.9433 96.9433 12.6033 96.23 11.31C94.38 7.96 93.99 4.82 92.56 1.46C92.4467 1.18667 92.5067 0.963333 92.74 0.79L93.19 0.46C93.4567 0.273333 93.4267 0.176667 93.1 0.17L55.31 0L131.2 0.2C131.371 0.200762 131.536 0.26037 131.671 0.369176C131.805 0.477981 131.9 0.629779 131.94 0.8C133.38 7.23333 134.593 14.0833 135.58 21.35C139.67 51.61 143.36 78.87 145.72 107.57C147.27 126.44 146.89 145.44 143.29 163.8C138.28 189.4 127.86 214.54 111.86 234.74C90.34 261.87 61.85 283.26 28.89 293.96C20.1567 296.793 10.5267 298.917 0 300.33Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape15&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.2758764491296 12.828515625)&quot; fill=&quot;rgb(248,247,83)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M231.61 0L269.4 0.17C269.726 0.176667 269.756 0.273333 269.49 0.46L269.04 0.79C268.806 0.963333 268.746 1.18667 268.86 1.46C270.29 4.82 270.68 7.96 272.53 11.31C273.243 12.6033 273.903 13.9433 274.51 15.33C268.76 17.07 269.07 27.78 275.82 27.53C278.38 27.43 281.006 27.4267 283.7 27.52C283.3 29.0333 283.246 30.1467 283.54 30.86C286.846 38.9133 289.73 47.1033 292.19 55.43C292.523 56.5633 293.573 58.24 295.34 60.46C290.98 60.76 286.806 61.0267 282.82 61.26C277.7 61.56 274.45 67.2 278.08 71.26C278.86 72.1333 280.413 72.6 282.74 72.66C287.386 72.7733 292.206 72.66 297.2 72.32L297.54 82.05C293.013 81.9567 288.443 81.9633 283.83 82.07C281.84 82.11 280.61 82.75 279.5 84.26C276.44 88.44 277.126 91.8367 281.56 94.45C282.513 103.723 283.253 112.977 283.78 122.21C283.826 123.037 283.99 123.77 284.27 124.41C284.57 125.09 284.913 125.77 285.3 126.45C282.193 127.497 280.633 129.463 280.62 132.35C280.613 134.79 281.763 136.753 284.07 138.24C281.93 156.593 277.493 173.123 270.76 187.83C261.606 207.817 247.22 225.063 227.6 239.57C218.546 246.263 208.406 252.023 197.18 256.85C191.52 259.28 187.21 264.45 191.61 270.42C195.03 275.03 202.58 274.56 207.69 272.93C208.243 272.67 208.806 272.62 209.38 272.78C209.503 272.813 209.609 272.894 209.674 273.004C209.739 273.115 209.758 273.246 209.728 273.371C209.697 273.495 209.619 273.603 209.51 273.67C206.703 275.357 203.803 276.927 200.81 278.38C197.383 280.04 191.4 281.92 182.86 284.02C165.386 287.427 148.786 288.113 133.06 286.08C116.433 283.94 99.2895 279.17 81.6295 271.77C75.1162 269.043 68.6828 266.14 62.3295 263.06C54.3762 259.2 46.8962 254.463 39.8895 248.85C40.5695 248.377 41.3595 247.947 42.2595 247.56C44.5695 246.55 46.3695 244.3 44.1695 241.99C29.1962 226.303 18.1928 209.247 11.1595 190.82C1.95285 166.687 -1.55715 141.62 0.629514 115.62C2.01618 99.0867 3.45618 82.5733 4.94951 66.08C5.49618 59.9533 6.20618 53.32 7.07951 46.18C8.95285 30.8733 10.7762 15.5733 12.5495 0.28ZM230.747 11.7302C228.758 9.7412 226.058 8.62261 223.245 8.62261C220.432 8.62261 217.731 9.7412 215.742 11.7302L213.89 13.5829C211.901 15.5719 210.782 18.2724 210.782 21.0853C210.782 23.8982 211.901 26.5987 213.89 28.5877L215.092 29.7898C217.081 31.7788 219.781 32.8974 222.594 32.8974C225.407 32.8974 228.108 31.7788 230.097 29.7898L231.949 27.9371C233.938 25.9481 235.057 23.2476 235.057 20.4347C235.057 17.6218 233.938 14.9213 231.949 12.9323ZM47.1595 186.78C39.7128 170.84 35.7195 154.833 35.1795 138.76C34.9528 131.94 35.0895 124.72 35.5895 117.1C37.1495 93.44 39.2662 67.4833 41.9395 39.23C42.3395 35.0167 42.6262 30.7267 42.7995 26.36C43.4195 10.9 25.2095 12.45 24.4195 25.69C23.0462 48.79 21.1195 72.2233 18.6395 95.99C17.6595 105.337 16.9995 114.63 16.6595 123.87C16.3328 132.65 16.6595 140.653 17.6395 147.88C19.5062 161.707 22.9728 175.147 28.0395 188.2C29.1795 191.153 30.6662 194.07 32.4995 196.95C35.2995 201.37 41.5395 202.72 45.3395 198.89C48.7328 195.483 49.3395 191.447 47.1595 186.78ZM87.1943 37.8021C86.8236 36.4743 85.902 35.3574 84.6342 34.6994C83.3663 34.0413 81.8534 33.8945 80.4311 34.2916C79.0088 34.6887 77.7908 35.598 77.0472 36.8177C76.3037 38.0374 76.094 39.4701 76.4647 40.7979C76.8355 42.1257 77.757 43.2426 79.0249 43.9006C80.2927 44.5587 81.8056 44.7055 83.2279 44.3084C84.6502 43.9113 85.8682 43.002 86.6118 41.7823C87.3554 40.5626 87.565 39.1299 87.1943 37.8021ZM242.9 63.3691C242.905 60.5116 242.14 57.7024 240.682 55.2252C239.224 52.7479 237.124 50.6888 234.594 49.2556C232.064 47.8225 229.192 47.0651 226.268 47.06C223.344 47.0549 220.469 47.8022 217.934 49.2266C215.399 50.6509 213.292 52.7027 211.826 55.1748C210.359 57.6469 209.585 60.4534 209.58 63.3109C209.575 66.1684 210.34 68.9776 211.797 71.4548C213.255 73.9321 215.355 75.9912 217.885 77.4244C220.415 78.8575 223.287 79.6149 226.211 79.62C229.135 79.6251 232.01 78.8778 234.545 77.4534C237.08 76.0291 239.187 73.9773 240.653 71.5052C242.12 69.0331 242.895 66.2266 242.9 63.3691ZM85.9041 71.8823C88.1531 72.912 90.7367 72.9736 93.0816 72.0534C95.4266 71.1333 97.3455 69.3049 98.4127 66.9739C99.1193 65.4306 99.4215 63.7348 99.2889 62.0574C99.1563 60.38 98.5935 58.7796 97.6572 57.4176C96.721 56.0556 95.4439 54.9794 93.9549 54.2977C91.7059 53.268 89.1223 53.2064 86.7774 54.1266C84.4325 55.0467 82.5135 56.8751 81.4463 59.2061C80.7398 60.7494 80.4375 62.4452 80.5701 64.1226C80.7028 65.8 81.2656 67.4004 82.2018 68.7624C83.1381 70.1244 84.4151 71.2006 85.9041 71.8823ZM60.6086 105.171C63.2448 106.638 66.3725 106.974 69.2978 106.105C72.223 105.236 74.7122 103.231 76.213 100.535C77.7138 97.8381 78.1063 94.6659 77.3035 91.7217C76.5007 88.7775 74.5666 86.2966 71.9304 84.8293C69.2942 83.362 66.1665 83.0257 63.2413 83.8948C60.316 84.7639 57.8268 86.7691 56.326 89.4655C54.8252 92.1619 54.4327 95.3341 55.2355 98.2783C56.0384 101.222 57.9724 103.703 60.6086 105.171ZM187.08 98.11C187.08 96.1959 186.318 94.3582 184.965 93.0047C183.611 91.6512 181.774 90.89 179.86 90.89C177.945 90.89 176.108 91.6512 174.754 93.0047C173.401 94.3582 172.64 96.1959 172.64 98.11C172.64 100.024 173.401 101.862 174.754 103.215C176.108 104.569 177.945 105.33 179.86 105.33C181.127 105.33 182.372 104.996 183.47 104.363C184.567 103.729 185.479 102.817 186.112 101.72C186.746 100.623 187.08 99.3773 187.08 98.11ZM234.564 99.0027C233.705 97.863 232.551 96.9774 231.217 96.4351C229.883 95.8929 228.416 95.7129 226.964 95.9133C225.513 96.1138 224.127 96.6877 222.947 97.5771C221.766 98.4665 220.833 99.6405 220.24 100.981C219.647 102.321 219.416 103.78 219.57 105.212C219.723 106.644 220.256 107.998 221.115 109.137C221.974 110.277 223.128 111.163 224.462 111.705C225.796 112.247 227.263 112.427 228.715 112.227C230.166 112.026 231.552 111.452 232.732 110.563C233.913 109.673 234.846 108.499 235.439 107.159C236.032 105.819 236.263 104.36 236.109 102.928C235.956 101.496 235.423 100.142 234.564 99.0027ZM47.9695 214.56C45.1695 220.83 50.0195 225.32 54.0495 229.45C57.6895 233.19 61.8995 236.09 66.6995 232.86C71.8895 229.38 72.0595 223.24 67.9795 218.66C64.2095 214.41 60.6395 209.6 54.3295 209.99C51.4095 210.17 49.1195 211.99 47.9695 214.56Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape16&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.8026079545455 12.838359375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M26.0114 0C24.238 15.2933 22.4147 30.5933 20.5414 45.9C19.668 53.04 18.958 59.6733 18.4114 65.8C16.918 82.2933 15.478 98.8067 14.0914 115.34C11.9047 141.34 15.4147 166.407 24.6214 190.54C31.6547 208.967 42.658 226.023 57.6314 241.71C59.8314 244.02 58.0314 246.27 55.7214 247.28C54.8214 247.667 54.0314 248.097 53.3514 248.57C51.9014 250.07 52.3314 253.14 52.3514 255.14C31.6214 235.93 17.0114 211.99 8.66137 185.13C2.48804 165.29 -0.385293 145.337 0.0413737 125.27C0.691374 94.91 5.82137 63.64 9.38137 32.5C9.99471 27.1467 10.7014 21.75 11.5014 16.31C12.3214 10.7767 13.5247 5.69667 15.1114 1.07C15.2107 0.778294 15.3987 0.524438 15.6494 0.343583C15.9001 0.162728 16.2013 0.0636261 16.5114 0.06Z&quot;&gt;&lt;/path&gt; &lt;rect id=&quot;shape17&quot; transform=&quot;matrix(0.0248592227760896 -0.0248592227760896 0.0248592227760896 0.0248592227760896 19.531681996495 13.569794617477)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; width=&quot;23.84&quot; height=&quot;22.92&quot; rx=&quot;10.61&quot; ry=&quot;10.61&quot;&gt;&lt;/rect&gt; &lt;path id=&quot;shape18&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.857255859375 13.3649990428515)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M30.6225 171.52C32.8025 176.187 32.1958 180.223 28.8025 183.63C25.0025 187.46 18.7625 186.11 15.9625 181.69C14.1292 178.81 12.6425 175.893 11.5025 172.94C6.43583 159.887 2.96917 146.447 1.1025 132.62C0.1225 125.393 -0.204167 117.39 0.1225 108.61C0.4625 99.37 1.1225 90.0767 2.1025 80.73C4.5825 56.9634 6.50917 33.53 7.8825 10.43C8.6725 -2.80997 26.8825 -4.35997 26.2625 11.1C26.0892 15.4667 25.8025 19.7567 25.4025 23.97C22.7292 52.2234 20.6125 78.18 19.0525 101.84C18.5525 109.46 18.4158 116.68 18.6425 123.5C19.1825 139.573 23.1758 155.58 30.6225 171.52Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape19&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.7841415488515 13.3674609375)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.0522 0C8.66553 0.146667 13.3755 0.21 18.1822 0.19C20.0355 0.183333 21.4389 0.42 22.3922 0.9C25.8622 2.65 26.8622 6.68 24.4922 9.93C23.2455 11.6367 21.2922 12.4233 18.6322 12.29C16.7255 12.1967 14.9289 12.1633 13.2422 12.19C10.5489 12.0967 7.9222 12.1 5.3622 12.2C-1.3878 12.45 -1.6978 1.74 4.0522 0Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape20&quot; transform=&quot;matrix(0.0338611839889802 -0.00945421244350544 0.00945421244350544 0.0338611839889802 14.9149266129752 14.0867380565676)&quot; rx=&quot;5.57&quot; ry=&quot;5.2&quot; cx=&quot;5.57&quot; cy=&quot;5.2&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape21&quot; transform=&quot;matrix(0.0351561964539828 6.13592003636124e-05 -6.13592003636124e-05 0.0351561964539828 19.6449060698586 14.4819473774511)&quot; rx=&quot;16.66&quot; ry=&quot;16.28&quot; cx=&quot;16.66&quot; cy=&quot;16.28&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape22&quot; transform=&quot;matrix(-0.0146348716029047 0.031965331958686 -0.031965331958686 -0.0146348716029047 15.8772166930746 14.8739620295146)&quot; rx=&quot;9.67&quot; ry=&quot;9.33&quot; cx=&quot;9.67&quot; cy=&quot;9.33&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape23&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.997793706651 14.9540625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M18.805 0C21.585 0.06 23.4616 1.22333 24.435 3.49C25.995 7.11667 24.7383 9.90667 20.665 11.86C15.6716 12.2 10.8516 12.3133 6.20498 12.2C3.87831 12.14 2.32498 11.6733 1.54498 10.8C-2.08502 6.74 1.16498 1.1 6.28498 0.8C10.2716 0.566667 14.445 0.3 18.805 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape24&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.0361349190606 15.7107890625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M19.9144 0.0653333C23.6544 0.312 25.9044 1.90533 26.6644 4.84533C27.3911 7.62533 26.7277 9.78533 24.6744 11.3253C22.6044 12.8753 19.9444 12.4853 17.4044 12.5253C13.2911 12.5987 8.80105 12.5787 3.93438 12.4653C-0.498949 9.852 -1.18562 6.45533 1.87438 2.27533C2.98438 0.765333 4.21438 0.125333 6.20438 0.0853333C10.8177 -0.0213333 15.3877 -0.028 19.9144 0.0653333Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape25&quot; transform=&quot;matrix(-0.0170977282180133 0.0307185547160906 -0.0307185547160906 -0.0170977282180133 15.1542587716268 16.0053675452257)&quot; rx=&quot;11.64&quot; ry=&quot;11.38&quot; cx=&quot;11.64&quot; cy=&quot;11.38&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;circle id=&quot;shape26&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.345234375 16.0238671875)&quot; r=&quot;7.22&quot; cx=&quot;7.22&quot; cy=&quot;7.22&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape27&quot; transform=&quot;matrix(0.0280770296501001 -0.0211575594076892 0.0211575594076892 0.0280770296501001 19.8774398273616 16.4371069616574)&quot; rx=&quot;8.42&quot; ry=&quot;8.13&quot; cx=&quot;8.42&quot; cy=&quot;8.13&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape28&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1414052368516 17.2710454963236)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.02 12.1647L3.45003 11.8747C1.14336 10.388 -0.00663785 8.42471 2.88184e-05 5.98471C0.0133622 3.09804 1.57336 1.13137 4.68003 0.0847059C10.1067 0.00470588 15.6967 -0.0186275 21.45 0.0147059C22.75 0.0247059 23.92 0.0247059 24.8 1.15471C27.1134 4.10804 27.24 7.30471 25.18 10.7447C24.5867 11.7314 23.5334 12.2047 22.02 12.1647Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape29&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.9485123620206 17.688515625)&quot; fill=&quot;rgb(236,230,26)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M94.2701 0L112.84 0.29C113.373 6.01 113.157 11.6167 112.19 17.11C110.957 24.1567 109.597 30.3733 108.11 35.76C106.843 40.3467 104.56 46.5667 101.26 54.42C98.5934 60.76 95.7234 66.4633 92.6501 71.53C74.9968 100.71 50.0768 121.763 17.8901 134.69C12.7801 136.32 5.23009 136.79 1.81009 132.18C-2.58991 126.21 1.72009 121.04 7.38009 118.61C18.6068 113.783 28.7468 108.023 37.8001 101.33C57.4201 86.8233 71.8068 69.5767 80.9601 49.59C87.6934 34.8833 92.1301 18.3533 94.2701 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape30&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9331058615201 20.210194296345)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.830544 4.59225C1.98054 2.02225 4.27054 0.202251 7.19054 0.0222511C13.5005 -0.367749 17.0705 4.44225 20.8405 8.69225C24.9205 13.2723 24.7505 19.4123 19.5605 22.8923C14.7605 26.1223 10.5505 23.2223 6.91054 19.4823C2.88054 15.3523 -1.96946 10.8623 0.830544 4.59225Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape31&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.6404577789765 21.5771484375)&quot; fill=&quot;rgb(236,230,26)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.07476 0C8.08142 5.61333 15.5614 10.35 23.5148 14.21C29.8681 17.29 36.3014 20.1933 42.8148 22.92C60.4748 30.32 77.6181 35.09 94.2448 37.23C109.971 39.2633 126.571 38.5767 144.045 35.17L147.645 35.08C147.945 35.0733 148.221 35.15 148.475 35.31C149.161 35.7233 149.338 36.3467 149.005 37.18C148.878 37.4867 148.938 37.7533 149.185 37.98C149.755 38.5 150.175 38.94 150.235 39.77C150.361 41.7967 150.618 43.8033 151.005 45.79C151.065 46.1233 150.975 46.4067 150.735 46.64C150.228 47.1467 149.631 47.4867 148.945 47.66C148.731 47.7133 148.631 47.85 148.645 48.07C148.658 48.2767 148.501 48.4167 148.175 48.49C148.041 48.5167 147.908 48.5333 147.775 48.54L145.005 48.63C144.678 48.6433 144.485 48.81 144.425 49.13C144.371 49.41 144.138 49.5633 143.725 49.59C143.659 49.5967 143.588 49.5933 143.515 49.58C141.015 49.2067 139.005 49.84 137.485 51.48C124.278 53.2267 112.368 53.5833 101.755 52.55C80.2748 50.4633 60.3014 44.84 41.8348 35.68C35.8281 32.7 28.6481 28.54 20.2948 23.2C14.0414 19.2067 7.30142 13.6633 0.0747565 6.57C0.0547565 4.57 -0.375243 1.5 1.07476 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape32&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.548046875 24.3846604970638)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M37.39 126.792L36.84 125.732C36.6867 125.445 36.61 125.139 36.61 124.812L36.29 50.1519C39.97 50.1319 42.74 50.0419 44.93 47.3519C46.0567 45.9652 46.4067 44.4152 45.98 42.7019C44.81 38.0219 40.08 37.5119 35.72 37.6019L35.91 26.2919C40.16 26.9019 44.77 27.8519 48.81 25.9619C52.26 24.3519 53.31 20.2319 50.85 17.2519C48.51 14.4319 45.36 14.2119 41.99 14.2719C35.7567 14.3852 29.3167 14.4052 22.67 14.3319C19.49 14.3019 16.81 15.9619 15.14 18.6319C15.2 16.6619 12.86 15.6819 11.44 14.7519C10.6133 14.2119 9.90667 13.5852 9.32 12.8719C6.57333 9.53188 3.78 6.23188 0.94 2.97188C0.46 2.41855 0.146667 1.62521 0 0.591879C17.1 3.24521 34.28 3.98188 51.54 2.80188C57.06 2.42188 62.3133 1.51855 67.3 0.0918792C68.18 -0.154787 68.3567 0.0952125 67.83 0.841879C58.7633 13.8352 53.49 29.3252 52.01 47.3119C50.37 67.3319 51 88.9819 56.8 107.652C58.81 114.142 62.13 120.072 65.01 126.212C65.0485 126.291 65.0589 126.382 65.0394 126.468C65.02 126.554 64.9718 126.631 64.9029 126.686C64.834 126.741 64.7483 126.772 64.66 126.772Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape33&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.486355851717 24.3923298330305)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.75477 0.373729C1.90143 1.40706 2.21477 2.2004 2.69477 2.75373C5.53477 6.01373 8.3281 9.31373 11.0748 12.6537C11.6614 13.3671 12.3681 13.9937 13.1948 14.5337C14.6148 15.4637 16.9548 16.4437 16.8948 18.4137L16.5848 19.0537C15.9714 19.3604 15.6748 19.8204 15.6948 20.4337C15.8148 23.3437 16.3448 26.1237 18.0248 28.6937C19.9714 31.6737 22.1714 34.5471 24.6248 37.3137C19.6548 39.6737 18.5548 46.9937 24.3448 49.3137C24.1981 53.2071 24.2048 57.1237 24.3648 61.0637C24.5581 65.7371 24.5748 69.6437 24.4148 72.7837C24.2014 77.0371 23.9914 81.3304 23.7848 85.6637C23.1248 99.8304 19.6748 113.244 13.4348 125.904C13.2814 126.21 13.0314 126.384 12.6848 126.424L11.5948 126.534L3.79477 126.534C3.66373 126.534 3.5364 126.49 3.43437 126.408C3.33234 126.325 3.26171 126.21 3.23447 126.082C3.20722 125.954 3.22499 125.82 3.28477 125.704C16.0848 100.784 18.1148 71.0737 14.6948 43.5737C12.8014 28.3737 7.92143 14.0371 0.0547669 0.563729C0.0152725 0.50031 -0.00361813 0.426609 0.000572506 0.352292C0.00476314 0.277975 0.0318434 0.20644 0.0782619 0.147067C0.12468 0.0876949 0.188315 0.0431997 0.26082 0.0194171C0.333326 -0.0043654 0.411387 -0.00634806 0.484767 0.0137292Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape34&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.0617214476865 24.8861307529877)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M21.2988 12.0278C16.7455 11.8878 12.1288 11.8545 7.44881 11.9278C4.74215 11.9678 2.94548 11.7312 2.05881 11.2178C0.238812 10.1645 -0.374521 8.0945 0.218812 5.00784L0.528812 4.36784C2.19881 1.69784 4.87881 0.0378364 8.05881 0.0678364C14.7055 0.14117 21.1455 0.12117 27.3788 0.00783636C30.7488 -0.0521636 33.8988 0.167836 36.2388 2.98784C38.6988 5.96784 37.6488 10.0878 34.1988 11.6978C30.1588 13.5878 25.5488 12.6378 21.2988 12.0278Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape35&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.038091694079 25.0621875000001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.890947 0C0.297614 3.08667 0.910947 5.15667 2.73095 6.21C3.61761 6.72333 5.41428 6.96 8.12095 6.92C12.8009 6.84667 17.4176 6.88 21.9709 7.02L21.7809 18.33L8.93095 18.26C6.47761 15.4933 4.27761 12.62 2.33095 9.64C0.650947 7.07 0.120947 4.29 0.000947368 1.38C-0.0190526 0.766667 0.277614 0.306667 0.890947 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape36&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.2047130847683 25.704140625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.19149 0L17.0415 0.07C21.4015 -0.02 26.1315 0.49 27.3015 5.17C27.7282 6.88333 27.3782 8.43333 26.2515 9.82C24.0615 12.51 21.2915 12.6 17.6115 12.62L3.91149 12C-1.87851 9.68 -0.778506 2.36 4.19149 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape37&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.893984375 26.126015625)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M12.75 0L26.45 0.62L26.77 75.28C26.77 75.6067 26.8467 75.9133 27 76.2L27.55 77.26L0 77.22L1.09 77.11C1.43667 77.07 1.68667 76.8967 1.84 76.59C8.08 63.93 11.53 50.5167 12.19 36.35C12.3967 32.0167 12.6067 27.7233 12.82 23.47C12.98 20.33 12.9633 16.4233 12.77 11.75C12.61 7.81 12.6033 3.89333 12.75 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape38&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.22640625 29.4324536132813)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M29.96 24.0302C30.7067 23.5835 30.1467 23.1702 28.28 22.7902C27.96 22.7235 27.6733 22.5835 27.42 22.3702C24.9333 20.2235 22.8967 18.7069 21.31 17.8202C12.91 13.1069 5.80667 7.21687 0 0.150208L30.09 0.000208333C30.4767 -0.00645833 30.7833 0.146875 31.01 0.460208C37.57 9.69354 45.7567 17.2435 55.57 23.1102C55.9433 23.3302 55.92 23.4969 55.5 23.6102C54.48 23.8769 53.4167 24.0135 52.31 24.0202C44.77 24.0669 37.32 24.0702 29.96 24.0302Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape39&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.2706541442871 29.4394921875)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M38.2747 0C35.2147 4.74667 31.2681 10.0433 26.4347 15.89C23.4547 19.49 20.7014 22.14 18.1747 23.84L0.754727 23.73C-0.17194 23.7233 -0.245273 23.4733 0.534727 22.98C9.87473 17.05 17.3747 9.52 24.9347 0.58C25.0571 0.432797 25.211 0.314351 25.3856 0.233119C25.5601 0.151886 25.7511 0.109846 25.9447 0.11Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape40&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.909609375 29.437734375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M65.9 0C71.7067 7.06667 78.81 12.9567 87.21 17.67C88.7967 18.5567 90.8333 20.0733 93.32 22.22C93.5733 22.4333 93.86 22.5733 94.18 22.64C96.0467 23.02 96.6067 23.4333 95.86 23.88L0 23.89C2.52667 22.19 5.28 19.54 8.26 15.94C13.0933 10.0933 17.04 4.79667 20.1 0.05Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape41&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.6264334548969 30.8390367406574)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M175.558 0.450733C176.245 0.450733 176.568 0.567399 176.528 0.800733C176.494 1.0303 176.388 1.24303 176.226 1.40826C176.065 1.5735 175.855 1.68291 175.628 1.72073C171.935 2.3474 168.581 2.65073 165.568 2.63073C163.998 2.62073 162.798 3.35073 161.188 3.18073C160.808 3.14073 160.445 3.20407 160.098 3.37073L158.488 4.16073C158.195 4.30073 157.958 4.50407 157.778 4.77073C157.045 5.85073 156.111 6.47073 154.978 6.63073C153.258 6.87073 151.491 6.99073 149.678 6.99073C111.858 6.8974 73.5681 6.84073 34.8081 6.82073C28.6781 6.82073 24.4281 9.63073 23.3181 15.9507L0.628115 15.8107C0.50059 15.8104 0.376138 15.7713 0.2713 15.6987C0.166463 15.626 0.0861025 15.5233 0.0409006 15.404C-0.00430136 15.2848 -0.0122487 15.1546 0.0181151 15.0307C2.16812 6.40073 10.0881 -0.0792673 19.0981 0.00073271C53.2181 0.314066 87.8014 0.380733 122.848 0.200733C140.421 0.114066 157.991 0.197399 175.558 0.450733Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape42&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.4462109375 30.8548828125)&quot; fill=&quot;rgb(248,247,83)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M152.24 0L253.08 0.15C253.047 2.17 252.56 3.72667 251.62 4.82C250.867 5.69333 249.93 6.13667 248.81 6.15C221.383 6.39 194.363 6.58667 167.75 6.74C167.283 6.74 167.03 6.97333 166.99 7.44C166.87 8.95333 167.113 10.3433 167.72 11.61C167.847 11.8833 167.89 12.1667 167.85 12.46L167.63 14.18C167.577 14.5867 167.74 14.86 168.12 15C168.573 15.1667 168.867 15.3533 169 15.56L0 15.5C1.11 9.18 5.36 6.37 11.49 6.37C50.25 6.39 88.54 6.44667 126.36 6.54C128.173 6.54 129.94 6.42 131.66 6.18C132.793 6.02 133.727 5.4 134.46 4.32C134.64 4.05333 134.877 3.85 135.17 3.71L136.78 2.92C137.127 2.75333 137.49 2.69 137.87 2.73C139.48 2.9 140.68 2.17 142.25 2.18C145.263 2.2 148.617 1.89667 152.31 1.27C152.537 1.23218 152.746 1.12277 152.908 0.957532C153.07 0.792295 153.175 0.579568 153.21 0.35C153.25 0.116667 152.927 -1.13687e-13 152.24 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape43&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 19.3159081135321 30.86015625)&quot; fill=&quot;rgb(236,230,26)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M86.1197 0C93.6331 3.14 98.2231 7.99667 99.8897 14.57C99.9181 14.684 99.9111 14.804 99.8698 14.914C99.8285 15.024 99.7547 15.1189 99.6583 15.186C99.5618 15.2532 99.4472 15.2894 99.3297 15.29L2.03972 15.41C1.90639 15.2033 1.61306 15.0167 1.15972 14.85C0.779725 14.71 0.616391 14.4367 0.669725 14.03L0.889725 12.31C0.929725 12.0167 0.886391 11.7333 0.759725 11.46C0.153058 10.1933 -0.0902752 8.80333 0.0297248 7.29C0.0697248 6.82333 0.323058 6.59 0.789725 6.59C27.4031 6.43667 54.4231 6.24 81.8497 6C82.9697 5.98667 83.9064 5.54333 84.6597 4.67C85.5997 3.57667 86.0864 2.02 86.1197 0Z&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt;&lt;div class=&quot;w-16 h-16&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;fill-[${rgbColor} w-16 h-16&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 36 36&quot;&gt; &lt;defs&gt;&lt;/defs&gt; &lt;path id=&quot;shape0&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 10.393984646722 3.24851063866497)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M384.119 800.308C389.392 800.401 395.079 800.381 401.179 800.248C405.299 800.161 408.469 800.568 410.689 801.468C415.949 803.598 420.779 810.198 420.289 816.268C419.669 823.858 412.349 829.318 404.999 829.328C277.499 829.355 146.952 829.355 13.3589 829.328C8.63888 829.328 4.09888 825.978 1.87888 822.058C-2.73112 813.888 1.52888 803.918 10.4389 801.028C11.9855 800.528 13.9555 800.285 16.3489 800.298C22.1289 800.338 27.6889 800.265 33.0289 800.078C33.1769 800.076 33.3188 800.017 33.4263 799.913C33.5337 799.809 33.5989 799.668 33.6089 799.518C33.7489 797.391 34.0889 795.351 34.6289 793.398C38.5755 779.138 46.7822 768.285 59.2489 760.838C67.2389 756.068 77.9989 753.418 87.8689 753.798C91.7089 753.938 95.6189 754.578 99.3589 753.338C121.612 745.945 138.126 732.518 148.899 713.058C160.649 691.848 162.149 664.098 156.689 640.298C150.949 615.338 135.539 594.358 113.659 581.418C104.759 576.151 97.1322 571.378 90.7789 567.098C79.8722 559.751 69.4389 550.391 59.4789 539.018C41.7922 518.825 28.7222 496.301 20.2689 471.448C13.2089 450.695 9.41555 429.945 8.88888 409.198C8.39555 389.938 9.51888 370.588 12.2589 351.148C15.7689 326.188 18.7489 301.968 22.2689 277.258C23.1955 270.798 23.9055 264.308 24.3989 257.788C25.2922 245.915 26.1489 234.441 26.9689 223.368C28.2189 206.548 28.2189 189.968 28.2289 172.948C28.229 172.665 28.1641 172.386 28.0392 172.133C27.9143 171.88 27.7328 171.659 27.5089 171.488C4.71888 154.278 -3.35112 123.728 10.2489 97.8679C21.8189 75.8479 44.3589 62.0579 69.5789 63.3579C72.9922 63.5379 76.3389 64.1179 79.6189 65.0979C79.7826 65.1468 79.9567 65.1513 80.1235 65.1109C80.2903 65.0705 80.4439 64.9867 80.5689 64.8679C95.3422 50.8279 113.322 44.9613 134.509 47.2679C134.656 47.2852 134.804 47.2536 134.932 47.1778C135.061 47.102 135.161 46.9862 135.219 46.8479C136.972 42.6213 139.372 38.5079 142.419 34.5079C153.299 20.2379 166.749 9.32792 184.089 3.97792C204.569 -2.34875 224.312 -1.12875 243.319 7.63792C258.599 14.6779 272.559 26.6579 280.469 41.6579C280.596 41.9046 280.792 41.9846 281.059 41.8979C289.839 38.9646 299.389 37.9446 309.709 38.8379C326.729 40.3079 342.309 50.4379 353.989 63.2879C354.516 63.8679 355.166 64.1746 355.939 64.2079C361.419 64.4546 366.656 65.5513 371.649 67.4979C392.199 75.5079 406.519 91.1379 411.669 112.968C413.189 119.421 413.456 125.841 412.469 132.228C409.882 148.975 401.956 162.205 388.689 171.918C387.729 172.628 387.729 173.468 387.719 174.528C387.586 191.895 387.899 207.108 388.659 220.168C389.549 235.238 390.999 253.908 393.189 270.758C396.622 297.205 400.169 324.231 403.829 351.838C404.689 358.351 405.536 366.615 406.369 376.628C407.042 384.655 407.406 391.321 407.459 396.628C407.679 420.268 404.476 443.035 397.849 464.928C386.419 502.718 363.929 536.538 333.029 561.268C324.009 568.498 312.959 575.088 302.869 581.488C297.502 584.888 292.979 588.131 289.299 591.218C265.139 611.508 255.039 640.758 256.429 672.398C258.039 709.018 277.959 738.488 312.639 751.718C317.389 753.528 321.449 754.508 326.659 754.038C338.269 753.008 349.089 755.608 359.129 762.058C371.639 770.088 381.589 784.038 383.299 799.558C383.352 800.045 383.626 800.295 384.119 800.308ZM34.9389 123.938C34.6255 130.038 36.5689 135.461 40.7689 140.208C42.9155 142.635 45.5089 143.855 48.5489 143.868C57.4489 143.895 67.6722 143.898 79.2189 143.878C80.8589 143.878 81.9889 142.308 82.5389 140.958C82.6855 140.585 82.6522 140.231 82.4389 139.898C80.5522 136.978 80.8189 134.321 83.2389 131.928C87.7189 127.508 91.8289 130.808 94.8789 134.678C97.7389 138.308 103.749 143.708 108.819 143.768C117.746 143.855 126.882 143.871 136.229 143.818C142.909 143.768 150.429 136.098 154.769 131.618C156.269 130.068 158.029 129.188 160.259 129.608C164.159 130.328 166.106 132.778 166.099 136.958C166.099 138.248 165.299 139.248 164.549 140.218C164.261 140.59 164.13 141.06 164.184 141.527C164.239 141.994 164.474 142.422 164.839 142.718C166.006 143.678 167.326 144.148 168.799 144.128C196.979 143.828 224.629 143.751 251.749 143.898C253.509 143.905 255.106 143.581 256.539 142.928C256.721 142.847 256.872 142.708 256.969 142.533C257.065 142.358 257.101 142.155 257.073 141.955C257.044 141.756 256.951 141.571 256.809 141.428C253.879 138.498 254.059 132.908 257.859 130.608C262.999 127.498 266.539 130.248 269.939 133.818C274.619 138.718 280.959 143.828 287.779 143.838C296.859 143.865 305.789 143.868 314.569 143.848C321.399 143.828 328.259 136.098 332.759 131.638C335.086 129.338 337.459 128.821 339.879 130.088C343.819 132.161 344.612 135.195 342.259 139.188C342.08 139.495 341.983 139.844 341.98 140.198C341.976 140.552 342.066 140.901 342.239 141.208C343.319 143.118 344.959 144.088 347.179 144.068C354.066 144.001 361.086 143.928 368.239 143.848C370.352 143.821 372.149 143.235 373.629 142.088C379.589 137.488 382.416 131.278 382.109 123.458C381.969 109.928 371.589 99.2079 359.169 95.4779C358.953 95.4151 358.724 95.4137 358.51 95.4738C358.296 95.534 358.105 95.6534 357.959 95.8179C355.212 98.9446 351.706 100.435 347.439 100.288C341.069 100.068 338.009 96.4579 335.789 91.1479C332.202 82.5946 326.232 76.3279 317.879 72.3479C307.626 67.4546 296.802 67.5779 285.409 72.7179C282.069 74.2179 279.519 77.4279 276.309 79.4679C269.159 84.0279 261.339 79.8879 260.179 71.8979C258.606 61.0979 253.279 51.6813 244.199 43.6479C217.109 19.6679 175.399 28.6579 160.839 61.6279C158.766 66.3279 157.699 70.8946 157.639 75.3279C157.559 80.8679 155.339 86.2279 149.929 88.1679C144.262 90.2146 139.372 89.0513 135.259 84.6779C133.749 83.0679 132.859 81.0279 131.499 79.3379C131.286 79.0646 131.012 78.8779 130.679 78.7779C128.472 78.1113 126.346 77.8213 124.299 77.9079C113.326 78.3813 104.429 83.1579 97.6089 92.2379C94.2189 96.7479 94.0089 102.468 90.0089 106.458C86.8589 109.588 81.6689 110.618 77.7089 108.488C73.0155 105.968 70.9422 101.938 71.4889 96.3979C71.5755 95.5313 71.1922 95.0446 70.3389 94.9379C59.7789 93.5446 50.8422 96.5046 43.5289 103.818C38.0555 109.291 35.1922 115.998 34.9389 123.938ZM70.3189 172.868L60.5489 172.868C60.0022 172.868 59.7255 173.141 59.7189 173.688C59.4855 194.395 58.5655 214.878 56.9589 235.138C56.6655 238.818 56.5355 242.431 56.5689 245.978C56.5689 246.378 56.7689 246.578 57.1689 246.578L287.389 246.598L306.739 246.558L315.789 246.558C316.622 246.558 317.009 246.145 316.949 245.318C315.196 221.491 313.862 197.675 312.949 173.868C312.939 173.596 312.822 173.339 312.625 173.151C312.427 172.963 312.163 172.858 311.889 172.858L302.559 172.868L102.799 172.818L85.9489 172.788ZM345.659 172.918L336.369 172.938C335.276 172.938 334.742 173.485 334.769 174.578C335.302 197.585 336.822 220.561 339.329 243.508C339.429 244.421 339.629 245.291 339.929 246.118C339.981 246.258 340.075 246.379 340.199 246.463C340.322 246.547 340.469 246.591 340.619 246.588L349.349 246.478L358.959 246.388C359.056 246.388 359.152 246.362 359.234 246.311C359.317 246.259 359.384 246.186 359.427 246.099C359.47 246.012 359.488 245.915 359.479 245.818C358.169 231.648 357.729 217.678 356.929 203.398C356.396 193.905 356.209 183.971 356.369 173.598C356.371 173.466 356.337 173.335 356.273 173.221C356.208 173.106 356.114 173.011 356.001 172.945C355.888 172.88 355.759 172.846 355.629 172.848ZM285.139 272.498L66.0789 272.778L56.5789 272.838C56.2688 272.842 55.9676 272.941 55.7169 273.122C55.4662 273.302 55.2782 273.556 55.1789 273.848C53.5922 278.475 52.3889 283.555 51.5689 289.088C50.7689 294.528 50.0622 299.925 49.4489 305.278C45.8889 336.418 40.7589 367.688 40.1089 398.048C39.6822 418.115 42.5555 438.068 48.7289 457.908C57.0789 484.768 71.6889 508.708 92.4189 527.918C99.6455 535.011 106.386 540.555 112.639 544.548C120.992 549.888 128.172 554.048 134.179 557.028C152.646 566.188 172.619 571.811 194.099 573.898C204.712 574.931 216.622 574.575 229.829 572.828C240.356 571.415 249.986 569.291 258.719 566.458C291.679 555.758 320.169 534.368 341.689 507.238C357.689 487.038 368.109 461.898 373.119 436.298C376.719 417.938 377.099 398.938 375.549 380.068C373.189 351.368 369.499 324.108 365.409 293.848C364.422 286.581 363.209 279.731 361.769 273.298C361.729 273.128 361.634 272.976 361.499 272.867C361.365 272.758 361.199 272.699 361.029 272.698ZM175.049 601.798L173.779 601.438C173.706 601.418 173.627 601.42 173.555 601.444C173.482 601.467 173.419 601.512 173.372 601.571C173.326 601.631 173.299 601.702 173.295 601.776C173.29 601.851 173.309 601.925 173.349 601.988C181.216 615.461 186.096 629.798 187.989 644.998C191.409 672.498 189.379 702.208 176.579 727.128C176.519 727.245 176.501 727.378 176.529 727.506C176.556 727.635 176.626 727.75 176.728 727.832C176.831 727.914 176.958 727.959 177.089 727.958L184.889 727.958L212.439 727.998L239.709 727.978C239.797 727.978 239.883 727.947 239.952 727.892C240.021 727.837 240.069 727.76 240.088 727.674C240.108 727.588 240.097 727.497 240.059 727.418C237.179 721.278 233.859 715.348 231.849 708.858C226.049 690.188 225.419 668.538 227.059 648.518C228.539 630.531 233.812 615.041 242.879 602.048C243.406 601.301 243.229 601.051 242.349 601.298C237.362 602.725 232.109 603.628 226.589 604.008C209.329 605.188 192.149 604.451 175.049 601.798ZM222.789 744.938L176.989 744.988L164.659 745.098C164.465 745.098 164.274 745.14 164.1 745.221C163.925 745.302 163.771 745.421 163.649 745.568C156.089 754.508 148.589 762.038 139.249 767.968C138.469 768.461 138.542 768.711 139.469 768.718L156.889 768.828L252.749 768.818C260.109 768.858 267.559 768.855 275.099 768.808C276.206 768.801 277.269 768.665 278.289 768.398C278.709 768.285 278.732 768.118 278.359 767.898C268.546 762.031 260.359 754.481 253.799 745.248C253.572 744.935 253.266 744.781 252.879 744.788ZM86.8189 800.748L255.819 800.808L353.109 800.688C353.226 800.687 353.341 800.651 353.437 800.584C353.534 800.517 353.608 800.422 353.649 800.312C353.69 800.202 353.697 800.082 353.669 799.968C352.002 793.395 347.412 788.538 339.899 785.398L239.059 785.248C221.492 784.995 203.922 784.911 186.349 784.998C151.302 785.178 116.719 785.111 82.5989 784.798C73.5889 784.718 65.6689 791.198 63.5189 799.828C63.4885 799.952 63.4965 800.082 63.5417 800.201C63.5869 800.32 63.6672 800.423 63.7721 800.496C63.8769 800.568 64.0014 800.608 64.1289 800.608Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape1&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6223046875 4.3066710451255)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.17 93.3591L341.7 94.8091C341.347 94.9025 341.043 95.0758 340.79 95.3291C334.81 101.209 327.56 101.079 319.06 100.739C316.15 100.619 313.98 99.6891 312.72 96.9491C310.21 91.4791 305.03 84.9891 298.07 88.5091C296.217 89.4491 294.677 90.6225 293.45 92.0291C288.01 98.2791 282.29 103.559 274.1 105.299C270.267 106.112 266.1 106.416 261.6 106.209C253.04 105.819 244.67 101.199 239.15 94.8491C232.37 87.0391 226.88 84.2491 219.24 92.9691C214.89 97.9391 209.89 101.049 202.97 101.219C196.37 101.379 189.917 101.426 183.61 101.359C182.93 101.352 182.43 100.989 182.11 100.269C182.01 100.04 181.975 99.7876 182.008 99.5391C182.042 99.2906 182.143 99.0554 182.3 98.8591C183.04 97.9325 183.813 97.0725 184.62 96.2791C187.09 93.8491 185.64 89.9291 183.51 87.8291C180.65 85.0091 175.91 85.9891 173.39 88.9391C172.23 90.2925 171.17 91.6391 170.21 92.9791C163.5 102.299 152.67 101.929 142.47 100.679C134.9 99.7591 131.64 94.3891 126.62 89.6591C123.633 86.8525 120.593 86.8391 117.5 89.6191C112.63 93.9791 108.24 99.7591 102.47 102.719C88.07 110.129 72.61 106.679 62.57 94.0391C58.62 89.0591 52.95 85.2191 47.21 90.7591C44.54 93.3491 43.94 96.9991 40.53 99.0891C36.59 101.509 29.55 101.139 24.26 101.029C18.64 100.899 13.25 100.999 9.85 97.1991C7.82 94.9191 4 93.8291 2.11 96.9691C1.02333 98.7691 0.446667 98.6225 0.38 96.5291C0.366667 95.9891 0.24 95.0925 0 93.8391C0.253333 85.8991 3.11667 79.1925 8.59 73.7191C15.9033 66.4058 24.84 63.4458 35.4 64.8391C36.2533 64.9458 36.6367 65.4325 36.55 66.2991C36.0033 71.8391 38.0767 75.8691 42.77 78.3891C46.73 80.5191 51.92 79.4891 55.07 76.3591C59.07 72.3691 59.28 66.6491 62.67 62.1391C69.49 53.0591 78.3867 48.2825 89.36 47.8091C91.4067 47.7225 93.5333 48.0125 95.74 48.6791C96.0733 48.7791 96.3467 48.9658 96.56 49.2391C97.92 50.9291 98.81 52.9691 100.32 54.5791C104.433 58.9525 109.323 60.1158 114.99 58.0691C120.4 56.1291 122.62 50.7691 122.7 45.2291C122.76 40.7958 123.827 36.2291 125.9 31.5291C140.46 -1.44087 182.17 -10.4309 209.26 13.5491C218.34 21.5825 223.667 30.9991 225.24 41.7991C226.4 49.7891 234.22 53.9291 241.37 49.3691C244.58 47.3291 247.13 44.1191 250.47 42.6191C261.863 37.4791 272.687 37.3558 282.94 42.2491C291.293 46.2291 297.263 52.4958 300.85 61.0491C303.07 66.3591 306.13 69.9691 312.5 70.1891C316.767 70.3358 320.273 68.8458 323.02 65.7191C323.166 65.5546 323.357 65.4352 323.571 65.3751C323.785 65.3149 324.014 65.3163 324.23 65.3791C336.65 69.1091 347.03 79.8291 347.17 93.3591Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape2&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6211575655465 7.33540715628013)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.203 7.20842C347.509 15.0284 344.683 21.2384 338.723 25.8384C337.243 26.9851 335.446 27.5718 333.333 27.5984C326.179 27.6784 319.159 27.7518 312.273 27.8184C310.053 27.8384 308.413 26.8684 307.333 24.9584C307.159 24.651 307.07 24.3028 307.074 23.9484C307.077 23.594 307.173 23.2458 307.353 22.9384C309.706 18.9451 308.913 15.9118 304.973 13.8384C302.553 12.5718 300.179 13.0884 297.853 15.3884C293.353 19.8484 286.493 27.5784 279.663 27.5984C270.883 27.6184 261.953 27.6151 252.873 27.5884C246.053 27.5784 239.713 22.4684 235.033 17.5684C231.633 13.9984 228.093 11.2484 222.953 14.3584C219.153 16.6584 218.973 22.2484 221.903 25.1784C222.045 25.3214 222.137 25.5067 222.166 25.706C222.195 25.9053 222.159 26.108 222.062 26.2834C221.966 26.4588 221.815 26.5975 221.633 26.6784C220.199 27.3318 218.603 27.6551 216.843 27.6484C189.723 27.5018 162.073 27.5784 133.893 27.8784C132.419 27.8984 131.099 27.4284 129.933 26.4684C129.567 26.1723 129.332 25.7446 129.278 25.2775C129.224 24.8105 129.355 24.3403 129.643 23.9684C130.393 22.9984 131.193 21.9984 131.193 20.7084C131.199 16.5284 129.253 14.0784 125.353 13.3584C123.123 12.9384 121.363 13.8184 119.863 15.3684C115.523 19.8484 108.003 27.5184 101.323 27.5684C91.976 27.6218 82.8393 27.6051 73.9126 27.5184C68.8426 27.4584 62.8326 22.0584 59.9726 18.4284C56.9226 14.5584 52.8126 11.2584 48.3326 15.6784C45.9126 18.0718 45.646 20.7284 47.5326 23.6484C47.746 23.9818 47.7793 24.3351 47.6326 24.7084C47.0826 26.0584 45.9526 27.6284 44.3126 27.6284C32.766 27.6484 22.5426 27.6451 13.6426 27.6184C10.6026 27.6051 8.0093 26.3851 5.86263 23.9584C1.66263 19.2118 -0.280704 13.7884 0.0326292 7.68842C0.272629 8.94175 0.399296 9.83842 0.412629 10.3784C0.479296 12.4718 1.05596 12.6184 2.14263 10.8184C4.03263 7.67842 7.85263 8.76842 9.88263 11.0484C13.2826 14.8484 18.6726 14.7484 24.2926 14.8784C29.5826 14.9884 36.6226 15.3584 40.5626 12.9384C43.9726 10.8484 44.5726 7.19842 47.2426 4.60842C52.9826 -0.931581 58.6526 2.90842 62.6026 7.88842C72.6426 20.5284 88.1026 23.9784 102.503 16.5684C108.273 13.6084 112.663 7.82842 117.533 3.46842C120.626 0.688419 123.666 0.701752 126.653 3.50842C131.673 8.23842 134.933 13.6084 142.503 14.5284C152.703 15.7784 163.533 16.1484 170.243 6.82842C171.203 5.48842 172.263 4.14175 173.423 2.78842C175.943 -0.161581 180.683 -1.14158 183.543 1.67842C185.673 3.77842 187.123 7.69842 184.653 10.1284C183.846 10.9218 183.073 11.7818 182.333 12.7084C182.175 12.9047 182.074 13.1399 182.041 13.3884C182.007 13.6369 182.043 13.8894 182.143 14.1184C182.463 14.8384 182.963 15.2018 183.643 15.2084C189.949 15.2751 196.403 15.2284 203.003 15.0684C209.923 14.8984 214.923 11.7884 219.273 6.81842C226.913 -1.90158 232.403 0.888419 239.183 8.69842C244.703 15.0484 253.073 19.6684 261.633 20.0584C266.133 20.2651 270.299 19.9618 274.133 19.1484C282.323 17.4084 288.043 12.1284 293.483 5.87842C294.709 4.47175 296.249 3.29842 298.103 2.35842C305.063 -1.16158 310.243 5.32842 312.753 10.7984C314.013 13.5384 316.183 14.4684 319.093 14.5884C327.593 14.9284 334.843 15.0584 340.823 9.17842C341.076 8.92509 341.379 8.75175 341.733 8.65842Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape3&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.7941352600339 9.3230859375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M17.6779 0C16.5513 11.84 15.9213 19.36 15.7879 22.56C15.3079 33.9733 14.6346 46.28 13.7679 59.48C13.6013 62.04 13.1046 63.7467 12.2779 64.6C8.55793 68.45 -0.30207 67.53 0.00793038 61.06C1.34793 33.3133 2.02793 12.9867 2.04793 0.08Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape4&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9413128810975 9.32414062500001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M201.657 0.05C201.63 7.10333 201.687 11.5967 201.827 13.53C203.28 33.53 204.617 53.6 205.837 73.74L186.487 73.78L193.557 73.61C193.714 73.6076 193.867 73.5609 193.998 73.4752C194.129 73.3896 194.234 73.2685 194.299 73.126C194.364 72.9835 194.388 72.8254 194.367 72.67C193.367 64.75 192.894 56.7733 192.947 48.74C196.9 43.82 196.69 38.93 192.317 34.07C191.537 32.47 191.137 31.2867 191.117 30.52C190.984 25.7933 191.01 21.2667 191.197 16.94C191.213 16.5684 191.128 16.1993 190.951 15.872C190.773 15.5446 190.51 15.2711 190.189 15.0807C189.868 14.8902 189.501 14.7897 189.127 14.79L153.317 14.9C152.777 12.9667 151.747 11.28 150.227 9.84C148.927 8.60667 147.257 7.7 145.217 7.12C138.364 5.17333 133.557 7.71667 130.797 14.75C116.39 14.8967 101.944 14.9467 87.4571 14.9C61.1271 14.81 34.7871 15.13 8.5371 15.06C6.00377 15.0533 4.15377 14.7633 2.9871 14.19C0.773767 13.11 -0.209566 11.2233 0.0371003 8.53C0.150434 7.29667 0.770434 4.45333 1.8971 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape5&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.5460546875 9.32519283839548)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M3.69 73.6301L0 0.0700704L9.97 7.03745e-05C10.1004 -0.00175254 10.2289 0.031869 10.3421 0.0974247C10.4553 0.16298 10.5492 0.258107 10.6139 0.372872C10.6786 0.487637 10.7118 0.617903 10.71 0.75007C10.55 11.1234 10.7367 21.0567 11.27 30.5501C12.07 44.8301 12.51 58.8001 13.82 72.9701C13.8293 73.0668 13.8114 73.1643 13.7681 73.2514C13.7249 73.3384 13.6581 73.4116 13.5754 73.4627C13.4926 73.5137 13.3972 73.5405 13.3 73.5401Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape6&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.3825550063776 9.3230859375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M13.7551 0.08C13.7351 12.9867 13.0551 33.3133 11.7151 61.06C11.4051 67.53 20.2651 68.45 23.9851 64.6C24.8118 63.7467 25.3084 62.04 25.4751 59.48C26.3418 46.28 27.0151 33.9733 27.4951 22.56C27.6284 19.36 28.2584 11.84 29.3851 0L46.2351 0.03C45.1084 4.48333 44.4884 7.32667 44.3751 8.56C44.1284 11.2533 45.1118 13.14 47.3251 14.22C48.4918 14.7933 50.3418 15.0833 52.8751 15.09C79.1251 15.16 105.465 14.84 131.795 14.93C146.282 14.9767 160.728 14.9267 175.135 14.78C174.568 20.8133 176.498 24.9267 180.925 27.12C183.338 28.3133 185.805 28.72 188.325 28.34C194.755 27.36 198.095 21.26 197.655 14.93L233.465 14.82C233.839 14.8197 234.206 14.9202 234.527 15.1107C234.848 15.3011 235.111 15.5746 235.289 15.902C235.466 16.2293 235.551 16.5984 235.535 16.97C235.348 21.2967 235.322 25.8233 235.455 30.55C235.475 31.3167 235.875 32.5 236.655 34.1C232.788 31.5133 229.168 30.99 225.795 32.53C211.935 38.83 224.195 59.55 237.285 48.77C237.232 56.8033 237.705 64.78 238.705 72.7C238.726 72.8554 238.702 73.0135 238.637 73.156C238.572 73.2985 238.467 73.4196 238.336 73.5052C238.205 73.5909 238.052 73.6376 237.895 73.64L230.825 73.81L0.605102 73.79C0.205102 73.79 0.00510204 73.59 0.00510204 73.19C-0.0282313 69.6433 0.101769 66.03 0.395102 62.35C2.00177 42.09 2.92177 21.6067 3.1551 0.9C3.16177 0.353333 3.43844 0.08 3.9851 0.08ZM127.005 36.5C127.005 34.413 126.456 32.3624 125.412 30.555C124.369 28.7476 122.867 27.2464 121.06 26.203C119.253 25.1595 117.202 24.61 115.115 24.61C111.963 24.61 108.937 25.8635 106.708 28.0925C104.479 30.3215 103.225 33.3478 103.225 36.5C103.225 39.6522 104.479 42.6785 106.708 44.9075C108.937 47.1365 111.963 48.39 115.115 48.39C117.202 48.39 119.253 47.8405 121.06 46.797C122.867 45.7536 124.369 44.2524 125.412 42.445C126.456 40.6376 127.005 38.587 127.005 36.5ZM75.9704 37.4184C76.0574 34.3019 74.8637 31.2741 72.6541 29.007C70.4445 26.7398 67.3954 25.4143 64.1835 25.3246C62.057 25.2652 59.9523 25.7501 58.0818 26.7303C56.2114 27.7105 54.6403 29.152 53.5271 30.9092C52.414 32.6664 51.7974 34.6782 51.7398 36.7416C51.6528 39.8581 52.8465 42.8859 55.0561 45.153C57.2657 47.4202 60.3148 48.7457 63.5267 48.8354C65.6532 48.8948 67.7579 48.4099 69.6284 47.4297C71.4988 46.4495 73.0699 45.008 74.1831 43.2508C75.2962 41.4936 75.9128 39.4818 75.9704 37.4184ZM183.874 50.7982C183.856 49.4819 183.468 48.1937 182.749 47.0635C182.03 45.9334 181.006 45.0007 179.779 44.3595C178.552 43.7184 177.166 43.3911 175.76 43.4107C173.637 43.4404 171.61 44.2595 170.128 45.6863C168.646 47.1131 167.828 49.0336 167.856 51.0218C167.874 52.3381 168.262 53.6263 168.981 54.7565C169.7 55.8866 170.725 56.8193 171.951 57.4605C173.178 58.1016 174.564 58.4289 175.97 58.4093C178.093 58.3796 180.121 57.5605 181.603 56.1337C183.084 54.7069 183.902 52.7864 183.874 50.7982Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape7&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.0305953125001 9.32554685349047)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.0064 0.0100006L9.3364 6.11826e-07C9.61064 -0.000292647 9.87453 0.104847 10.0721 0.293135C10.2697 0.481423 10.3861 0.738544 10.3964 1.01C11.3097 24.8167 12.6431 48.6333 14.3964 72.46C14.4564 73.2867 14.0697 73.7 13.2364 73.7L4.1864 73.7C2.9664 53.56 1.62973 33.49 0.1764 13.49C0.0364 11.5567 -0.0202667 7.06333 0.0064 0.0100006Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape8&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1631696428572 9.32765624999999)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M10.891 0L14.581 73.56L5.85095 73.67C5.70139 73.6731 5.55452 73.6294 5.43088 73.5452C5.30724 73.461 5.21287 73.3403 5.16095 73.2C4.86095 72.3733 4.66095 71.5033 4.56095 70.59C2.05429 47.6433 0.534286 24.6667 0.000952381 1.66C-0.0257143 0.566667 0.507619 0.02 1.60095 0.02Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape9&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.5362571970961 9.55219950584632)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.6165 8.41299C23.0565 14.743 19.7165 20.843 13.2865 21.823C10.7665 22.203 8.2998 21.7963 5.88646 20.603C1.4598 18.4097 -0.470205 14.2963 0.0964619 8.26299C2.85646 1.22966 7.66313 -1.31367 14.5165 0.632992C16.5565 1.21299 18.2265 2.11966 19.5265 3.35299C21.0465 4.79299 22.0765 6.47966 22.6165 8.41299Z&quot;&gt;&lt;/path&gt; &lt;circle id=&quot;shape10&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.0115625 10.18828125)&quot; r=&quot;11.89&quot; cx=&quot;11.89&quot; cy=&quot;11.89&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape11&quot; transform=&quot;matrix(0.0351425431068875 0.000981620111375468 -0.000981620111375468 0.0351425431068875 14.2130771675543 10.2015061448131)&quot; rx=&quot;12.12&quot; ry=&quot;11.76&quot; cx=&quot;12.12&quot; cy=&quot;11.76&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape12&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 20.1057469902912 10.4364122450525)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M16.9732 2.43205C21.3465 7.29205 21.5565 12.1821 17.6032 17.1021C4.5132 27.8821 -7.7468 7.16205 6.1132 0.862052C9.48653 -0.677948 13.1065 -0.154615 16.9732 2.43205Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape13&quot; transform=&quot;matrix(0.0351528231097021 -0.000490857902548076 0.000490857902548076 0.0351528231097021 18.2800569526222 10.8531762234766)&quot; rx=&quot;8.01&quot; ry=&quot;7.5&quot; cx=&quot;8.01&quot; cy=&quot;7.5&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape14&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.47390625 12.828515625)&quot; fill=&quot;rgb(191,146,59)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0 300.33C1.52 298.69 3.53 298.057 6.03 298.43C6.10297 298.443 6.17377 298.447 6.24 298.44C6.65333 298.413 6.88667 298.26 6.94 297.98C7 297.66 7.19333 297.493 7.52 297.48L10.29 297.39C10.4233 297.383 10.5567 297.367 10.69 297.34C11.0167 297.267 11.1733 297.127 11.16 296.92C11.1467 296.7 11.2467 296.563 11.46 296.51C12.1467 296.337 12.7433 295.997 13.25 295.49C13.49 295.257 13.58 294.973 13.52 294.64C13.1333 292.653 12.8767 290.647 12.75 288.62C12.69 287.79 12.27 287.35 11.7 286.83C11.4533 286.603 11.3933 286.337 11.52 286.03C11.8533 285.197 11.6767 284.573 10.99 284.16C10.7367 284 10.46 283.923 10.16 283.93L6.56 284.02C15.1 281.92 21.0833 280.04 24.51 278.38C27.5033 276.927 30.4033 275.357 33.21 273.67C33.319 273.603 33.3974 273.495 33.4282 273.371C33.4589 273.246 33.4397 273.115 33.3746 273.004C33.3096 272.894 33.2037 272.813 33.08 272.78C32.5067 272.62 31.9433 272.67 31.39 272.93C63.5767 260.003 88.4967 238.95 106.15 209.77C109.223 204.703 112.093 199 114.76 192.66C118.06 184.807 120.343 178.587 121.61 174C123.097 168.613 124.457 162.397 125.69 155.35C126.657 149.857 126.873 144.25 126.34 138.53C127.853 138.57 128.907 138.097 129.5 137.11C131.56 133.67 131.433 130.473 129.12 127.52C128.24 126.39 127.07 126.39 125.77 126.38C120.017 126.347 114.427 126.37 109 126.45C108.613 125.77 108.27 125.09 107.97 124.41C107.69 123.77 107.527 123.037 107.48 122.21C106.953 112.977 106.213 103.723 105.26 94.45C110.127 94.5633 114.617 94.5833 118.73 94.51C121.27 94.47 123.93 94.86 126 93.31C128.053 91.77 128.717 89.61 127.99 86.83C127.23 83.89 124.98 82.2967 121.24 82.05L120.9 72.32C124.973 70.3667 126.23 67.5767 124.67 63.95C123.697 61.6833 121.82 60.52 119.04 60.46C117.273 58.24 116.223 56.5633 115.89 55.43C113.43 47.1033 110.547 38.9133 107.24 30.86C106.947 30.1467 107 29.0333 107.4 27.52C109.087 27.4933 110.883 27.5267 112.79 27.62C115.45 27.7533 117.403 26.9667 118.65 25.26C121.02 22.01 120.02 17.98 116.55 16.23C115.597 15.75 114.193 15.5133 112.34 15.52C107.533 15.54 102.823 15.4767 98.21 15.33C97.6033 13.9433 96.9433 12.6033 96.23 11.31C94.38 7.96 93.99 4.82 92.56 1.46C92.4467 1.18667 92.5067 0.963333 92.74 0.79L93.19 0.46C93.4567 0.273333 93.4267 0.176667 93.1 0.17L55.31 0L131.2 0.2C131.371 0.200762 131.536 0.26037 131.671 0.369176C131.805 0.477981 131.9 0.629779 131.94 0.8C133.38 7.23333 134.593 14.0833 135.58 21.35C139.67 51.61 143.36 78.87 145.72 107.57C147.27 126.44 146.89 145.44 143.29 163.8C138.28 189.4 127.86 214.54 111.86 234.74C90.34 261.87 61.85 283.26 28.89 293.96C20.1567 296.793 10.5267 298.917 0 300.33Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape15&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.2758764491296 12.828515625)&quot; fill=&quot;rgb(236,230,26)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M231.61 0L269.4 0.17C269.726 0.176667 269.756 0.273333 269.49 0.46L269.04 0.79C268.806 0.963333 268.746 1.18667 268.86 1.46C270.29 4.82 270.68 7.96 272.53 11.31C273.243 12.6033 273.903 13.9433 274.51 15.33C268.76 17.07 269.07 27.78 275.82 27.53C278.38 27.43 281.006 27.4267 283.7 27.52C283.3 29.0333 283.246 30.1467 283.54 30.86C286.846 38.9133 289.73 47.1033 292.19 55.43C292.523 56.5633 293.573 58.24 295.34 60.46C290.98 60.76 286.806 61.0267 282.82 61.26C277.7 61.56 274.45 67.2 278.08 71.26C278.86 72.1333 280.413 72.6 282.74 72.66C287.386 72.7733 292.206 72.66 297.2 72.32L297.54 82.05C293.013 81.9567 288.443 81.9633 283.83 82.07C281.84 82.11 280.61 82.75 279.5 84.26C276.44 88.44 277.126 91.8367 281.56 94.45C282.513 103.723 283.253 112.977 283.78 122.21C283.826 123.037 283.99 123.77 284.27 124.41C284.57 125.09 284.913 125.77 285.3 126.45C282.193 127.497 280.633 129.463 280.62 132.35C280.613 134.79 281.763 136.753 284.07 138.24C281.93 156.593 277.493 173.123 270.76 187.83C261.606 207.817 247.22 225.063 227.6 239.57C218.546 246.263 208.406 252.023 197.18 256.85C191.52 259.28 187.21 264.45 191.61 270.42C195.03 275.03 202.58 274.56 207.69 272.93C208.243 272.67 208.806 272.62 209.38 272.78C209.503 272.813 209.609 272.894 209.674 273.004C209.739 273.115 209.758 273.246 209.728 273.371C209.697 273.495 209.619 273.603 209.51 273.67C206.703 275.357 203.803 276.927 200.81 278.38C197.383 280.04 191.4 281.92 182.86 284.02C165.386 287.427 148.786 288.113 133.06 286.08C116.433 283.94 99.2895 279.17 81.6295 271.77C75.1162 269.043 68.6828 266.14 62.3295 263.06C54.3762 259.2 46.8962 254.463 39.8895 248.85C40.5695 248.377 41.3595 247.947 42.2595 247.56C44.5695 246.55 46.3695 244.3 44.1695 241.99C29.1962 226.303 18.1928 209.247 11.1595 190.82C1.95285 166.687 -1.55715 141.62 0.629514 115.62C2.01618 99.0867 3.45618 82.5733 4.94951 66.08C5.49618 59.9533 6.20618 53.32 7.07951 46.18C8.95285 30.8733 10.7762 15.5733 12.5495 0.28ZM230.747 11.7302C228.758 9.7412 226.058 8.62261 223.245 8.62261C220.432 8.62261 217.731 9.7412 215.742 11.7302L213.89 13.5829C211.901 15.5719 210.782 18.2724 210.782 21.0853C210.782 23.8982 211.901 26.5987 213.89 28.5877L215.092 29.7898C217.081 31.7788 219.781 32.8974 222.594 32.8974C225.407 32.8974 228.108 31.7788 230.097 29.7898L231.949 27.9371C233.938 25.9481 235.057 23.2476 235.057 20.4347C235.057 17.6218 233.938 14.9213 231.949 12.9323ZM47.1595 186.78C39.7128 170.84 35.7195 154.833 35.1795 138.76C34.9528 131.94 35.0895 124.72 35.5895 117.1C37.1495 93.44 39.2662 67.4833 41.9395 39.23C42.3395 35.0167 42.6262 30.7267 42.7995 26.36C43.4195 10.9 25.2095 12.45 24.4195 25.69C23.0462 48.79 21.1195 72.2233 18.6395 95.99C17.6595 105.337 16.9995 114.63 16.6595 123.87C16.3328 132.65 16.6595 140.653 17.6395 147.88C19.5062 161.707 22.9728 175.147 28.0395 188.2C29.1795 191.153 30.6662 194.07 32.4995 196.95C35.2995 201.37 41.5395 202.72 45.3395 198.89C48.7328 195.483 49.3395 191.447 47.1595 186.78ZM87.1943 37.8021C86.8236 36.4743 85.902 35.3574 84.6342 34.6994C83.3663 34.0413 81.8534 33.8945 80.4311 34.2916C79.0088 34.6887 77.7908 35.598 77.0472 36.8177C76.3037 38.0374 76.094 39.4701 76.4647 40.7979C76.8355 42.1257 77.757 43.2426 79.0249 43.9006C80.2927 44.5587 81.8056 44.7055 83.2279 44.3084C84.6502 43.9113 85.8682 43.002 86.6118 41.7823C87.3554 40.5626 87.565 39.1299 87.1943 37.8021ZM242.9 63.3691C242.905 60.5116 242.14 57.7024 240.682 55.2252C239.224 52.7479 237.124 50.6888 234.594 49.2556C232.064 47.8225 229.192 47.0651 226.268 47.06C223.344 47.0549 220.469 47.8022 217.934 49.2266C215.399 50.6509 213.292 52.7027 211.826 55.1748C210.359 57.6469 209.585 60.4534 209.58 63.3109C209.575 66.1684 210.34 68.9776 211.797 71.4548C213.255 73.9321 215.355 75.9912 217.885 77.4244C220.415 78.8575 223.287 79.6149 226.211 79.62C229.135 79.6251 232.01 78.8778 234.545 77.4534C237.08 76.0291 239.187 73.9773 240.653 71.5052C242.12 69.0331 242.895 66.2266 242.9 63.3691ZM85.9041 71.8823C88.1531 72.912 90.7367 72.9736 93.0816 72.0534C95.4266 71.1333 97.3455 69.3049 98.4127 66.9739C99.1193 65.4306 99.4215 63.7348 99.2889 62.0574C99.1563 60.38 98.5935 58.7796 97.6572 57.4176C96.721 56.0556 95.4439 54.9794 93.9549 54.2977C91.7059 53.268 89.1223 53.2064 86.7774 54.1266C84.4325 55.0467 82.5135 56.8751 81.4463 59.2061C80.7398 60.7494 80.4375 62.4452 80.5701 64.1226C80.7028 65.8 81.2656 67.4004 82.2018 68.7624C83.1381 70.1244 84.4151 71.2006 85.9041 71.8823ZM60.6086 105.171C63.2448 106.638 66.3725 106.974 69.2978 106.105C72.223 105.236 74.7122 103.231 76.213 100.535C77.7138 97.8381 78.1063 94.6659 77.3035 91.7217C76.5007 88.7775 74.5666 86.2966 71.9304 84.8293C69.2942 83.362 66.1665 83.0257 63.2413 83.8948C60.316 84.7639 57.8268 86.7691 56.326 89.4655C54.8252 92.1619 54.4327 95.3341 55.2355 98.2783C56.0384 101.222 57.9724 103.703 60.6086 105.171ZM187.08 98.11C187.08 96.1959 186.318 94.3582 184.965 93.0047C183.611 91.6512 181.774 90.89 179.86 90.89C177.945 90.89 176.108 91.6512 174.754 93.0047C173.401 94.3582 172.64 96.1959 172.64 98.11C172.64 100.024 173.401 101.862 174.754 103.215C176.108 104.569 177.945 105.33 179.86 105.33C181.127 105.33 182.372 104.996 183.47 104.363C184.567 103.729 185.479 102.817 186.112 101.72C186.746 100.623 187.08 99.3773 187.08 98.11ZM234.564 99.0027C233.705 97.863 232.551 96.9774 231.217 96.4351C229.883 95.8929 228.416 95.7129 226.964 95.9133C225.513 96.1138 224.127 96.6877 222.947 97.5771C221.766 98.4665 220.833 99.6405 220.24 100.981C219.647 102.321 219.416 103.78 219.57 105.212C219.723 106.644 220.256 107.998 221.115 109.137C221.974 110.277 223.128 111.163 224.462 111.705C225.796 112.247 227.263 112.427 228.715 112.227C230.166 112.026 231.552 111.452 232.732 110.563C233.913 109.673 234.846 108.499 235.439 107.159C236.032 105.819 236.263 104.36 236.109 102.928C235.956 101.496 235.423 100.142 234.564 99.0027ZM47.9695 214.56C45.1695 220.83 50.0195 225.32 54.0495 229.45C57.6895 233.19 61.8995 236.09 66.6995 232.86C71.8895 229.38 72.0595 223.24 67.9795 218.66C64.2095 214.41 60.6395 209.6 54.3295 209.99C51.4095 210.17 49.1195 211.99 47.9695 214.56Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape16&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.8026079545455 12.838359375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M26.0114 0C24.238 15.2933 22.4147 30.5933 20.5414 45.9C19.668 53.04 18.958 59.6733 18.4114 65.8C16.918 82.2933 15.478 98.8067 14.0914 115.34C11.9047 141.34 15.4147 166.407 24.6214 190.54C31.6547 208.967 42.658 226.023 57.6314 241.71C59.8314 244.02 58.0314 246.27 55.7214 247.28C54.8214 247.667 54.0314 248.097 53.3514 248.57C51.9014 250.07 52.3314 253.14 52.3514 255.14C31.6214 235.93 17.0114 211.99 8.66137 185.13C2.48804 165.29 -0.385293 145.337 0.0413737 125.27C0.691374 94.91 5.82137 63.64 9.38137 32.5C9.99471 27.1467 10.7014 21.75 11.5014 16.31C12.3214 10.7767 13.5247 5.69667 15.1114 1.07C15.2107 0.778294 15.3987 0.524438 15.6494 0.343583C15.9001 0.162728 16.2013 0.0636261 16.5114 0.06Z&quot;&gt;&lt;/path&gt; &lt;rect id=&quot;shape17&quot; transform=&quot;matrix(0.0248592227760896 -0.0248592227760896 0.0248592227760896 0.0248592227760896 19.531681996495 13.569794617477)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; width=&quot;23.84&quot; height=&quot;22.92&quot; rx=&quot;10.61&quot; ry=&quot;10.61&quot;&gt;&lt;/rect&gt; &lt;path id=&quot;shape18&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.857255859375 13.3649990428515)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M30.6225 171.52C32.8025 176.187 32.1958 180.223 28.8025 183.63C25.0025 187.46 18.7625 186.11 15.9625 181.69C14.1292 178.81 12.6425 175.893 11.5025 172.94C6.43583 159.887 2.96917 146.447 1.1025 132.62C0.1225 125.393 -0.204167 117.39 0.1225 108.61C0.4625 99.37 1.1225 90.0767 2.1025 80.73C4.5825 56.9634 6.50917 33.53 7.8825 10.43C8.6725 -2.80997 26.8825 -4.35997 26.2625 11.1C26.0892 15.4667 25.8025 19.7567 25.4025 23.97C22.7292 52.2234 20.6125 78.18 19.0525 101.84C18.5525 109.46 18.4158 116.68 18.6425 123.5C19.1825 139.573 23.1758 155.58 30.6225 171.52Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape19&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.7841415488515 13.3674609375)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.0522 0C8.66553 0.146667 13.3755 0.21 18.1822 0.19C20.0355 0.183333 21.4389 0.42 22.3922 0.9C25.8622 2.65 26.8622 6.68 24.4922 9.93C23.2455 11.6367 21.2922 12.4233 18.6322 12.29C16.7255 12.1967 14.9289 12.1633 13.2422 12.19C10.5489 12.0967 7.9222 12.1 5.3622 12.2C-1.3878 12.45 -1.6978 1.74 4.0522 0Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape20&quot; transform=&quot;matrix(0.0338611839889802 -0.00945421244350544 0.00945421244350544 0.0338611839889802 14.9149266129752 14.0867380565676)&quot; rx=&quot;5.57&quot; ry=&quot;5.2&quot; cx=&quot;5.57&quot; cy=&quot;5.2&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape21&quot; transform=&quot;matrix(0.0351561964539828 6.13592003636124e-05 -6.13592003636124e-05 0.0351561964539828 19.6449060698586 14.4819473774511)&quot; rx=&quot;16.66&quot; ry=&quot;16.28&quot; cx=&quot;16.66&quot; cy=&quot;16.28&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape22&quot; transform=&quot;matrix(-0.0146348716029047 0.031965331958686 -0.031965331958686 -0.0146348716029047 15.8772166930746 14.8739620295146)&quot; rx=&quot;9.67&quot; ry=&quot;9.33&quot; cx=&quot;9.67&quot; cy=&quot;9.33&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape23&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.997793706651 14.9540625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M18.805 0C21.585 0.06 23.4616 1.22333 24.435 3.49C25.995 7.11667 24.7383 9.90667 20.665 11.86C15.6716 12.2 10.8516 12.3133 6.20498 12.2C3.87831 12.14 2.32498 11.6733 1.54498 10.8C-2.08502 6.74 1.16498 1.1 6.28498 0.8C10.2716 0.566667 14.445 0.3 18.805 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape24&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.0361349190606 15.7107890625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M19.9144 0.0653333C23.6544 0.312 25.9044 1.90533 26.6644 4.84533C27.3911 7.62533 26.7277 9.78533 24.6744 11.3253C22.6044 12.8753 19.9444 12.4853 17.4044 12.5253C13.2911 12.5987 8.80105 12.5787 3.93438 12.4653C-0.498949 9.852 -1.18562 6.45533 1.87438 2.27533C2.98438 0.765333 4.21438 0.125333 6.20438 0.0853333C10.8177 -0.0213333 15.3877 -0.028 19.9144 0.0653333Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape25&quot; transform=&quot;matrix(-0.0170977282180133 0.0307185547160906 -0.0307185547160906 -0.0170977282180133 15.1542587716268 16.0053675452257)&quot; rx=&quot;11.64&quot; ry=&quot;11.38&quot; cx=&quot;11.64&quot; cy=&quot;11.38&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;circle id=&quot;shape26&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.345234375 16.0238671875)&quot; r=&quot;7.22&quot; cx=&quot;7.22&quot; cy=&quot;7.22&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape27&quot; transform=&quot;matrix(0.0280770296501001 -0.0211575594076892 0.0211575594076892 0.0280770296501001 19.8774398273616 16.4371069616574)&quot; rx=&quot;8.42&quot; ry=&quot;8.13&quot; cx=&quot;8.42&quot; cy=&quot;8.13&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape28&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1414052368516 17.2710454963236)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.02 12.1647L3.45003 11.8747C1.14336 10.388 -0.00663785 8.42471 2.88184e-05 5.98471C0.0133622 3.09804 1.57336 1.13137 4.68003 0.0847059C10.1067 0.00470588 15.6967 -0.0186275 21.45 0.0147059C22.75 0.0247059 23.92 0.0247059 24.8 1.15471C27.1134 4.10804 27.24 7.30471 25.18 10.7447C24.5867 11.7314 23.5334 12.2047 22.02 12.1647Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape29&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.9485123620206 17.688515625)&quot; fill=&quot;rgb(213,188,38)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M94.2701 0L112.84 0.29C113.373 6.01 113.157 11.6167 112.19 17.11C110.957 24.1567 109.597 30.3733 108.11 35.76C106.843 40.3467 104.56 46.5667 101.26 54.42C98.5934 60.76 95.7234 66.4633 92.6501 71.53C74.9968 100.71 50.0768 121.763 17.8901 134.69C12.7801 136.32 5.23009 136.79 1.81009 132.18C-2.58991 126.21 1.72009 121.04 7.38009 118.61C18.6068 113.783 28.7468 108.023 37.8001 101.33C57.4201 86.8233 71.8068 69.5767 80.9601 49.59C87.6934 34.8833 92.1301 18.3533 94.2701 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape30&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9331058615201 20.210194296345)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.830544 4.59225C1.98054 2.02225 4.27054 0.202251 7.19054 0.0222511C13.5005 -0.367749 17.0705 4.44225 20.8405 8.69225C24.9205 13.2723 24.7505 19.4123 19.5605 22.8923C14.7605 26.1223 10.5505 23.2223 6.91054 19.4823C2.88054 15.3523 -1.96946 10.8623 0.830544 4.59225Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape31&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.6404577789765 21.5771484375)&quot; fill=&quot;rgb(213,188,38)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.07476 0C8.08142 5.61333 15.5614 10.35 23.5148 14.21C29.8681 17.29 36.3014 20.1933 42.8148 22.92C60.4748 30.32 77.6181 35.09 94.2448 37.23C109.971 39.2633 126.571 38.5767 144.045 35.17L147.645 35.08C147.945 35.0733 148.221 35.15 148.475 35.31C149.161 35.7233 149.338 36.3467 149.005 37.18C148.878 37.4867 148.938 37.7533 149.185 37.98C149.755 38.5 150.175 38.94 150.235 39.77C150.361 41.7967 150.618 43.8033 151.005 45.79C151.065 46.1233 150.975 46.4067 150.735 46.64C150.228 47.1467 149.631 47.4867 148.945 47.66C148.731 47.7133 148.631 47.85 148.645 48.07C148.658 48.2767 148.501 48.4167 148.175 48.49C148.041 48.5167 147.908 48.5333 147.775 48.54L145.005 48.63C144.678 48.6433 144.485 48.81 144.425 49.13C144.371 49.41 144.138 49.5633 143.725 49.59C143.659 49.5967 143.588 49.5933 143.515 49.58C141.015 49.2067 139.005 49.84 137.485 51.48C124.278 53.2267 112.368 53.5833 101.755 52.55C80.2748 50.4633 60.3014 44.84 41.8348 35.68C35.8281 32.7 28.6481 28.54 20.2948 23.2C14.0414 19.2067 7.30142 13.6633 0.0747565 6.57C0.0547565 4.57 -0.375243 1.5 1.07476 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape32&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.548046875 24.3846604970638)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M37.39 126.792L36.84 125.732C36.6867 125.445 36.61 125.139 36.61 124.812L36.29 50.1519C39.97 50.1319 42.74 50.0419 44.93 47.3519C46.0567 45.9652 46.4067 44.4152 45.98 42.7019C44.81 38.0219 40.08 37.5119 35.72 37.6019L35.91 26.2919C40.16 26.9019 44.77 27.8519 48.81 25.9619C52.26 24.3519 53.31 20.2319 50.85 17.2519C48.51 14.4319 45.36 14.2119 41.99 14.2719C35.7567 14.3852 29.3167 14.4052 22.67 14.3319C19.49 14.3019 16.81 15.9619 15.14 18.6319C15.2 16.6619 12.86 15.6819 11.44 14.7519C10.6133 14.2119 9.90667 13.5852 9.32 12.8719C6.57333 9.53188 3.78 6.23188 0.94 2.97188C0.46 2.41855 0.146667 1.62521 0 0.591879C17.1 3.24521 34.28 3.98188 51.54 2.80188C57.06 2.42188 62.3133 1.51855 67.3 0.0918792C68.18 -0.154787 68.3567 0.0952125 67.83 0.841879C58.7633 13.8352 53.49 29.3252 52.01 47.3119C50.37 67.3319 51 88.9819 56.8 107.652C58.81 114.142 62.13 120.072 65.01 126.212C65.0485 126.291 65.0589 126.382 65.0394 126.468C65.02 126.554 64.9718 126.631 64.9029 126.686C64.834 126.741 64.7483 126.772 64.66 126.772Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape33&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.486355851717 24.3923298330305)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.75477 0.373729C1.90143 1.40706 2.21477 2.2004 2.69477 2.75373C5.53477 6.01373 8.3281 9.31373 11.0748 12.6537C11.6614 13.3671 12.3681 13.9937 13.1948 14.5337C14.6148 15.4637 16.9548 16.4437 16.8948 18.4137L16.5848 19.0537C15.9714 19.3604 15.6748 19.8204 15.6948 20.4337C15.8148 23.3437 16.3448 26.1237 18.0248 28.6937C19.9714 31.6737 22.1714 34.5471 24.6248 37.3137C19.6548 39.6737 18.5548 46.9937 24.3448 49.3137C24.1981 53.2071 24.2048 57.1237 24.3648 61.0637C24.5581 65.7371 24.5748 69.6437 24.4148 72.7837C24.2014 77.0371 23.9914 81.3304 23.7848 85.6637C23.1248 99.8304 19.6748 113.244 13.4348 125.904C13.2814 126.21 13.0314 126.384 12.6848 126.424L11.5948 126.534L3.79477 126.534C3.66373 126.534 3.5364 126.49 3.43437 126.408C3.33234 126.325 3.26171 126.21 3.23447 126.082C3.20722 125.954 3.22499 125.82 3.28477 125.704C16.0848 100.784 18.1148 71.0737 14.6948 43.5737C12.8014 28.3737 7.92143 14.0371 0.0547669 0.563729C0.0152725 0.50031 -0.00361813 0.426609 0.000572506 0.352292C0.00476314 0.277975 0.0318434 0.20644 0.0782619 0.147067C0.12468 0.0876949 0.188315 0.0431997 0.26082 0.0194171C0.333326 -0.0043654 0.411387 -0.00634806 0.484767 0.0137292Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape34&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.0617214476865 24.8861307529877)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M21.2988 12.0278C16.7455 11.8878 12.1288 11.8545 7.44881 11.9278C4.74215 11.9678 2.94548 11.7312 2.05881 11.2178C0.238812 10.1645 -0.374521 8.0945 0.218812 5.00784L0.528812 4.36784C2.19881 1.69784 4.87881 0.0378364 8.05881 0.0678364C14.7055 0.14117 21.1455 0.12117 27.3788 0.00783636C30.7488 -0.0521636 33.8988 0.167836 36.2388 2.98784C38.6988 5.96784 37.6488 10.0878 34.1988 11.6978C30.1588 13.5878 25.5488 12.6378 21.2988 12.0278Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape35&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.038091694079 25.0621875000001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.890947 0C0.297614 3.08667 0.910947 5.15667 2.73095 6.21C3.61761 6.72333 5.41428 6.96 8.12095 6.92C12.8009 6.84667 17.4176 6.88 21.9709 7.02L21.7809 18.33L8.93095 18.26C6.47761 15.4933 4.27761 12.62 2.33095 9.64C0.650947 7.07 0.120947 4.29 0.000947368 1.38C-0.0190526 0.766667 0.277614 0.306667 0.890947 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape36&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.2047130847683 25.704140625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.19149 0L17.0415 0.07C21.4015 -0.02 26.1315 0.49 27.3015 5.17C27.7282 6.88333 27.3782 8.43333 26.2515 9.82C24.0615 12.51 21.2915 12.6 17.6115 12.62L3.91149 12C-1.87851 9.68 -0.778506 2.36 4.19149 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape37&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.893984375 26.126015625)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M12.75 0L26.45 0.62L26.77 75.28C26.77 75.6067 26.8467 75.9133 27 76.2L27.55 77.26L0 77.22L1.09 77.11C1.43667 77.07 1.68667 76.8967 1.84 76.59C8.08 63.93 11.53 50.5167 12.19 36.35C12.3967 32.0167 12.6067 27.7233 12.82 23.47C12.98 20.33 12.9633 16.4233 12.77 11.75C12.61 7.81 12.6033 3.89333 12.75 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape38&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.22640625 29.4324536132813)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M29.96 24.0302C30.7067 23.5835 30.1467 23.1702 28.28 22.7902C27.96 22.7235 27.6733 22.5835 27.42 22.3702C24.9333 20.2235 22.8967 18.7069 21.31 17.8202C12.91 13.1069 5.80667 7.21687 0 0.150208L30.09 0.000208333C30.4767 -0.00645833 30.7833 0.146875 31.01 0.460208C37.57 9.69354 45.7567 17.2435 55.57 23.1102C55.9433 23.3302 55.92 23.4969 55.5 23.6102C54.48 23.8769 53.4167 24.0135 52.31 24.0202C44.77 24.0669 37.32 24.0702 29.96 24.0302Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape39&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.2706541442871 29.4394921875)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M38.2747 0C35.2147 4.74667 31.2681 10.0433 26.4347 15.89C23.4547 19.49 20.7014 22.14 18.1747 23.84L0.754727 23.73C-0.17194 23.7233 -0.245273 23.4733 0.534727 22.98C9.87473 17.05 17.3747 9.52 24.9347 0.58C25.0571 0.432797 25.211 0.314351 25.3856 0.233119C25.5601 0.151886 25.7511 0.109846 25.9447 0.11Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape40&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.909609375 29.437734375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M65.9 0C71.7067 7.06667 78.81 12.9567 87.21 17.67C88.7967 18.5567 90.8333 20.0733 93.32 22.22C93.5733 22.4333 93.86 22.5733 94.18 22.64C96.0467 23.02 96.6067 23.4333 95.86 23.88L0 23.89C2.52667 22.19 5.28 19.54 8.26 15.94C13.0933 10.0933 17.04 4.79667 20.1 0.05Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape41&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.6264334548969 30.8390367406574)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M175.558 0.450733C176.245 0.450733 176.568 0.567399 176.528 0.800733C176.494 1.0303 176.388 1.24303 176.226 1.40826C176.065 1.5735 175.855 1.68291 175.628 1.72073C171.935 2.3474 168.581 2.65073 165.568 2.63073C163.998 2.62073 162.798 3.35073 161.188 3.18073C160.808 3.14073 160.445 3.20407 160.098 3.37073L158.488 4.16073C158.195 4.30073 157.958 4.50407 157.778 4.77073C157.045 5.85073 156.111 6.47073 154.978 6.63073C153.258 6.87073 151.491 6.99073 149.678 6.99073C111.858 6.8974 73.5681 6.84073 34.8081 6.82073C28.6781 6.82073 24.4281 9.63073 23.3181 15.9507L0.628115 15.8107C0.50059 15.8104 0.376138 15.7713 0.2713 15.6987C0.166463 15.626 0.0861025 15.5233 0.0409006 15.404C-0.00430136 15.2848 -0.0122487 15.1546 0.0181151 15.0307C2.16812 6.40073 10.0881 -0.0792673 19.0981 0.00073271C53.2181 0.314066 87.8014 0.380733 122.848 0.200733C140.421 0.114066 157.991 0.197399 175.558 0.450733Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape42&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.4462109375 30.8548828125)&quot; fill=&quot;rgb(236,230,26)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M152.24 0L253.08 0.15C253.047 2.17 252.56 3.72667 251.62 4.82C250.867 5.69333 249.93 6.13667 248.81 6.15C221.383 6.39 194.363 6.58667 167.75 6.74C167.283 6.74 167.03 6.97333 166.99 7.44C166.87 8.95333 167.113 10.3433 167.72 11.61C167.847 11.8833 167.89 12.1667 167.85 12.46L167.63 14.18C167.577 14.5867 167.74 14.86 168.12 15C168.573 15.1667 168.867 15.3533 169 15.56L0 15.5C1.11 9.18 5.36 6.37 11.49 6.37C50.25 6.39 88.54 6.44667 126.36 6.54C128.173 6.54 129.94 6.42 131.66 6.18C132.793 6.02 133.727 5.4 134.46 4.32C134.64 4.05333 134.877 3.85 135.17 3.71L136.78 2.92C137.127 2.75333 137.49 2.69 137.87 2.73C139.48 2.9 140.68 2.17 142.25 2.18C145.263 2.2 148.617 1.89667 152.31 1.27C152.537 1.23218 152.746 1.12277 152.908 0.957532C153.07 0.792295 153.175 0.579568 153.21 0.35C153.25 0.116667 152.927 -1.13687e-13 152.24 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape43&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 19.3159081135321 30.86015625)&quot; fill=&quot;rgb(213,188,38)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M86.1197 0C93.6331 3.14 98.2231 7.99667 99.8897 14.57C99.9181 14.684 99.9111 14.804 99.8698 14.914C99.8285 15.024 99.7547 15.1189 99.6583 15.186C99.5618 15.2532 99.4472 15.2894 99.3297 15.29L2.03972 15.41C1.90639 15.2033 1.61306 15.0167 1.15972 14.85C0.779725 14.71 0.616391 14.4367 0.669725 14.03L0.889725 12.31C0.929725 12.0167 0.886391 11.7333 0.759725 11.46C0.153058 10.1933 -0.0902752 8.80333 0.0297248 7.29C0.0697248 6.82333 0.323058 6.59 0.789725 6.59C27.4031 6.43667 54.4231 6.24 81.8497 6C82.9697 5.98667 83.9064 5.54333 84.6597 4.67C85.5997 3.57667 86.0864 2.02 86.1197 0Z&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt;&lt;div class=&quot;w-16 h-16&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;fill-[${rgbColor} w-16 h-16&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 36 36&quot;&gt; &lt;defs&gt;&lt;/defs&gt; &lt;path id=&quot;shape0&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 10.393984646722 3.24851063866497)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M384.119 800.308C389.392 800.401 395.079 800.381 401.179 800.248C405.299 800.161 408.469 800.568 410.689 801.468C415.949 803.598 420.779 810.198 420.289 816.268C419.669 823.858 412.349 829.318 404.999 829.328C277.499 829.355 146.952 829.355 13.3589 829.328C8.63888 829.328 4.09888 825.978 1.87888 822.058C-2.73112 813.888 1.52888 803.918 10.4389 801.028C11.9855 800.528 13.9555 800.285 16.3489 800.298C22.1289 800.338 27.6889 800.265 33.0289 800.078C33.1769 800.076 33.3188 800.017 33.4263 799.913C33.5337 799.809 33.5989 799.668 33.6089 799.518C33.7489 797.391 34.0889 795.351 34.6289 793.398C38.5755 779.138 46.7822 768.285 59.2489 760.838C67.2389 756.068 77.9989 753.418 87.8689 753.798C91.7089 753.938 95.6189 754.578 99.3589 753.338C121.612 745.945 138.126 732.518 148.899 713.058C160.649 691.848 162.149 664.098 156.689 640.298C150.949 615.338 135.539 594.358 113.659 581.418C104.759 576.151 97.1322 571.378 90.7789 567.098C79.8722 559.751 69.4389 550.391 59.4789 539.018C41.7922 518.825 28.7222 496.301 20.2689 471.448C13.2089 450.695 9.41555 429.945 8.88888 409.198C8.39555 389.938 9.51888 370.588 12.2589 351.148C15.7689 326.188 18.7489 301.968 22.2689 277.258C23.1955 270.798 23.9055 264.308 24.3989 257.788C25.2922 245.915 26.1489 234.441 26.9689 223.368C28.2189 206.548 28.2189 189.968 28.2289 172.948C28.229 172.665 28.1641 172.386 28.0392 172.133C27.9143 171.88 27.7328 171.659 27.5089 171.488C4.71888 154.278 -3.35112 123.728 10.2489 97.8679C21.8189 75.8479 44.3589 62.0579 69.5789 63.3579C72.9922 63.5379 76.3389 64.1179 79.6189 65.0979C79.7826 65.1468 79.9567 65.1513 80.1235 65.1109C80.2903 65.0705 80.4439 64.9867 80.5689 64.8679C95.3422 50.8279 113.322 44.9613 134.509 47.2679C134.656 47.2852 134.804 47.2536 134.932 47.1778C135.061 47.102 135.161 46.9862 135.219 46.8479C136.972 42.6213 139.372 38.5079 142.419 34.5079C153.299 20.2379 166.749 9.32792 184.089 3.97792C204.569 -2.34875 224.312 -1.12875 243.319 7.63792C258.599 14.6779 272.559 26.6579 280.469 41.6579C280.596 41.9046 280.792 41.9846 281.059 41.8979C289.839 38.9646 299.389 37.9446 309.709 38.8379C326.729 40.3079 342.309 50.4379 353.989 63.2879C354.516 63.8679 355.166 64.1746 355.939 64.2079C361.419 64.4546 366.656 65.5513 371.649 67.4979C392.199 75.5079 406.519 91.1379 411.669 112.968C413.189 119.421 413.456 125.841 412.469 132.228C409.882 148.975 401.956 162.205 388.689 171.918C387.729 172.628 387.729 173.468 387.719 174.528C387.586 191.895 387.899 207.108 388.659 220.168C389.549 235.238 390.999 253.908 393.189 270.758C396.622 297.205 400.169 324.231 403.829 351.838C404.689 358.351 405.536 366.615 406.369 376.628C407.042 384.655 407.406 391.321 407.459 396.628C407.679 420.268 404.476 443.035 397.849 464.928C386.419 502.718 363.929 536.538 333.029 561.268C324.009 568.498 312.959 575.088 302.869 581.488C297.502 584.888 292.979 588.131 289.299 591.218C265.139 611.508 255.039 640.758 256.429 672.398C258.039 709.018 277.959 738.488 312.639 751.718C317.389 753.528 321.449 754.508 326.659 754.038C338.269 753.008 349.089 755.608 359.129 762.058C371.639 770.088 381.589 784.038 383.299 799.558C383.352 800.045 383.626 800.295 384.119 800.308ZM34.9389 123.938C34.6255 130.038 36.5689 135.461 40.7689 140.208C42.9155 142.635 45.5089 143.855 48.5489 143.868C57.4489 143.895 67.6722 143.898 79.2189 143.878C80.8589 143.878 81.9889 142.308 82.5389 140.958C82.6855 140.585 82.6522 140.231 82.4389 139.898C80.5522 136.978 80.8189 134.321 83.2389 131.928C87.7189 127.508 91.8289 130.808 94.8789 134.678C97.7389 138.308 103.749 143.708 108.819 143.768C117.746 143.855 126.882 143.871 136.229 143.818C142.909 143.768 150.429 136.098 154.769 131.618C156.269 130.068 158.029 129.188 160.259 129.608C164.159 130.328 166.106 132.778 166.099 136.958C166.099 138.248 165.299 139.248 164.549 140.218C164.261 140.59 164.13 141.06 164.184 141.527C164.239 141.994 164.474 142.422 164.839 142.718C166.006 143.678 167.326 144.148 168.799 144.128C196.979 143.828 224.629 143.751 251.749 143.898C253.509 143.905 255.106 143.581 256.539 142.928C256.721 142.847 256.872 142.708 256.969 142.533C257.065 142.358 257.101 142.155 257.073 141.955C257.044 141.756 256.951 141.571 256.809 141.428C253.879 138.498 254.059 132.908 257.859 130.608C262.999 127.498 266.539 130.248 269.939 133.818C274.619 138.718 280.959 143.828 287.779 143.838C296.859 143.865 305.789 143.868 314.569 143.848C321.399 143.828 328.259 136.098 332.759 131.638C335.086 129.338 337.459 128.821 339.879 130.088C343.819 132.161 344.612 135.195 342.259 139.188C342.08 139.495 341.983 139.844 341.98 140.198C341.976 140.552 342.066 140.901 342.239 141.208C343.319 143.118 344.959 144.088 347.179 144.068C354.066 144.001 361.086 143.928 368.239 143.848C370.352 143.821 372.149 143.235 373.629 142.088C379.589 137.488 382.416 131.278 382.109 123.458C381.969 109.928 371.589 99.2079 359.169 95.4779C358.953 95.4151 358.724 95.4137 358.51 95.4738C358.296 95.534 358.105 95.6534 357.959 95.8179C355.212 98.9446 351.706 100.435 347.439 100.288C341.069 100.068 338.009 96.4579 335.789 91.1479C332.202 82.5946 326.232 76.3279 317.879 72.3479C307.626 67.4546 296.802 67.5779 285.409 72.7179C282.069 74.2179 279.519 77.4279 276.309 79.4679C269.159 84.0279 261.339 79.8879 260.179 71.8979C258.606 61.0979 253.279 51.6813 244.199 43.6479C217.109 19.6679 175.399 28.6579 160.839 61.6279C158.766 66.3279 157.699 70.8946 157.639 75.3279C157.559 80.8679 155.339 86.2279 149.929 88.1679C144.262 90.2146 139.372 89.0513 135.259 84.6779C133.749 83.0679 132.859 81.0279 131.499 79.3379C131.286 79.0646 131.012 78.8779 130.679 78.7779C128.472 78.1113 126.346 77.8213 124.299 77.9079C113.326 78.3813 104.429 83.1579 97.6089 92.2379C94.2189 96.7479 94.0089 102.468 90.0089 106.458C86.8589 109.588 81.6689 110.618 77.7089 108.488C73.0155 105.968 70.9422 101.938 71.4889 96.3979C71.5755 95.5313 71.1922 95.0446 70.3389 94.9379C59.7789 93.5446 50.8422 96.5046 43.5289 103.818C38.0555 109.291 35.1922 115.998 34.9389 123.938ZM70.3189 172.868L60.5489 172.868C60.0022 172.868 59.7255 173.141 59.7189 173.688C59.4855 194.395 58.5655 214.878 56.9589 235.138C56.6655 238.818 56.5355 242.431 56.5689 245.978C56.5689 246.378 56.7689 246.578 57.1689 246.578L287.389 246.598L306.739 246.558L315.789 246.558C316.622 246.558 317.009 246.145 316.949 245.318C315.196 221.491 313.862 197.675 312.949 173.868C312.939 173.596 312.822 173.339 312.625 173.151C312.427 172.963 312.163 172.858 311.889 172.858L302.559 172.868L102.799 172.818L85.9489 172.788ZM345.659 172.918L336.369 172.938C335.276 172.938 334.742 173.485 334.769 174.578C335.302 197.585 336.822 220.561 339.329 243.508C339.429 244.421 339.629 245.291 339.929 246.118C339.981 246.258 340.075 246.379 340.199 246.463C340.322 246.547 340.469 246.591 340.619 246.588L349.349 246.478L358.959 246.388C359.056 246.388 359.152 246.362 359.234 246.311C359.317 246.259 359.384 246.186 359.427 246.099C359.47 246.012 359.488 245.915 359.479 245.818C358.169 231.648 357.729 217.678 356.929 203.398C356.396 193.905 356.209 183.971 356.369 173.598C356.371 173.466 356.337 173.335 356.273 173.221C356.208 173.106 356.114 173.011 356.001 172.945C355.888 172.88 355.759 172.846 355.629 172.848ZM285.139 272.498L66.0789 272.778L56.5789 272.838C56.2688 272.842 55.9676 272.941 55.7169 273.122C55.4662 273.302 55.2782 273.556 55.1789 273.848C53.5922 278.475 52.3889 283.555 51.5689 289.088C50.7689 294.528 50.0622 299.925 49.4489 305.278C45.8889 336.418 40.7589 367.688 40.1089 398.048C39.6822 418.115 42.5555 438.068 48.7289 457.908C57.0789 484.768 71.6889 508.708 92.4189 527.918C99.6455 535.011 106.386 540.555 112.639 544.548C120.992 549.888 128.172 554.048 134.179 557.028C152.646 566.188 172.619 571.811 194.099 573.898C204.712 574.931 216.622 574.575 229.829 572.828C240.356 571.415 249.986 569.291 258.719 566.458C291.679 555.758 320.169 534.368 341.689 507.238C357.689 487.038 368.109 461.898 373.119 436.298C376.719 417.938 377.099 398.938 375.549 380.068C373.189 351.368 369.499 324.108 365.409 293.848C364.422 286.581 363.209 279.731 361.769 273.298C361.729 273.128 361.634 272.976 361.499 272.867C361.365 272.758 361.199 272.699 361.029 272.698ZM175.049 601.798L173.779 601.438C173.706 601.418 173.627 601.42 173.555 601.444C173.482 601.467 173.419 601.512 173.372 601.571C173.326 601.631 173.299 601.702 173.295 601.776C173.29 601.851 173.309 601.925 173.349 601.988C181.216 615.461 186.096 629.798 187.989 644.998C191.409 672.498 189.379 702.208 176.579 727.128C176.519 727.245 176.501 727.378 176.529 727.506C176.556 727.635 176.626 727.75 176.728 727.832C176.831 727.914 176.958 727.959 177.089 727.958L184.889 727.958L212.439 727.998L239.709 727.978C239.797 727.978 239.883 727.947 239.952 727.892C240.021 727.837 240.069 727.76 240.088 727.674C240.108 727.588 240.097 727.497 240.059 727.418C237.179 721.278 233.859 715.348 231.849 708.858C226.049 690.188 225.419 668.538 227.059 648.518C228.539 630.531 233.812 615.041 242.879 602.048C243.406 601.301 243.229 601.051 242.349 601.298C237.362 602.725 232.109 603.628 226.589 604.008C209.329 605.188 192.149 604.451 175.049 601.798ZM222.789 744.938L176.989 744.988L164.659 745.098C164.465 745.098 164.274 745.14 164.1 745.221C163.925 745.302 163.771 745.421 163.649 745.568C156.089 754.508 148.589 762.038 139.249 767.968C138.469 768.461 138.542 768.711 139.469 768.718L156.889 768.828L252.749 768.818C260.109 768.858 267.559 768.855 275.099 768.808C276.206 768.801 277.269 768.665 278.289 768.398C278.709 768.285 278.732 768.118 278.359 767.898C268.546 762.031 260.359 754.481 253.799 745.248C253.572 744.935 253.266 744.781 252.879 744.788ZM86.8189 800.748L255.819 800.808L353.109 800.688C353.226 800.687 353.341 800.651 353.437 800.584C353.534 800.517 353.608 800.422 353.649 800.312C353.69 800.202 353.697 800.082 353.669 799.968C352.002 793.395 347.412 788.538 339.899 785.398L239.059 785.248C221.492 784.995 203.922 784.911 186.349 784.998C151.302 785.178 116.719 785.111 82.5989 784.798C73.5889 784.718 65.6689 791.198 63.5189 799.828C63.4885 799.952 63.4965 800.082 63.5417 800.201C63.5869 800.32 63.6672 800.423 63.7721 800.496C63.8769 800.568 64.0014 800.608 64.1289 800.608Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape1&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6223046875 4.3066710451255)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.17 93.3591L341.7 94.8091C341.347 94.9025 341.043 95.0758 340.79 95.3291C334.81 101.209 327.56 101.079 319.06 100.739C316.15 100.619 313.98 99.6891 312.72 96.9491C310.21 91.4791 305.03 84.9891 298.07 88.5091C296.217 89.4491 294.677 90.6225 293.45 92.0291C288.01 98.2791 282.29 103.559 274.1 105.299C270.267 106.112 266.1 106.416 261.6 106.209C253.04 105.819 244.67 101.199 239.15 94.8491C232.37 87.0391 226.88 84.2491 219.24 92.9691C214.89 97.9391 209.89 101.049 202.97 101.219C196.37 101.379 189.917 101.426 183.61 101.359C182.93 101.352 182.43 100.989 182.11 100.269C182.01 100.04 181.975 99.7876 182.008 99.5391C182.042 99.2906 182.143 99.0554 182.3 98.8591C183.04 97.9325 183.813 97.0725 184.62 96.2791C187.09 93.8491 185.64 89.9291 183.51 87.8291C180.65 85.0091 175.91 85.9891 173.39 88.9391C172.23 90.2925 171.17 91.6391 170.21 92.9791C163.5 102.299 152.67 101.929 142.47 100.679C134.9 99.7591 131.64 94.3891 126.62 89.6591C123.633 86.8525 120.593 86.8391 117.5 89.6191C112.63 93.9791 108.24 99.7591 102.47 102.719C88.07 110.129 72.61 106.679 62.57 94.0391C58.62 89.0591 52.95 85.2191 47.21 90.7591C44.54 93.3491 43.94 96.9991 40.53 99.0891C36.59 101.509 29.55 101.139 24.26 101.029C18.64 100.899 13.25 100.999 9.85 97.1991C7.82 94.9191 4 93.8291 2.11 96.9691C1.02333 98.7691 0.446667 98.6225 0.38 96.5291C0.366667 95.9891 0.24 95.0925 0 93.8391C0.253333 85.8991 3.11667 79.1925 8.59 73.7191C15.9033 66.4058 24.84 63.4458 35.4 64.8391C36.2533 64.9458 36.6367 65.4325 36.55 66.2991C36.0033 71.8391 38.0767 75.8691 42.77 78.3891C46.73 80.5191 51.92 79.4891 55.07 76.3591C59.07 72.3691 59.28 66.6491 62.67 62.1391C69.49 53.0591 78.3867 48.2825 89.36 47.8091C91.4067 47.7225 93.5333 48.0125 95.74 48.6791C96.0733 48.7791 96.3467 48.9658 96.56 49.2391C97.92 50.9291 98.81 52.9691 100.32 54.5791C104.433 58.9525 109.323 60.1158 114.99 58.0691C120.4 56.1291 122.62 50.7691 122.7 45.2291C122.76 40.7958 123.827 36.2291 125.9 31.5291C140.46 -1.44087 182.17 -10.4309 209.26 13.5491C218.34 21.5825 223.667 30.9991 225.24 41.7991C226.4 49.7891 234.22 53.9291 241.37 49.3691C244.58 47.3291 247.13 44.1191 250.47 42.6191C261.863 37.4791 272.687 37.3558 282.94 42.2491C291.293 46.2291 297.263 52.4958 300.85 61.0491C303.07 66.3591 306.13 69.9691 312.5 70.1891C316.767 70.3358 320.273 68.8458 323.02 65.7191C323.166 65.5546 323.357 65.4352 323.571 65.3751C323.785 65.3149 324.014 65.3163 324.23 65.3791C336.65 69.1091 347.03 79.8291 347.17 93.3591Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape2&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6211575655465 7.33540715628013)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.203 7.20842C347.509 15.0284 344.683 21.2384 338.723 25.8384C337.243 26.9851 335.446 27.5718 333.333 27.5984C326.179 27.6784 319.159 27.7518 312.273 27.8184C310.053 27.8384 308.413 26.8684 307.333 24.9584C307.159 24.651 307.07 24.3028 307.074 23.9484C307.077 23.594 307.173 23.2458 307.353 22.9384C309.706 18.9451 308.913 15.9118 304.973 13.8384C302.553 12.5718 300.179 13.0884 297.853 15.3884C293.353 19.8484 286.493 27.5784 279.663 27.5984C270.883 27.6184 261.953 27.6151 252.873 27.5884C246.053 27.5784 239.713 22.4684 235.033 17.5684C231.633 13.9984 228.093 11.2484 222.953 14.3584C219.153 16.6584 218.973 22.2484 221.903 25.1784C222.045 25.3214 222.137 25.5067 222.166 25.706C222.195 25.9053 222.159 26.108 222.062 26.2834C221.966 26.4588 221.815 26.5975 221.633 26.6784C220.199 27.3318 218.603 27.6551 216.843 27.6484C189.723 27.5018 162.073 27.5784 133.893 27.8784C132.419 27.8984 131.099 27.4284 129.933 26.4684C129.567 26.1723 129.332 25.7446 129.278 25.2775C129.224 24.8105 129.355 24.3403 129.643 23.9684C130.393 22.9984 131.193 21.9984 131.193 20.7084C131.199 16.5284 129.253 14.0784 125.353 13.3584C123.123 12.9384 121.363 13.8184 119.863 15.3684C115.523 19.8484 108.003 27.5184 101.323 27.5684C91.976 27.6218 82.8393 27.6051 73.9126 27.5184C68.8426 27.4584 62.8326 22.0584 59.9726 18.4284C56.9226 14.5584 52.8126 11.2584 48.3326 15.6784C45.9126 18.0718 45.646 20.7284 47.5326 23.6484C47.746 23.9818 47.7793 24.3351 47.6326 24.7084C47.0826 26.0584 45.9526 27.6284 44.3126 27.6284C32.766 27.6484 22.5426 27.6451 13.6426 27.6184C10.6026 27.6051 8.0093 26.3851 5.86263 23.9584C1.66263 19.2118 -0.280704 13.7884 0.0326292 7.68842C0.272629 8.94175 0.399296 9.83842 0.412629 10.3784C0.479296 12.4718 1.05596 12.6184 2.14263 10.8184C4.03263 7.67842 7.85263 8.76842 9.88263 11.0484C13.2826 14.8484 18.6726 14.7484 24.2926 14.8784C29.5826 14.9884 36.6226 15.3584 40.5626 12.9384C43.9726 10.8484 44.5726 7.19842 47.2426 4.60842C52.9826 -0.931581 58.6526 2.90842 62.6026 7.88842C72.6426 20.5284 88.1026 23.9784 102.503 16.5684C108.273 13.6084 112.663 7.82842 117.533 3.46842C120.626 0.688419 123.666 0.701752 126.653 3.50842C131.673 8.23842 134.933 13.6084 142.503 14.5284C152.703 15.7784 163.533 16.1484 170.243 6.82842C171.203 5.48842 172.263 4.14175 173.423 2.78842C175.943 -0.161581 180.683 -1.14158 183.543 1.67842C185.673 3.77842 187.123 7.69842 184.653 10.1284C183.846 10.9218 183.073 11.7818 182.333 12.7084C182.175 12.9047 182.074 13.1399 182.041 13.3884C182.007 13.6369 182.043 13.8894 182.143 14.1184C182.463 14.8384 182.963 15.2018 183.643 15.2084C189.949 15.2751 196.403 15.2284 203.003 15.0684C209.923 14.8984 214.923 11.7884 219.273 6.81842C226.913 -1.90158 232.403 0.888419 239.183 8.69842C244.703 15.0484 253.073 19.6684 261.633 20.0584C266.133 20.2651 270.299 19.9618 274.133 19.1484C282.323 17.4084 288.043 12.1284 293.483 5.87842C294.709 4.47175 296.249 3.29842 298.103 2.35842C305.063 -1.16158 310.243 5.32842 312.753 10.7984C314.013 13.5384 316.183 14.4684 319.093 14.5884C327.593 14.9284 334.843 15.0584 340.823 9.17842C341.076 8.92509 341.379 8.75175 341.733 8.65842Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape3&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.7941352600339 9.3230859375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M17.6779 0C16.5513 11.84 15.9213 19.36 15.7879 22.56C15.3079 33.9733 14.6346 46.28 13.7679 59.48C13.6013 62.04 13.1046 63.7467 12.2779 64.6C8.55793 68.45 -0.30207 67.53 0.00793038 61.06C1.34793 33.3133 2.02793 12.9867 2.04793 0.08Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape4&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9413128810975 9.32414062500001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M201.657 0.05C201.63 7.10333 201.687 11.5967 201.827 13.53C203.28 33.53 204.617 53.6 205.837 73.74L186.487 73.78L193.557 73.61C193.714 73.6076 193.867 73.5609 193.998 73.4752C194.129 73.3896 194.234 73.2685 194.299 73.126C194.364 72.9835 194.388 72.8254 194.367 72.67C193.367 64.75 192.894 56.7733 192.947 48.74C196.9 43.82 196.69 38.93 192.317 34.07C191.537 32.47 191.137 31.2867 191.117 30.52C190.984 25.7933 191.01 21.2667 191.197 16.94C191.213 16.5684 191.128 16.1993 190.951 15.872C190.773 15.5446 190.51 15.2711 190.189 15.0807C189.868 14.8902 189.501 14.7897 189.127 14.79L153.317 14.9C152.777 12.9667 151.747 11.28 150.227 9.84C148.927 8.60667 147.257 7.7 145.217 7.12C138.364 5.17333 133.557 7.71667 130.797 14.75C116.39 14.8967 101.944 14.9467 87.4571 14.9C61.1271 14.81 34.7871 15.13 8.5371 15.06C6.00377 15.0533 4.15377 14.7633 2.9871 14.19C0.773767 13.11 -0.209566 11.2233 0.0371003 8.53C0.150434 7.29667 0.770434 4.45333 1.8971 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape5&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.5460546875 9.32519283839548)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M3.69 73.6301L0 0.0700704L9.97 7.03745e-05C10.1004 -0.00175254 10.2289 0.031869 10.3421 0.0974247C10.4553 0.16298 10.5492 0.258107 10.6139 0.372872C10.6786 0.487637 10.7118 0.617903 10.71 0.75007C10.55 11.1234 10.7367 21.0567 11.27 30.5501C12.07 44.8301 12.51 58.8001 13.82 72.9701C13.8293 73.0668 13.8114 73.1643 13.7681 73.2514C13.7249 73.3384 13.6581 73.4116 13.5754 73.4627C13.4926 73.5137 13.3972 73.5405 13.3 73.5401Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape6&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.3825550063776 9.3230859375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M13.7551 0.08C13.7351 12.9867 13.0551 33.3133 11.7151 61.06C11.4051 67.53 20.2651 68.45 23.9851 64.6C24.8118 63.7467 25.3084 62.04 25.4751 59.48C26.3418 46.28 27.0151 33.9733 27.4951 22.56C27.6284 19.36 28.2584 11.84 29.3851 0L46.2351 0.03C45.1084 4.48333 44.4884 7.32667 44.3751 8.56C44.1284 11.2533 45.1118 13.14 47.3251 14.22C48.4918 14.7933 50.3418 15.0833 52.8751 15.09C79.1251 15.16 105.465 14.84 131.795 14.93C146.282 14.9767 160.728 14.9267 175.135 14.78C174.568 20.8133 176.498 24.9267 180.925 27.12C183.338 28.3133 185.805 28.72 188.325 28.34C194.755 27.36 198.095 21.26 197.655 14.93L233.465 14.82C233.839 14.8197 234.206 14.9202 234.527 15.1107C234.848 15.3011 235.111 15.5746 235.289 15.902C235.466 16.2293 235.551 16.5984 235.535 16.97C235.348 21.2967 235.322 25.8233 235.455 30.55C235.475 31.3167 235.875 32.5 236.655 34.1C232.788 31.5133 229.168 30.99 225.795 32.53C211.935 38.83 224.195 59.55 237.285 48.77C237.232 56.8033 237.705 64.78 238.705 72.7C238.726 72.8554 238.702 73.0135 238.637 73.156C238.572 73.2985 238.467 73.4196 238.336 73.5052C238.205 73.5909 238.052 73.6376 237.895 73.64L230.825 73.81L0.605102 73.79C0.205102 73.79 0.00510204 73.59 0.00510204 73.19C-0.0282313 69.6433 0.101769 66.03 0.395102 62.35C2.00177 42.09 2.92177 21.6067 3.1551 0.9C3.16177 0.353333 3.43844 0.08 3.9851 0.08ZM127.005 36.5C127.005 34.413 126.456 32.3624 125.412 30.555C124.369 28.7476 122.867 27.2464 121.06 26.203C119.253 25.1595 117.202 24.61 115.115 24.61C111.963 24.61 108.937 25.8635 106.708 28.0925C104.479 30.3215 103.225 33.3478 103.225 36.5C103.225 39.6522 104.479 42.6785 106.708 44.9075C108.937 47.1365 111.963 48.39 115.115 48.39C117.202 48.39 119.253 47.8405 121.06 46.797C122.867 45.7536 124.369 44.2524 125.412 42.445C126.456 40.6376 127.005 38.587 127.005 36.5ZM75.9704 37.4184C76.0574 34.3019 74.8637 31.2741 72.6541 29.007C70.4445 26.7398 67.3954 25.4143 64.1835 25.3246C62.057 25.2652 59.9523 25.7501 58.0818 26.7303C56.2114 27.7105 54.6403 29.152 53.5271 30.9092C52.414 32.6664 51.7974 34.6782 51.7398 36.7416C51.6528 39.8581 52.8465 42.8859 55.0561 45.153C57.2657 47.4202 60.3148 48.7457 63.5267 48.8354C65.6532 48.8948 67.7579 48.4099 69.6284 47.4297C71.4988 46.4495 73.0699 45.008 74.1831 43.2508C75.2962 41.4936 75.9128 39.4818 75.9704 37.4184ZM183.874 50.7982C183.856 49.4819 183.468 48.1937 182.749 47.0635C182.03 45.9334 181.006 45.0007 179.779 44.3595C178.552 43.7184 177.166 43.3911 175.76 43.4107C173.637 43.4404 171.61 44.2595 170.128 45.6863C168.646 47.1131 167.828 49.0336 167.856 51.0218C167.874 52.3381 168.262 53.6263 168.981 54.7565C169.7 55.8866 170.725 56.8193 171.951 57.4605C173.178 58.1016 174.564 58.4289 175.97 58.4093C178.093 58.3796 180.121 57.5605 181.603 56.1337C183.084 54.7069 183.902 52.7864 183.874 50.7982Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape7&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.0305953125001 9.32554685349047)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.0064 0.0100006L9.3364 6.11826e-07C9.61064 -0.000292647 9.87453 0.104847 10.0721 0.293135C10.2697 0.481423 10.3861 0.738544 10.3964 1.01C11.3097 24.8167 12.6431 48.6333 14.3964 72.46C14.4564 73.2867 14.0697 73.7 13.2364 73.7L4.1864 73.7C2.9664 53.56 1.62973 33.49 0.1764 13.49C0.0364 11.5567 -0.0202667 7.06333 0.0064 0.0100006Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape8&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1631696428572 9.32765624999999)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M10.891 0L14.581 73.56L5.85095 73.67C5.70139 73.6731 5.55452 73.6294 5.43088 73.5452C5.30724 73.461 5.21287 73.3403 5.16095 73.2C4.86095 72.3733 4.66095 71.5033 4.56095 70.59C2.05429 47.6433 0.534286 24.6667 0.000952381 1.66C-0.0257143 0.566667 0.507619 0.02 1.60095 0.02Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape9&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.5362571970961 9.55219950584632)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.6165 8.41299C23.0565 14.743 19.7165 20.843 13.2865 21.823C10.7665 22.203 8.2998 21.7963 5.88646 20.603C1.4598 18.4097 -0.470205 14.2963 0.0964619 8.26299C2.85646 1.22966 7.66313 -1.31367 14.5165 0.632992C16.5565 1.21299 18.2265 2.11966 19.5265 3.35299C21.0465 4.79299 22.0765 6.47966 22.6165 8.41299Z&quot;&gt;&lt;/path&gt; &lt;circle id=&quot;shape10&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.0115625 10.18828125)&quot; r=&quot;11.89&quot; cx=&quot;11.89&quot; cy=&quot;11.89&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape11&quot; transform=&quot;matrix(0.0351425431068875 0.000981620111375468 -0.000981620111375468 0.0351425431068875 14.2130771675543 10.2015061448131)&quot; rx=&quot;12.12&quot; ry=&quot;11.76&quot; cx=&quot;12.12&quot; cy=&quot;11.76&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape12&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 20.1057469902912 10.4364122450525)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M16.9732 2.43205C21.3465 7.29205 21.5565 12.1821 17.6032 17.1021C4.5132 27.8821 -7.7468 7.16205 6.1132 0.862052C9.48653 -0.677948 13.1065 -0.154615 16.9732 2.43205Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape13&quot; transform=&quot;matrix(0.0351528231097021 -0.000490857902548076 0.000490857902548076 0.0351528231097021 18.2800569526222 10.8531762234766)&quot; rx=&quot;8.01&quot; ry=&quot;7.5&quot; cx=&quot;8.01&quot; cy=&quot;7.5&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape14&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.47390625 12.828515625)&quot; fill=&quot;rgb(191,129,58)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0 300.33C1.52 298.69 3.53 298.057 6.03 298.43C6.10297 298.443 6.17377 298.447 6.24 298.44C6.65333 298.413 6.88667 298.26 6.94 297.98C7 297.66 7.19333 297.493 7.52 297.48L10.29 297.39C10.4233 297.383 10.5567 297.367 10.69 297.34C11.0167 297.267 11.1733 297.127 11.16 296.92C11.1467 296.7 11.2467 296.563 11.46 296.51C12.1467 296.337 12.7433 295.997 13.25 295.49C13.49 295.257 13.58 294.973 13.52 294.64C13.1333 292.653 12.8767 290.647 12.75 288.62C12.69 287.79 12.27 287.35 11.7 286.83C11.4533 286.603 11.3933 286.337 11.52 286.03C11.8533 285.197 11.6767 284.573 10.99 284.16C10.7367 284 10.46 283.923 10.16 283.93L6.56 284.02C15.1 281.92 21.0833 280.04 24.51 278.38C27.5033 276.927 30.4033 275.357 33.21 273.67C33.319 273.603 33.3974 273.495 33.4282 273.371C33.4589 273.246 33.4397 273.115 33.3746 273.004C33.3096 272.894 33.2037 272.813 33.08 272.78C32.5067 272.62 31.9433 272.67 31.39 272.93C63.5767 260.003 88.4967 238.95 106.15 209.77C109.223 204.703 112.093 199 114.76 192.66C118.06 184.807 120.343 178.587 121.61 174C123.097 168.613 124.457 162.397 125.69 155.35C126.657 149.857 126.873 144.25 126.34 138.53C127.853 138.57 128.907 138.097 129.5 137.11C131.56 133.67 131.433 130.473 129.12 127.52C128.24 126.39 127.07 126.39 125.77 126.38C120.017 126.347 114.427 126.37 109 126.45C108.613 125.77 108.27 125.09 107.97 124.41C107.69 123.77 107.527 123.037 107.48 122.21C106.953 112.977 106.213 103.723 105.26 94.45C110.127 94.5633 114.617 94.5833 118.73 94.51C121.27 94.47 123.93 94.86 126 93.31C128.053 91.77 128.717 89.61 127.99 86.83C127.23 83.89 124.98 82.2967 121.24 82.05L120.9 72.32C124.973 70.3667 126.23 67.5767 124.67 63.95C123.697 61.6833 121.82 60.52 119.04 60.46C117.273 58.24 116.223 56.5633 115.89 55.43C113.43 47.1033 110.547 38.9133 107.24 30.86C106.947 30.1467 107 29.0333 107.4 27.52C109.087 27.4933 110.883 27.5267 112.79 27.62C115.45 27.7533 117.403 26.9667 118.65 25.26C121.02 22.01 120.02 17.98 116.55 16.23C115.597 15.75 114.193 15.5133 112.34 15.52C107.533 15.54 102.823 15.4767 98.21 15.33C97.6033 13.9433 96.9433 12.6033 96.23 11.31C94.38 7.96 93.99 4.82 92.56 1.46C92.4467 1.18667 92.5067 0.963333 92.74 0.79L93.19 0.46C93.4567 0.273333 93.4267 0.176667 93.1 0.17L55.31 0L131.2 0.2C131.371 0.200762 131.536 0.26037 131.671 0.369176C131.805 0.477981 131.9 0.629779 131.94 0.8C133.38 7.23333 134.593 14.0833 135.58 21.35C139.67 51.61 143.36 78.87 145.72 107.57C147.27 126.44 146.89 145.44 143.29 163.8C138.28 189.4 127.86 214.54 111.86 234.74C90.34 261.87 61.85 283.26 28.89 293.96C20.1567 296.793 10.5267 298.917 0 300.33Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape15&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.2758764491296 12.828515625)&quot; fill=&quot;rgb(213,188,38)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M231.61 0L269.4 0.17C269.726 0.176667 269.756 0.273333 269.49 0.46L269.04 0.79C268.806 0.963333 268.746 1.18667 268.86 1.46C270.29 4.82 270.68 7.96 272.53 11.31C273.243 12.6033 273.903 13.9433 274.51 15.33C268.76 17.07 269.07 27.78 275.82 27.53C278.38 27.43 281.006 27.4267 283.7 27.52C283.3 29.0333 283.246 30.1467 283.54 30.86C286.846 38.9133 289.73 47.1033 292.19 55.43C292.523 56.5633 293.573 58.24 295.34 60.46C290.98 60.76 286.806 61.0267 282.82 61.26C277.7 61.56 274.45 67.2 278.08 71.26C278.86 72.1333 280.413 72.6 282.74 72.66C287.386 72.7733 292.206 72.66 297.2 72.32L297.54 82.05C293.013 81.9567 288.443 81.9633 283.83 82.07C281.84 82.11 280.61 82.75 279.5 84.26C276.44 88.44 277.126 91.8367 281.56 94.45C282.513 103.723 283.253 112.977 283.78 122.21C283.826 123.037 283.99 123.77 284.27 124.41C284.57 125.09 284.913 125.77 285.3 126.45C282.193 127.497 280.633 129.463 280.62 132.35C280.613 134.79 281.763 136.753 284.07 138.24C281.93 156.593 277.493 173.123 270.76 187.83C261.606 207.817 247.22 225.063 227.6 239.57C218.546 246.263 208.406 252.023 197.18 256.85C191.52 259.28 187.21 264.45 191.61 270.42C195.03 275.03 202.58 274.56 207.69 272.93C208.243 272.67 208.806 272.62 209.38 272.78C209.503 272.813 209.609 272.894 209.674 273.004C209.739 273.115 209.758 273.246 209.728 273.371C209.697 273.495 209.619 273.603 209.51 273.67C206.703 275.357 203.803 276.927 200.81 278.38C197.383 280.04 191.4 281.92 182.86 284.02C165.386 287.427 148.786 288.113 133.06 286.08C116.433 283.94 99.2895 279.17 81.6295 271.77C75.1162 269.043 68.6828 266.14 62.3295 263.06C54.3762 259.2 46.8962 254.463 39.8895 248.85C40.5695 248.377 41.3595 247.947 42.2595 247.56C44.5695 246.55 46.3695 244.3 44.1695 241.99C29.1962 226.303 18.1928 209.247 11.1595 190.82C1.95285 166.687 -1.55715 141.62 0.629514 115.62C2.01618 99.0867 3.45618 82.5733 4.94951 66.08C5.49618 59.9533 6.20618 53.32 7.07951 46.18C8.95285 30.8733 10.7762 15.5733 12.5495 0.28ZM230.747 11.7302C228.758 9.7412 226.058 8.62261 223.245 8.62261C220.432 8.62261 217.731 9.7412 215.742 11.7302L213.89 13.5829C211.901 15.5719 210.782 18.2724 210.782 21.0853C210.782 23.8982 211.901 26.5987 213.89 28.5877L215.092 29.7898C217.081 31.7788 219.781 32.8974 222.594 32.8974C225.407 32.8974 228.108 31.7788 230.097 29.7898L231.949 27.9371C233.938 25.9481 235.057 23.2476 235.057 20.4347C235.057 17.6218 233.938 14.9213 231.949 12.9323ZM47.1595 186.78C39.7128 170.84 35.7195 154.833 35.1795 138.76C34.9528 131.94 35.0895 124.72 35.5895 117.1C37.1495 93.44 39.2662 67.4833 41.9395 39.23C42.3395 35.0167 42.6262 30.7267 42.7995 26.36C43.4195 10.9 25.2095 12.45 24.4195 25.69C23.0462 48.79 21.1195 72.2233 18.6395 95.99C17.6595 105.337 16.9995 114.63 16.6595 123.87C16.3328 132.65 16.6595 140.653 17.6395 147.88C19.5062 161.707 22.9728 175.147 28.0395 188.2C29.1795 191.153 30.6662 194.07 32.4995 196.95C35.2995 201.37 41.5395 202.72 45.3395 198.89C48.7328 195.483 49.3395 191.447 47.1595 186.78ZM87.1943 37.8021C86.8236 36.4743 85.902 35.3574 84.6342 34.6994C83.3663 34.0413 81.8534 33.8945 80.4311 34.2916C79.0088 34.6887 77.7908 35.598 77.0472 36.8177C76.3037 38.0374 76.094 39.4701 76.4647 40.7979C76.8355 42.1257 77.757 43.2426 79.0249 43.9006C80.2927 44.5587 81.8056 44.7055 83.2279 44.3084C84.6502 43.9113 85.8682 43.002 86.6118 41.7823C87.3554 40.5626 87.565 39.1299 87.1943 37.8021ZM242.9 63.3691C242.905 60.5116 242.14 57.7024 240.682 55.2252C239.224 52.7479 237.124 50.6888 234.594 49.2556C232.064 47.8225 229.192 47.0651 226.268 47.06C223.344 47.0549 220.469 47.8022 217.934 49.2266C215.399 50.6509 213.292 52.7027 211.826 55.1748C210.359 57.6469 209.585 60.4534 209.58 63.3109C209.575 66.1684 210.34 68.9776 211.797 71.4548C213.255 73.9321 215.355 75.9912 217.885 77.4244C220.415 78.8575 223.287 79.6149 226.211 79.62C229.135 79.6251 232.01 78.8778 234.545 77.4534C237.08 76.0291 239.187 73.9773 240.653 71.5052C242.12 69.0331 242.895 66.2266 242.9 63.3691ZM85.9041 71.8823C88.1531 72.912 90.7367 72.9736 93.0816 72.0534C95.4266 71.1333 97.3455 69.3049 98.4127 66.9739C99.1193 65.4306 99.4215 63.7348 99.2889 62.0574C99.1563 60.38 98.5935 58.7796 97.6572 57.4176C96.721 56.0556 95.4439 54.9794 93.9549 54.2977C91.7059 53.268 89.1223 53.2064 86.7774 54.1266C84.4325 55.0467 82.5135 56.8751 81.4463 59.2061C80.7398 60.7494 80.4375 62.4452 80.5701 64.1226C80.7028 65.8 81.2656 67.4004 82.2018 68.7624C83.1381 70.1244 84.4151 71.2006 85.9041 71.8823ZM60.6086 105.171C63.2448 106.638 66.3725 106.974 69.2978 106.105C72.223 105.236 74.7122 103.231 76.213 100.535C77.7138 97.8381 78.1063 94.6659 77.3035 91.7217C76.5007 88.7775 74.5666 86.2966 71.9304 84.8293C69.2942 83.362 66.1665 83.0257 63.2413 83.8948C60.316 84.7639 57.8268 86.7691 56.326 89.4655C54.8252 92.1619 54.4327 95.3341 55.2355 98.2783C56.0384 101.222 57.9724 103.703 60.6086 105.171ZM187.08 98.11C187.08 96.1959 186.318 94.3582 184.965 93.0047C183.611 91.6512 181.774 90.89 179.86 90.89C177.945 90.89 176.108 91.6512 174.754 93.0047C173.401 94.3582 172.64 96.1959 172.64 98.11C172.64 100.024 173.401 101.862 174.754 103.215C176.108 104.569 177.945 105.33 179.86 105.33C181.127 105.33 182.372 104.996 183.47 104.363C184.567 103.729 185.479 102.817 186.112 101.72C186.746 100.623 187.08 99.3773 187.08 98.11ZM234.564 99.0027C233.705 97.863 232.551 96.9774 231.217 96.4351C229.883 95.8929 228.416 95.7129 226.964 95.9133C225.513 96.1138 224.127 96.6877 222.947 97.5771C221.766 98.4665 220.833 99.6405 220.24 100.981C219.647 102.321 219.416 103.78 219.57 105.212C219.723 106.644 220.256 107.998 221.115 109.137C221.974 110.277 223.128 111.163 224.462 111.705C225.796 112.247 227.263 112.427 228.715 112.227C230.166 112.026 231.552 111.452 232.732 110.563C233.913 109.673 234.846 108.499 235.439 107.159C236.032 105.819 236.263 104.36 236.109 102.928C235.956 101.496 235.423 100.142 234.564 99.0027ZM47.9695 214.56C45.1695 220.83 50.0195 225.32 54.0495 229.45C57.6895 233.19 61.8995 236.09 66.6995 232.86C71.8895 229.38 72.0595 223.24 67.9795 218.66C64.2095 214.41 60.6395 209.6 54.3295 209.99C51.4095 210.17 49.1195 211.99 47.9695 214.56Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape16&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.8026079545455 12.838359375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M26.0114 0C24.238 15.2933 22.4147 30.5933 20.5414 45.9C19.668 53.04 18.958 59.6733 18.4114 65.8C16.918 82.2933 15.478 98.8067 14.0914 115.34C11.9047 141.34 15.4147 166.407 24.6214 190.54C31.6547 208.967 42.658 226.023 57.6314 241.71C59.8314 244.02 58.0314 246.27 55.7214 247.28C54.8214 247.667 54.0314 248.097 53.3514 248.57C51.9014 250.07 52.3314 253.14 52.3514 255.14C31.6214 235.93 17.0114 211.99 8.66137 185.13C2.48804 165.29 -0.385293 145.337 0.0413737 125.27C0.691374 94.91 5.82137 63.64 9.38137 32.5C9.99471 27.1467 10.7014 21.75 11.5014 16.31C12.3214 10.7767 13.5247 5.69667 15.1114 1.07C15.2107 0.778294 15.3987 0.524438 15.6494 0.343583C15.9001 0.162728 16.2013 0.0636261 16.5114 0.06Z&quot;&gt;&lt;/path&gt; &lt;rect id=&quot;shape17&quot; transform=&quot;matrix(0.0248592227760896 -0.0248592227760896 0.0248592227760896 0.0248592227760896 19.531681996495 13.569794617477)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; width=&quot;23.84&quot; height=&quot;22.92&quot; rx=&quot;10.61&quot; ry=&quot;10.61&quot;&gt;&lt;/rect&gt; &lt;path id=&quot;shape18&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.857255859375 13.3649990428515)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M30.6225 171.52C32.8025 176.187 32.1958 180.223 28.8025 183.63C25.0025 187.46 18.7625 186.11 15.9625 181.69C14.1292 178.81 12.6425 175.893 11.5025 172.94C6.43583 159.887 2.96917 146.447 1.1025 132.62C0.1225 125.393 -0.204167 117.39 0.1225 108.61C0.4625 99.37 1.1225 90.0767 2.1025 80.73C4.5825 56.9634 6.50917 33.53 7.8825 10.43C8.6725 -2.80997 26.8825 -4.35997 26.2625 11.1C26.0892 15.4667 25.8025 19.7567 25.4025 23.97C22.7292 52.2234 20.6125 78.18 19.0525 101.84C18.5525 109.46 18.4158 116.68 18.6425 123.5C19.1825 139.573 23.1758 155.58 30.6225 171.52Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape19&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.7841415488515 13.3674609375)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.0522 0C8.66553 0.146667 13.3755 0.21 18.1822 0.19C20.0355 0.183333 21.4389 0.42 22.3922 0.9C25.8622 2.65 26.8622 6.68 24.4922 9.93C23.2455 11.6367 21.2922 12.4233 18.6322 12.29C16.7255 12.1967 14.9289 12.1633 13.2422 12.19C10.5489 12.0967 7.9222 12.1 5.3622 12.2C-1.3878 12.45 -1.6978 1.74 4.0522 0Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape20&quot; transform=&quot;matrix(0.0338611839889802 -0.00945421244350544 0.00945421244350544 0.0338611839889802 14.9149266129752 14.0867380565676)&quot; rx=&quot;5.57&quot; ry=&quot;5.2&quot; cx=&quot;5.57&quot; cy=&quot;5.2&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape21&quot; transform=&quot;matrix(0.0351561964539828 6.13592003636124e-05 -6.13592003636124e-05 0.0351561964539828 19.6449060698586 14.4819473774511)&quot; rx=&quot;16.66&quot; ry=&quot;16.28&quot; cx=&quot;16.66&quot; cy=&quot;16.28&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape22&quot; transform=&quot;matrix(-0.0146348716029047 0.031965331958686 -0.031965331958686 -0.0146348716029047 15.8772166930746 14.8739620295146)&quot; rx=&quot;9.67&quot; ry=&quot;9.33&quot; cx=&quot;9.67&quot; cy=&quot;9.33&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape23&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.997793706651 14.9540625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M18.805 0C21.585 0.06 23.4616 1.22333 24.435 3.49C25.995 7.11667 24.7383 9.90667 20.665 11.86C15.6716 12.2 10.8516 12.3133 6.20498 12.2C3.87831 12.14 2.32498 11.6733 1.54498 10.8C-2.08502 6.74 1.16498 1.1 6.28498 0.8C10.2716 0.566667 14.445 0.3 18.805 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape24&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.0361349190606 15.7107890625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M19.9144 0.0653333C23.6544 0.312 25.9044 1.90533 26.6644 4.84533C27.3911 7.62533 26.7277 9.78533 24.6744 11.3253C22.6044 12.8753 19.9444 12.4853 17.4044 12.5253C13.2911 12.5987 8.80105 12.5787 3.93438 12.4653C-0.498949 9.852 -1.18562 6.45533 1.87438 2.27533C2.98438 0.765333 4.21438 0.125333 6.20438 0.0853333C10.8177 -0.0213333 15.3877 -0.028 19.9144 0.0653333Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape25&quot; transform=&quot;matrix(-0.0170977282180133 0.0307185547160906 -0.0307185547160906 -0.0170977282180133 15.1542587716268 16.0053675452257)&quot; rx=&quot;11.64&quot; ry=&quot;11.38&quot; cx=&quot;11.64&quot; cy=&quot;11.38&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;circle id=&quot;shape26&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.345234375 16.0238671875)&quot; r=&quot;7.22&quot; cx=&quot;7.22&quot; cy=&quot;7.22&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape27&quot; transform=&quot;matrix(0.0280770296501001 -0.0211575594076892 0.0211575594076892 0.0280770296501001 19.8774398273616 16.4371069616574)&quot; rx=&quot;8.42&quot; ry=&quot;8.13&quot; cx=&quot;8.42&quot; cy=&quot;8.13&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape28&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1414052368516 17.2710454963236)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.02 12.1647L3.45003 11.8747C1.14336 10.388 -0.00663785 8.42471 2.88184e-05 5.98471C0.0133622 3.09804 1.57336 1.13137 4.68003 0.0847059C10.1067 0.00470588 15.6967 -0.0186275 21.45 0.0147059C22.75 0.0247059 23.92 0.0247059 24.8 1.15471C27.1134 4.10804 27.24 7.30471 25.18 10.7447C24.5867 11.7314 23.5334 12.2047 22.02 12.1647Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape29&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.9485123620206 17.688515625)&quot; fill=&quot;rgb(191,146,59)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M94.2701 0L112.84 0.29C113.373 6.01 113.157 11.6167 112.19 17.11C110.957 24.1567 109.597 30.3733 108.11 35.76C106.843 40.3467 104.56 46.5667 101.26 54.42C98.5934 60.76 95.7234 66.4633 92.6501 71.53C74.9968 100.71 50.0768 121.763 17.8901 134.69C12.7801 136.32 5.23009 136.79 1.81009 132.18C-2.58991 126.21 1.72009 121.04 7.38009 118.61C18.6068 113.783 28.7468 108.023 37.8001 101.33C57.4201 86.8233 71.8068 69.5767 80.9601 49.59C87.6934 34.8833 92.1301 18.3533 94.2701 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape30&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9331058615201 20.210194296345)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.830544 4.59225C1.98054 2.02225 4.27054 0.202251 7.19054 0.0222511C13.5005 -0.367749 17.0705 4.44225 20.8405 8.69225C24.9205 13.2723 24.7505 19.4123 19.5605 22.8923C14.7605 26.1223 10.5505 23.2223 6.91054 19.4823C2.88054 15.3523 -1.96946 10.8623 0.830544 4.59225Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape31&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.6404577789765 21.5771484375)&quot; fill=&quot;rgb(191,146,59)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.07476 0C8.08142 5.61333 15.5614 10.35 23.5148 14.21C29.8681 17.29 36.3014 20.1933 42.8148 22.92C60.4748 30.32 77.6181 35.09 94.2448 37.23C109.971 39.2633 126.571 38.5767 144.045 35.17L147.645 35.08C147.945 35.0733 148.221 35.15 148.475 35.31C149.161 35.7233 149.338 36.3467 149.005 37.18C148.878 37.4867 148.938 37.7533 149.185 37.98C149.755 38.5 150.175 38.94 150.235 39.77C150.361 41.7967 150.618 43.8033 151.005 45.79C151.065 46.1233 150.975 46.4067 150.735 46.64C150.228 47.1467 149.631 47.4867 148.945 47.66C148.731 47.7133 148.631 47.85 148.645 48.07C148.658 48.2767 148.501 48.4167 148.175 48.49C148.041 48.5167 147.908 48.5333 147.775 48.54L145.005 48.63C144.678 48.6433 144.485 48.81 144.425 49.13C144.371 49.41 144.138 49.5633 143.725 49.59C143.659 49.5967 143.588 49.5933 143.515 49.58C141.015 49.2067 139.005 49.84 137.485 51.48C124.278 53.2267 112.368 53.5833 101.755 52.55C80.2748 50.4633 60.3014 44.84 41.8348 35.68C35.8281 32.7 28.6481 28.54 20.2948 23.2C14.0414 19.2067 7.30142 13.6633 0.0747565 6.57C0.0547565 4.57 -0.375243 1.5 1.07476 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape32&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.548046875 24.3846604970638)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M37.39 126.792L36.84 125.732C36.6867 125.445 36.61 125.139 36.61 124.812L36.29 50.1519C39.97 50.1319 42.74 50.0419 44.93 47.3519C46.0567 45.9652 46.4067 44.4152 45.98 42.7019C44.81 38.0219 40.08 37.5119 35.72 37.6019L35.91 26.2919C40.16 26.9019 44.77 27.8519 48.81 25.9619C52.26 24.3519 53.31 20.2319 50.85 17.2519C48.51 14.4319 45.36 14.2119 41.99 14.2719C35.7567 14.3852 29.3167 14.4052 22.67 14.3319C19.49 14.3019 16.81 15.9619 15.14 18.6319C15.2 16.6619 12.86 15.6819 11.44 14.7519C10.6133 14.2119 9.90667 13.5852 9.32 12.8719C6.57333 9.53188 3.78 6.23188 0.94 2.97188C0.46 2.41855 0.146667 1.62521 0 0.591879C17.1 3.24521 34.28 3.98188 51.54 2.80188C57.06 2.42188 62.3133 1.51855 67.3 0.0918792C68.18 -0.154787 68.3567 0.0952125 67.83 0.841879C58.7633 13.8352 53.49 29.3252 52.01 47.3119C50.37 67.3319 51 88.9819 56.8 107.652C58.81 114.142 62.13 120.072 65.01 126.212C65.0485 126.291 65.0589 126.382 65.0394 126.468C65.02 126.554 64.9718 126.631 64.9029 126.686C64.834 126.741 64.7483 126.772 64.66 126.772Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape33&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.486355851717 24.3923298330305)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.75477 0.373729C1.90143 1.40706 2.21477 2.2004 2.69477 2.75373C5.53477 6.01373 8.3281 9.31373 11.0748 12.6537C11.6614 13.3671 12.3681 13.9937 13.1948 14.5337C14.6148 15.4637 16.9548 16.4437 16.8948 18.4137L16.5848 19.0537C15.9714 19.3604 15.6748 19.8204 15.6948 20.4337C15.8148 23.3437 16.3448 26.1237 18.0248 28.6937C19.9714 31.6737 22.1714 34.5471 24.6248 37.3137C19.6548 39.6737 18.5548 46.9937 24.3448 49.3137C24.1981 53.2071 24.2048 57.1237 24.3648 61.0637C24.5581 65.7371 24.5748 69.6437 24.4148 72.7837C24.2014 77.0371 23.9914 81.3304 23.7848 85.6637C23.1248 99.8304 19.6748 113.244 13.4348 125.904C13.2814 126.21 13.0314 126.384 12.6848 126.424L11.5948 126.534L3.79477 126.534C3.66373 126.534 3.5364 126.49 3.43437 126.408C3.33234 126.325 3.26171 126.21 3.23447 126.082C3.20722 125.954 3.22499 125.82 3.28477 125.704C16.0848 100.784 18.1148 71.0737 14.6948 43.5737C12.8014 28.3737 7.92143 14.0371 0.0547669 0.563729C0.0152725 0.50031 -0.00361813 0.426609 0.000572506 0.352292C0.00476314 0.277975 0.0318434 0.20644 0.0782619 0.147067C0.12468 0.0876949 0.188315 0.0431997 0.26082 0.0194171C0.333326 -0.0043654 0.411387 -0.00634806 0.484767 0.0137292Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape34&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.0617214476865 24.8861307529877)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M21.2988 12.0278C16.7455 11.8878 12.1288 11.8545 7.44881 11.9278C4.74215 11.9678 2.94548 11.7312 2.05881 11.2178C0.238812 10.1645 -0.374521 8.0945 0.218812 5.00784L0.528812 4.36784C2.19881 1.69784 4.87881 0.0378364 8.05881 0.0678364C14.7055 0.14117 21.1455 0.12117 27.3788 0.00783636C30.7488 -0.0521636 33.8988 0.167836 36.2388 2.98784C38.6988 5.96784 37.6488 10.0878 34.1988 11.6978C30.1588 13.5878 25.5488 12.6378 21.2988 12.0278Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape35&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.038091694079 25.0621875000001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.890947 0C0.297614 3.08667 0.910947 5.15667 2.73095 6.21C3.61761 6.72333 5.41428 6.96 8.12095 6.92C12.8009 6.84667 17.4176 6.88 21.9709 7.02L21.7809 18.33L8.93095 18.26C6.47761 15.4933 4.27761 12.62 2.33095 9.64C0.650947 7.07 0.120947 4.29 0.000947368 1.38C-0.0190526 0.766667 0.277614 0.306667 0.890947 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape36&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.2047130847683 25.704140625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.19149 0L17.0415 0.07C21.4015 -0.02 26.1315 0.49 27.3015 5.17C27.7282 6.88333 27.3782 8.43333 26.2515 9.82C24.0615 12.51 21.2915 12.6 17.6115 12.62L3.91149 12C-1.87851 9.68 -0.778506 2.36 4.19149 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape37&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.893984375 26.126015625)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M12.75 0L26.45 0.62L26.77 75.28C26.77 75.6067 26.8467 75.9133 27 76.2L27.55 77.26L0 77.22L1.09 77.11C1.43667 77.07 1.68667 76.8967 1.84 76.59C8.08 63.93 11.53 50.5167 12.19 36.35C12.3967 32.0167 12.6067 27.7233 12.82 23.47C12.98 20.33 12.9633 16.4233 12.77 11.75C12.61 7.81 12.6033 3.89333 12.75 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape38&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.22640625 29.4324536132813)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M29.96 24.0302C30.7067 23.5835 30.1467 23.1702 28.28 22.7902C27.96 22.7235 27.6733 22.5835 27.42 22.3702C24.9333 20.2235 22.8967 18.7069 21.31 17.8202C12.91 13.1069 5.80667 7.21687 0 0.150208L30.09 0.000208333C30.4767 -0.00645833 30.7833 0.146875 31.01 0.460208C37.57 9.69354 45.7567 17.2435 55.57 23.1102C55.9433 23.3302 55.92 23.4969 55.5 23.6102C54.48 23.8769 53.4167 24.0135 52.31 24.0202C44.77 24.0669 37.32 24.0702 29.96 24.0302Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape39&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.2706541442871 29.4394921875)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M38.2747 0C35.2147 4.74667 31.2681 10.0433 26.4347 15.89C23.4547 19.49 20.7014 22.14 18.1747 23.84L0.754727 23.73C-0.17194 23.7233 -0.245273 23.4733 0.534727 22.98C9.87473 17.05 17.3747 9.52 24.9347 0.58C25.0571 0.432797 25.211 0.314351 25.3856 0.233119C25.5601 0.151886 25.7511 0.109846 25.9447 0.11Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape40&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.909609375 29.437734375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M65.9 0C71.7067 7.06667 78.81 12.9567 87.21 17.67C88.7967 18.5567 90.8333 20.0733 93.32 22.22C93.5733 22.4333 93.86 22.5733 94.18 22.64C96.0467 23.02 96.6067 23.4333 95.86 23.88L0 23.89C2.52667 22.19 5.28 19.54 8.26 15.94C13.0933 10.0933 17.04 4.79667 20.1 0.05Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape41&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.6264334548969 30.8390367406574)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M175.558 0.450733C176.245 0.450733 176.568 0.567399 176.528 0.800733C176.494 1.0303 176.388 1.24303 176.226 1.40826C176.065 1.5735 175.855 1.68291 175.628 1.72073C171.935 2.3474 168.581 2.65073 165.568 2.63073C163.998 2.62073 162.798 3.35073 161.188 3.18073C160.808 3.14073 160.445 3.20407 160.098 3.37073L158.488 4.16073C158.195 4.30073 157.958 4.50407 157.778 4.77073C157.045 5.85073 156.111 6.47073 154.978 6.63073C153.258 6.87073 151.491 6.99073 149.678 6.99073C111.858 6.8974 73.5681 6.84073 34.8081 6.82073C28.6781 6.82073 24.4281 9.63073 23.3181 15.9507L0.628115 15.8107C0.50059 15.8104 0.376138 15.7713 0.2713 15.6987C0.166463 15.626 0.0861025 15.5233 0.0409006 15.404C-0.00430136 15.2848 -0.0122487 15.1546 0.0181151 15.0307C2.16812 6.40073 10.0881 -0.0792673 19.0981 0.00073271C53.2181 0.314066 87.8014 0.380733 122.848 0.200733C140.421 0.114066 157.991 0.197399 175.558 0.450733Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape42&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.4462109375 30.8548828125)&quot; fill=&quot;rgb(213,188,38)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M152.24 0L253.08 0.15C253.047 2.17 252.56 3.72667 251.62 4.82C250.867 5.69333 249.93 6.13667 248.81 6.15C221.383 6.39 194.363 6.58667 167.75 6.74C167.283 6.74 167.03 6.97333 166.99 7.44C166.87 8.95333 167.113 10.3433 167.72 11.61C167.847 11.8833 167.89 12.1667 167.85 12.46L167.63 14.18C167.577 14.5867 167.74 14.86 168.12 15C168.573 15.1667 168.867 15.3533 169 15.56L0 15.5C1.11 9.18 5.36 6.37 11.49 6.37C50.25 6.39 88.54 6.44667 126.36 6.54C128.173 6.54 129.94 6.42 131.66 6.18C132.793 6.02 133.727 5.4 134.46 4.32C134.64 4.05333 134.877 3.85 135.17 3.71L136.78 2.92C137.127 2.75333 137.49 2.69 137.87 2.73C139.48 2.9 140.68 2.17 142.25 2.18C145.263 2.2 148.617 1.89667 152.31 1.27C152.537 1.23218 152.746 1.12277 152.908 0.957532C153.07 0.792295 153.175 0.579568 153.21 0.35C153.25 0.116667 152.927 -1.13687e-13 152.24 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape43&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 19.3159081135321 30.86015625)&quot; fill=&quot;rgb(191,146,59)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M86.1197 0C93.6331 3.14 98.2231 7.99667 99.8897 14.57C99.9181 14.684 99.9111 14.804 99.8698 14.914C99.8285 15.024 99.7547 15.1189 99.6583 15.186C99.5618 15.2532 99.4472 15.2894 99.3297 15.29L2.03972 15.41C1.90639 15.2033 1.61306 15.0167 1.15972 14.85C0.779725 14.71 0.616391 14.4367 0.669725 14.03L0.889725 12.31C0.929725 12.0167 0.886391 11.7333 0.759725 11.46C0.153058 10.1933 -0.0902752 8.80333 0.0297248 7.29C0.0697248 6.82333 0.323058 6.59 0.789725 6.59C27.4031 6.43667 54.4231 6.24 81.8497 6C82.9697 5.98667 83.9064 5.54333 84.6597 4.67C85.5997 3.57667 86.0864 2.02 86.1197 0Z&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt;&lt;div class=&quot;w-16 h-16&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;fill-[${rgbColor} w-16 h-16&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 36 36&quot;&gt; &lt;defs&gt;&lt;/defs&gt; &lt;path id=&quot;shape0&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 10.393984646722 3.24851063866497)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M384.119 800.308C389.392 800.401 395.079 800.381 401.179 800.248C405.299 800.161 408.469 800.568 410.689 801.468C415.949 803.598 420.779 810.198 420.289 816.268C419.669 823.858 412.349 829.318 404.999 829.328C277.499 829.355 146.952 829.355 13.3589 829.328C8.63888 829.328 4.09888 825.978 1.87888 822.058C-2.73112 813.888 1.52888 803.918 10.4389 801.028C11.9855 800.528 13.9555 800.285 16.3489 800.298C22.1289 800.338 27.6889 800.265 33.0289 800.078C33.1769 800.076 33.3188 800.017 33.4263 799.913C33.5337 799.809 33.5989 799.668 33.6089 799.518C33.7489 797.391 34.0889 795.351 34.6289 793.398C38.5755 779.138 46.7822 768.285 59.2489 760.838C67.2389 756.068 77.9989 753.418 87.8689 753.798C91.7089 753.938 95.6189 754.578 99.3589 753.338C121.612 745.945 138.126 732.518 148.899 713.058C160.649 691.848 162.149 664.098 156.689 640.298C150.949 615.338 135.539 594.358 113.659 581.418C104.759 576.151 97.1322 571.378 90.7789 567.098C79.8722 559.751 69.4389 550.391 59.4789 539.018C41.7922 518.825 28.7222 496.301 20.2689 471.448C13.2089 450.695 9.41555 429.945 8.88888 409.198C8.39555 389.938 9.51888 370.588 12.2589 351.148C15.7689 326.188 18.7489 301.968 22.2689 277.258C23.1955 270.798 23.9055 264.308 24.3989 257.788C25.2922 245.915 26.1489 234.441 26.9689 223.368C28.2189 206.548 28.2189 189.968 28.2289 172.948C28.229 172.665 28.1641 172.386 28.0392 172.133C27.9143 171.88 27.7328 171.659 27.5089 171.488C4.71888 154.278 -3.35112 123.728 10.2489 97.8679C21.8189 75.8479 44.3589 62.0579 69.5789 63.3579C72.9922 63.5379 76.3389 64.1179 79.6189 65.0979C79.7826 65.1468 79.9567 65.1513 80.1235 65.1109C80.2903 65.0705 80.4439 64.9867 80.5689 64.8679C95.3422 50.8279 113.322 44.9613 134.509 47.2679C134.656 47.2852 134.804 47.2536 134.932 47.1778C135.061 47.102 135.161 46.9862 135.219 46.8479C136.972 42.6213 139.372 38.5079 142.419 34.5079C153.299 20.2379 166.749 9.32792 184.089 3.97792C204.569 -2.34875 224.312 -1.12875 243.319 7.63792C258.599 14.6779 272.559 26.6579 280.469 41.6579C280.596 41.9046 280.792 41.9846 281.059 41.8979C289.839 38.9646 299.389 37.9446 309.709 38.8379C326.729 40.3079 342.309 50.4379 353.989 63.2879C354.516 63.8679 355.166 64.1746 355.939 64.2079C361.419 64.4546 366.656 65.5513 371.649 67.4979C392.199 75.5079 406.519 91.1379 411.669 112.968C413.189 119.421 413.456 125.841 412.469 132.228C409.882 148.975 401.956 162.205 388.689 171.918C387.729 172.628 387.729 173.468 387.719 174.528C387.586 191.895 387.899 207.108 388.659 220.168C389.549 235.238 390.999 253.908 393.189 270.758C396.622 297.205 400.169 324.231 403.829 351.838C404.689 358.351 405.536 366.615 406.369 376.628C407.042 384.655 407.406 391.321 407.459 396.628C407.679 420.268 404.476 443.035 397.849 464.928C386.419 502.718 363.929 536.538 333.029 561.268C324.009 568.498 312.959 575.088 302.869 581.488C297.502 584.888 292.979 588.131 289.299 591.218C265.139 611.508 255.039 640.758 256.429 672.398C258.039 709.018 277.959 738.488 312.639 751.718C317.389 753.528 321.449 754.508 326.659 754.038C338.269 753.008 349.089 755.608 359.129 762.058C371.639 770.088 381.589 784.038 383.299 799.558C383.352 800.045 383.626 800.295 384.119 800.308ZM34.9389 123.938C34.6255 130.038 36.5689 135.461 40.7689 140.208C42.9155 142.635 45.5089 143.855 48.5489 143.868C57.4489 143.895 67.6722 143.898 79.2189 143.878C80.8589 143.878 81.9889 142.308 82.5389 140.958C82.6855 140.585 82.6522 140.231 82.4389 139.898C80.5522 136.978 80.8189 134.321 83.2389 131.928C87.7189 127.508 91.8289 130.808 94.8789 134.678C97.7389 138.308 103.749 143.708 108.819 143.768C117.746 143.855 126.882 143.871 136.229 143.818C142.909 143.768 150.429 136.098 154.769 131.618C156.269 130.068 158.029 129.188 160.259 129.608C164.159 130.328 166.106 132.778 166.099 136.958C166.099 138.248 165.299 139.248 164.549 140.218C164.261 140.59 164.13 141.06 164.184 141.527C164.239 141.994 164.474 142.422 164.839 142.718C166.006 143.678 167.326 144.148 168.799 144.128C196.979 143.828 224.629 143.751 251.749 143.898C253.509 143.905 255.106 143.581 256.539 142.928C256.721 142.847 256.872 142.708 256.969 142.533C257.065 142.358 257.101 142.155 257.073 141.955C257.044 141.756 256.951 141.571 256.809 141.428C253.879 138.498 254.059 132.908 257.859 130.608C262.999 127.498 266.539 130.248 269.939 133.818C274.619 138.718 280.959 143.828 287.779 143.838C296.859 143.865 305.789 143.868 314.569 143.848C321.399 143.828 328.259 136.098 332.759 131.638C335.086 129.338 337.459 128.821 339.879 130.088C343.819 132.161 344.612 135.195 342.259 139.188C342.08 139.495 341.983 139.844 341.98 140.198C341.976 140.552 342.066 140.901 342.239 141.208C343.319 143.118 344.959 144.088 347.179 144.068C354.066 144.001 361.086 143.928 368.239 143.848C370.352 143.821 372.149 143.235 373.629 142.088C379.589 137.488 382.416 131.278 382.109 123.458C381.969 109.928 371.589 99.2079 359.169 95.4779C358.953 95.4151 358.724 95.4137 358.51 95.4738C358.296 95.534 358.105 95.6534 357.959 95.8179C355.212 98.9446 351.706 100.435 347.439 100.288C341.069 100.068 338.009 96.4579 335.789 91.1479C332.202 82.5946 326.232 76.3279 317.879 72.3479C307.626 67.4546 296.802 67.5779 285.409 72.7179C282.069 74.2179 279.519 77.4279 276.309 79.4679C269.159 84.0279 261.339 79.8879 260.179 71.8979C258.606 61.0979 253.279 51.6813 244.199 43.6479C217.109 19.6679 175.399 28.6579 160.839 61.6279C158.766 66.3279 157.699 70.8946 157.639 75.3279C157.559 80.8679 155.339 86.2279 149.929 88.1679C144.262 90.2146 139.372 89.0513 135.259 84.6779C133.749 83.0679 132.859 81.0279 131.499 79.3379C131.286 79.0646 131.012 78.8779 130.679 78.7779C128.472 78.1113 126.346 77.8213 124.299 77.9079C113.326 78.3813 104.429 83.1579 97.6089 92.2379C94.2189 96.7479 94.0089 102.468 90.0089 106.458C86.8589 109.588 81.6689 110.618 77.7089 108.488C73.0155 105.968 70.9422 101.938 71.4889 96.3979C71.5755 95.5313 71.1922 95.0446 70.3389 94.9379C59.7789 93.5446 50.8422 96.5046 43.5289 103.818C38.0555 109.291 35.1922 115.998 34.9389 123.938ZM70.3189 172.868L60.5489 172.868C60.0022 172.868 59.7255 173.141 59.7189 173.688C59.4855 194.395 58.5655 214.878 56.9589 235.138C56.6655 238.818 56.5355 242.431 56.5689 245.978C56.5689 246.378 56.7689 246.578 57.1689 246.578L287.389 246.598L306.739 246.558L315.789 246.558C316.622 246.558 317.009 246.145 316.949 245.318C315.196 221.491 313.862 197.675 312.949 173.868C312.939 173.596 312.822 173.339 312.625 173.151C312.427 172.963 312.163 172.858 311.889 172.858L302.559 172.868L102.799 172.818L85.9489 172.788ZM345.659 172.918L336.369 172.938C335.276 172.938 334.742 173.485 334.769 174.578C335.302 197.585 336.822 220.561 339.329 243.508C339.429 244.421 339.629 245.291 339.929 246.118C339.981 246.258 340.075 246.379 340.199 246.463C340.322 246.547 340.469 246.591 340.619 246.588L349.349 246.478L358.959 246.388C359.056 246.388 359.152 246.362 359.234 246.311C359.317 246.259 359.384 246.186 359.427 246.099C359.47 246.012 359.488 245.915 359.479 245.818C358.169 231.648 357.729 217.678 356.929 203.398C356.396 193.905 356.209 183.971 356.369 173.598C356.371 173.466 356.337 173.335 356.273 173.221C356.208 173.106 356.114 173.011 356.001 172.945C355.888 172.88 355.759 172.846 355.629 172.848ZM285.139 272.498L66.0789 272.778L56.5789 272.838C56.2688 272.842 55.9676 272.941 55.7169 273.122C55.4662 273.302 55.2782 273.556 55.1789 273.848C53.5922 278.475 52.3889 283.555 51.5689 289.088C50.7689 294.528 50.0622 299.925 49.4489 305.278C45.8889 336.418 40.7589 367.688 40.1089 398.048C39.6822 418.115 42.5555 438.068 48.7289 457.908C57.0789 484.768 71.6889 508.708 92.4189 527.918C99.6455 535.011 106.386 540.555 112.639 544.548C120.992 549.888 128.172 554.048 134.179 557.028C152.646 566.188 172.619 571.811 194.099 573.898C204.712 574.931 216.622 574.575 229.829 572.828C240.356 571.415 249.986 569.291 258.719 566.458C291.679 555.758 320.169 534.368 341.689 507.238C357.689 487.038 368.109 461.898 373.119 436.298C376.719 417.938 377.099 398.938 375.549 380.068C373.189 351.368 369.499 324.108 365.409 293.848C364.422 286.581 363.209 279.731 361.769 273.298C361.729 273.128 361.634 272.976 361.499 272.867C361.365 272.758 361.199 272.699 361.029 272.698ZM175.049 601.798L173.779 601.438C173.706 601.418 173.627 601.42 173.555 601.444C173.482 601.467 173.419 601.512 173.372 601.571C173.326 601.631 173.299 601.702 173.295 601.776C173.29 601.851 173.309 601.925 173.349 601.988C181.216 615.461 186.096 629.798 187.989 644.998C191.409 672.498 189.379 702.208 176.579 727.128C176.519 727.245 176.501 727.378 176.529 727.506C176.556 727.635 176.626 727.75 176.728 727.832C176.831 727.914 176.958 727.959 177.089 727.958L184.889 727.958L212.439 727.998L239.709 727.978C239.797 727.978 239.883 727.947 239.952 727.892C240.021 727.837 240.069 727.76 240.088 727.674C240.108 727.588 240.097 727.497 240.059 727.418C237.179 721.278 233.859 715.348 231.849 708.858C226.049 690.188 225.419 668.538 227.059 648.518C228.539 630.531 233.812 615.041 242.879 602.048C243.406 601.301 243.229 601.051 242.349 601.298C237.362 602.725 232.109 603.628 226.589 604.008C209.329 605.188 192.149 604.451 175.049 601.798ZM222.789 744.938L176.989 744.988L164.659 745.098C164.465 745.098 164.274 745.14 164.1 745.221C163.925 745.302 163.771 745.421 163.649 745.568C156.089 754.508 148.589 762.038 139.249 767.968C138.469 768.461 138.542 768.711 139.469 768.718L156.889 768.828L252.749 768.818C260.109 768.858 267.559 768.855 275.099 768.808C276.206 768.801 277.269 768.665 278.289 768.398C278.709 768.285 278.732 768.118 278.359 767.898C268.546 762.031 260.359 754.481 253.799 745.248C253.572 744.935 253.266 744.781 252.879 744.788ZM86.8189 800.748L255.819 800.808L353.109 800.688C353.226 800.687 353.341 800.651 353.437 800.584C353.534 800.517 353.608 800.422 353.649 800.312C353.69 800.202 353.697 800.082 353.669 799.968C352.002 793.395 347.412 788.538 339.899 785.398L239.059 785.248C221.492 784.995 203.922 784.911 186.349 784.998C151.302 785.178 116.719 785.111 82.5989 784.798C73.5889 784.718 65.6689 791.198 63.5189 799.828C63.4885 799.952 63.4965 800.082 63.5417 800.201C63.5869 800.32 63.6672 800.423 63.7721 800.496C63.8769 800.568 64.0014 800.608 64.1289 800.608Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape1&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6223046875 4.3066710451255)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.17 93.3591L341.7 94.8091C341.347 94.9025 341.043 95.0758 340.79 95.3291C334.81 101.209 327.56 101.079 319.06 100.739C316.15 100.619 313.98 99.6891 312.72 96.9491C310.21 91.4791 305.03 84.9891 298.07 88.5091C296.217 89.4491 294.677 90.6225 293.45 92.0291C288.01 98.2791 282.29 103.559 274.1 105.299C270.267 106.112 266.1 106.416 261.6 106.209C253.04 105.819 244.67 101.199 239.15 94.8491C232.37 87.0391 226.88 84.2491 219.24 92.9691C214.89 97.9391 209.89 101.049 202.97 101.219C196.37 101.379 189.917 101.426 183.61 101.359C182.93 101.352 182.43 100.989 182.11 100.269C182.01 100.04 181.975 99.7876 182.008 99.5391C182.042 99.2906 182.143 99.0554 182.3 98.8591C183.04 97.9325 183.813 97.0725 184.62 96.2791C187.09 93.8491 185.64 89.9291 183.51 87.8291C180.65 85.0091 175.91 85.9891 173.39 88.9391C172.23 90.2925 171.17 91.6391 170.21 92.9791C163.5 102.299 152.67 101.929 142.47 100.679C134.9 99.7591 131.64 94.3891 126.62 89.6591C123.633 86.8525 120.593 86.8391 117.5 89.6191C112.63 93.9791 108.24 99.7591 102.47 102.719C88.07 110.129 72.61 106.679 62.57 94.0391C58.62 89.0591 52.95 85.2191 47.21 90.7591C44.54 93.3491 43.94 96.9991 40.53 99.0891C36.59 101.509 29.55 101.139 24.26 101.029C18.64 100.899 13.25 100.999 9.85 97.1991C7.82 94.9191 4 93.8291 2.11 96.9691C1.02333 98.7691 0.446667 98.6225 0.38 96.5291C0.366667 95.9891 0.24 95.0925 0 93.8391C0.253333 85.8991 3.11667 79.1925 8.59 73.7191C15.9033 66.4058 24.84 63.4458 35.4 64.8391C36.2533 64.9458 36.6367 65.4325 36.55 66.2991C36.0033 71.8391 38.0767 75.8691 42.77 78.3891C46.73 80.5191 51.92 79.4891 55.07 76.3591C59.07 72.3691 59.28 66.6491 62.67 62.1391C69.49 53.0591 78.3867 48.2825 89.36 47.8091C91.4067 47.7225 93.5333 48.0125 95.74 48.6791C96.0733 48.7791 96.3467 48.9658 96.56 49.2391C97.92 50.9291 98.81 52.9691 100.32 54.5791C104.433 58.9525 109.323 60.1158 114.99 58.0691C120.4 56.1291 122.62 50.7691 122.7 45.2291C122.76 40.7958 123.827 36.2291 125.9 31.5291C140.46 -1.44087 182.17 -10.4309 209.26 13.5491C218.34 21.5825 223.667 30.9991 225.24 41.7991C226.4 49.7891 234.22 53.9291 241.37 49.3691C244.58 47.3291 247.13 44.1191 250.47 42.6191C261.863 37.4791 272.687 37.3558 282.94 42.2491C291.293 46.2291 297.263 52.4958 300.85 61.0491C303.07 66.3591 306.13 69.9691 312.5 70.1891C316.767 70.3358 320.273 68.8458 323.02 65.7191C323.166 65.5546 323.357 65.4352 323.571 65.3751C323.785 65.3149 324.014 65.3163 324.23 65.3791C336.65 69.1091 347.03 79.8291 347.17 93.3591Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape2&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6211575655465 7.33540715628013)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.203 7.20842C347.509 15.0284 344.683 21.2384 338.723 25.8384C337.243 26.9851 335.446 27.5718 333.333 27.5984C326.179 27.6784 319.159 27.7518 312.273 27.8184C310.053 27.8384 308.413 26.8684 307.333 24.9584C307.159 24.651 307.07 24.3028 307.074 23.9484C307.077 23.594 307.173 23.2458 307.353 22.9384C309.706 18.9451 308.913 15.9118 304.973 13.8384C302.553 12.5718 300.179 13.0884 297.853 15.3884C293.353 19.8484 286.493 27.5784 279.663 27.5984C270.883 27.6184 261.953 27.6151 252.873 27.5884C246.053 27.5784 239.713 22.4684 235.033 17.5684C231.633 13.9984 228.093 11.2484 222.953 14.3584C219.153 16.6584 218.973 22.2484 221.903 25.1784C222.045 25.3214 222.137 25.5067 222.166 25.706C222.195 25.9053 222.159 26.108 222.062 26.2834C221.966 26.4588 221.815 26.5975 221.633 26.6784C220.199 27.3318 218.603 27.6551 216.843 27.6484C189.723 27.5018 162.073 27.5784 133.893 27.8784C132.419 27.8984 131.099 27.4284 129.933 26.4684C129.567 26.1723 129.332 25.7446 129.278 25.2775C129.224 24.8105 129.355 24.3403 129.643 23.9684C130.393 22.9984 131.193 21.9984 131.193 20.7084C131.199 16.5284 129.253 14.0784 125.353 13.3584C123.123 12.9384 121.363 13.8184 119.863 15.3684C115.523 19.8484 108.003 27.5184 101.323 27.5684C91.976 27.6218 82.8393 27.6051 73.9126 27.5184C68.8426 27.4584 62.8326 22.0584 59.9726 18.4284C56.9226 14.5584 52.8126 11.2584 48.3326 15.6784C45.9126 18.0718 45.646 20.7284 47.5326 23.6484C47.746 23.9818 47.7793 24.3351 47.6326 24.7084C47.0826 26.0584 45.9526 27.6284 44.3126 27.6284C32.766 27.6484 22.5426 27.6451 13.6426 27.6184C10.6026 27.6051 8.0093 26.3851 5.86263 23.9584C1.66263 19.2118 -0.280704 13.7884 0.0326292 7.68842C0.272629 8.94175 0.399296 9.83842 0.412629 10.3784C0.479296 12.4718 1.05596 12.6184 2.14263 10.8184C4.03263 7.67842 7.85263 8.76842 9.88263 11.0484C13.2826 14.8484 18.6726 14.7484 24.2926 14.8784C29.5826 14.9884 36.6226 15.3584 40.5626 12.9384C43.9726 10.8484 44.5726 7.19842 47.2426 4.60842C52.9826 -0.931581 58.6526 2.90842 62.6026 7.88842C72.6426 20.5284 88.1026 23.9784 102.503 16.5684C108.273 13.6084 112.663 7.82842 117.533 3.46842C120.626 0.688419 123.666 0.701752 126.653 3.50842C131.673 8.23842 134.933 13.6084 142.503 14.5284C152.703 15.7784 163.533 16.1484 170.243 6.82842C171.203 5.48842 172.263 4.14175 173.423 2.78842C175.943 -0.161581 180.683 -1.14158 183.543 1.67842C185.673 3.77842 187.123 7.69842 184.653 10.1284C183.846 10.9218 183.073 11.7818 182.333 12.7084C182.175 12.9047 182.074 13.1399 182.041 13.3884C182.007 13.6369 182.043 13.8894 182.143 14.1184C182.463 14.8384 182.963 15.2018 183.643 15.2084C189.949 15.2751 196.403 15.2284 203.003 15.0684C209.923 14.8984 214.923 11.7884 219.273 6.81842C226.913 -1.90158 232.403 0.888419 239.183 8.69842C244.703 15.0484 253.073 19.6684 261.633 20.0584C266.133 20.2651 270.299 19.9618 274.133 19.1484C282.323 17.4084 288.043 12.1284 293.483 5.87842C294.709 4.47175 296.249 3.29842 298.103 2.35842C305.063 -1.16158 310.243 5.32842 312.753 10.7984C314.013 13.5384 316.183 14.4684 319.093 14.5884C327.593 14.9284 334.843 15.0584 340.823 9.17842C341.076 8.92509 341.379 8.75175 341.733 8.65842Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape3&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.7941352600339 9.3230859375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M17.6779 0C16.5513 11.84 15.9213 19.36 15.7879 22.56C15.3079 33.9733 14.6346 46.28 13.7679 59.48C13.6013 62.04 13.1046 63.7467 12.2779 64.6C8.55793 68.45 -0.30207 67.53 0.00793038 61.06C1.34793 33.3133 2.02793 12.9867 2.04793 0.08Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape4&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9413128810975 9.32414062500001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M201.657 0.05C201.63 7.10333 201.687 11.5967 201.827 13.53C203.28 33.53 204.617 53.6 205.837 73.74L186.487 73.78L193.557 73.61C193.714 73.6076 193.867 73.5609 193.998 73.4752C194.129 73.3896 194.234 73.2685 194.299 73.126C194.364 72.9835 194.388 72.8254 194.367 72.67C193.367 64.75 192.894 56.7733 192.947 48.74C196.9 43.82 196.69 38.93 192.317 34.07C191.537 32.47 191.137 31.2867 191.117 30.52C190.984 25.7933 191.01 21.2667 191.197 16.94C191.213 16.5684 191.128 16.1993 190.951 15.872C190.773 15.5446 190.51 15.2711 190.189 15.0807C189.868 14.8902 189.501 14.7897 189.127 14.79L153.317 14.9C152.777 12.9667 151.747 11.28 150.227 9.84C148.927 8.60667 147.257 7.7 145.217 7.12C138.364 5.17333 133.557 7.71667 130.797 14.75C116.39 14.8967 101.944 14.9467 87.4571 14.9C61.1271 14.81 34.7871 15.13 8.5371 15.06C6.00377 15.0533 4.15377 14.7633 2.9871 14.19C0.773767 13.11 -0.209566 11.2233 0.0371003 8.53C0.150434 7.29667 0.770434 4.45333 1.8971 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape5&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.5460546875 9.32519283839548)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M3.69 73.6301L0 0.0700704L9.97 7.03745e-05C10.1004 -0.00175254 10.2289 0.031869 10.3421 0.0974247C10.4553 0.16298 10.5492 0.258107 10.6139 0.372872C10.6786 0.487637 10.7118 0.617903 10.71 0.75007C10.55 11.1234 10.7367 21.0567 11.27 30.5501C12.07 44.8301 12.51 58.8001 13.82 72.9701C13.8293 73.0668 13.8114 73.1643 13.7681 73.2514C13.7249 73.3384 13.6581 73.4116 13.5754 73.4627C13.4926 73.5137 13.3972 73.5405 13.3 73.5401Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape6&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.3825550063776 9.3230859375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M13.7551 0.08C13.7351 12.9867 13.0551 33.3133 11.7151 61.06C11.4051 67.53 20.2651 68.45 23.9851 64.6C24.8118 63.7467 25.3084 62.04 25.4751 59.48C26.3418 46.28 27.0151 33.9733 27.4951 22.56C27.6284 19.36 28.2584 11.84 29.3851 0L46.2351 0.03C45.1084 4.48333 44.4884 7.32667 44.3751 8.56C44.1284 11.2533 45.1118 13.14 47.3251 14.22C48.4918 14.7933 50.3418 15.0833 52.8751 15.09C79.1251 15.16 105.465 14.84 131.795 14.93C146.282 14.9767 160.728 14.9267 175.135 14.78C174.568 20.8133 176.498 24.9267 180.925 27.12C183.338 28.3133 185.805 28.72 188.325 28.34C194.755 27.36 198.095 21.26 197.655 14.93L233.465 14.82C233.839 14.8197 234.206 14.9202 234.527 15.1107C234.848 15.3011 235.111 15.5746 235.289 15.902C235.466 16.2293 235.551 16.5984 235.535 16.97C235.348 21.2967 235.322 25.8233 235.455 30.55C235.475 31.3167 235.875 32.5 236.655 34.1C232.788 31.5133 229.168 30.99 225.795 32.53C211.935 38.83 224.195 59.55 237.285 48.77C237.232 56.8033 237.705 64.78 238.705 72.7C238.726 72.8554 238.702 73.0135 238.637 73.156C238.572 73.2985 238.467 73.4196 238.336 73.5052C238.205 73.5909 238.052 73.6376 237.895 73.64L230.825 73.81L0.605102 73.79C0.205102 73.79 0.00510204 73.59 0.00510204 73.19C-0.0282313 69.6433 0.101769 66.03 0.395102 62.35C2.00177 42.09 2.92177 21.6067 3.1551 0.9C3.16177 0.353333 3.43844 0.08 3.9851 0.08ZM127.005 36.5C127.005 34.413 126.456 32.3624 125.412 30.555C124.369 28.7476 122.867 27.2464 121.06 26.203C119.253 25.1595 117.202 24.61 115.115 24.61C111.963 24.61 108.937 25.8635 106.708 28.0925C104.479 30.3215 103.225 33.3478 103.225 36.5C103.225 39.6522 104.479 42.6785 106.708 44.9075C108.937 47.1365 111.963 48.39 115.115 48.39C117.202 48.39 119.253 47.8405 121.06 46.797C122.867 45.7536 124.369 44.2524 125.412 42.445C126.456 40.6376 127.005 38.587 127.005 36.5ZM75.9704 37.4184C76.0574 34.3019 74.8637 31.2741 72.6541 29.007C70.4445 26.7398 67.3954 25.4143 64.1835 25.3246C62.057 25.2652 59.9523 25.7501 58.0818 26.7303C56.2114 27.7105 54.6403 29.152 53.5271 30.9092C52.414 32.6664 51.7974 34.6782 51.7398 36.7416C51.6528 39.8581 52.8465 42.8859 55.0561 45.153C57.2657 47.4202 60.3148 48.7457 63.5267 48.8354C65.6532 48.8948 67.7579 48.4099 69.6284 47.4297C71.4988 46.4495 73.0699 45.008 74.1831 43.2508C75.2962 41.4936 75.9128 39.4818 75.9704 37.4184ZM183.874 50.7982C183.856 49.4819 183.468 48.1937 182.749 47.0635C182.03 45.9334 181.006 45.0007 179.779 44.3595C178.552 43.7184 177.166 43.3911 175.76 43.4107C173.637 43.4404 171.61 44.2595 170.128 45.6863C168.646 47.1131 167.828 49.0336 167.856 51.0218C167.874 52.3381 168.262 53.6263 168.981 54.7565C169.7 55.8866 170.725 56.8193 171.951 57.4605C173.178 58.1016 174.564 58.4289 175.97 58.4093C178.093 58.3796 180.121 57.5605 181.603 56.1337C183.084 54.7069 183.902 52.7864 183.874 50.7982Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape7&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.0305953125001 9.32554685349047)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.0064 0.0100006L9.3364 6.11826e-07C9.61064 -0.000292647 9.87453 0.104847 10.0721 0.293135C10.2697 0.481423 10.3861 0.738544 10.3964 1.01C11.3097 24.8167 12.6431 48.6333 14.3964 72.46C14.4564 73.2867 14.0697 73.7 13.2364 73.7L4.1864 73.7C2.9664 53.56 1.62973 33.49 0.1764 13.49C0.0364 11.5567 -0.0202667 7.06333 0.0064 0.0100006Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape8&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1631696428572 9.32765624999999)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M10.891 0L14.581 73.56L5.85095 73.67C5.70139 73.6731 5.55452 73.6294 5.43088 73.5452C5.30724 73.461 5.21287 73.3403 5.16095 73.2C4.86095 72.3733 4.66095 71.5033 4.56095 70.59C2.05429 47.6433 0.534286 24.6667 0.000952381 1.66C-0.0257143 0.566667 0.507619 0.02 1.60095 0.02Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape9&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.5362571970961 9.55219950584632)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.6165 8.41299C23.0565 14.743 19.7165 20.843 13.2865 21.823C10.7665 22.203 8.2998 21.7963 5.88646 20.603C1.4598 18.4097 -0.470205 14.2963 0.0964619 8.26299C2.85646 1.22966 7.66313 -1.31367 14.5165 0.632992C16.5565 1.21299 18.2265 2.11966 19.5265 3.35299C21.0465 4.79299 22.0765 6.47966 22.6165 8.41299Z&quot;&gt;&lt;/path&gt; &lt;circle id=&quot;shape10&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.0115625 10.18828125)&quot; r=&quot;11.89&quot; cx=&quot;11.89&quot; cy=&quot;11.89&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape11&quot; transform=&quot;matrix(0.0351425431068875 0.000981620111375468 -0.000981620111375468 0.0351425431068875 14.2130771675543 10.2015061448131)&quot; rx=&quot;12.12&quot; ry=&quot;11.76&quot; cx=&quot;12.12&quot; cy=&quot;11.76&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape12&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 20.1057469902912 10.4364122450525)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M16.9732 2.43205C21.3465 7.29205 21.5565 12.1821 17.6032 17.1021C4.5132 27.8821 -7.7468 7.16205 6.1132 0.862052C9.48653 -0.677948 13.1065 -0.154615 16.9732 2.43205Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape13&quot; transform=&quot;matrix(0.0351528231097021 -0.000490857902548076 0.000490857902548076 0.0351528231097021 18.2800569526222 10.8531762234766)&quot; rx=&quot;8.01&quot; ry=&quot;7.5&quot; cx=&quot;8.01&quot; cy=&quot;7.5&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape14&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.47390625 12.828515625)&quot; fill=&quot;rgb(191,113,56)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0 300.33C1.52 298.69 3.53 298.057 6.03 298.43C6.10297 298.443 6.17377 298.447 6.24 298.44C6.65333 298.413 6.88667 298.26 6.94 297.98C7 297.66 7.19333 297.493 7.52 297.48L10.29 297.39C10.4233 297.383 10.5567 297.367 10.69 297.34C11.0167 297.267 11.1733 297.127 11.16 296.92C11.1467 296.7 11.2467 296.563 11.46 296.51C12.1467 296.337 12.7433 295.997 13.25 295.49C13.49 295.257 13.58 294.973 13.52 294.64C13.1333 292.653 12.8767 290.647 12.75 288.62C12.69 287.79 12.27 287.35 11.7 286.83C11.4533 286.603 11.3933 286.337 11.52 286.03C11.8533 285.197 11.6767 284.573 10.99 284.16C10.7367 284 10.46 283.923 10.16 283.93L6.56 284.02C15.1 281.92 21.0833 280.04 24.51 278.38C27.5033 276.927 30.4033 275.357 33.21 273.67C33.319 273.603 33.3974 273.495 33.4282 273.371C33.4589 273.246 33.4397 273.115 33.3746 273.004C33.3096 272.894 33.2037 272.813 33.08 272.78C32.5067 272.62 31.9433 272.67 31.39 272.93C63.5767 260.003 88.4967 238.95 106.15 209.77C109.223 204.703 112.093 199 114.76 192.66C118.06 184.807 120.343 178.587 121.61 174C123.097 168.613 124.457 162.397 125.69 155.35C126.657 149.857 126.873 144.25 126.34 138.53C127.853 138.57 128.907 138.097 129.5 137.11C131.56 133.67 131.433 130.473 129.12 127.52C128.24 126.39 127.07 126.39 125.77 126.38C120.017 126.347 114.427 126.37 109 126.45C108.613 125.77 108.27 125.09 107.97 124.41C107.69 123.77 107.527 123.037 107.48 122.21C106.953 112.977 106.213 103.723 105.26 94.45C110.127 94.5633 114.617 94.5833 118.73 94.51C121.27 94.47 123.93 94.86 126 93.31C128.053 91.77 128.717 89.61 127.99 86.83C127.23 83.89 124.98 82.2967 121.24 82.05L120.9 72.32C124.973 70.3667 126.23 67.5767 124.67 63.95C123.697 61.6833 121.82 60.52 119.04 60.46C117.273 58.24 116.223 56.5633 115.89 55.43C113.43 47.1033 110.547 38.9133 107.24 30.86C106.947 30.1467 107 29.0333 107.4 27.52C109.087 27.4933 110.883 27.5267 112.79 27.62C115.45 27.7533 117.403 26.9667 118.65 25.26C121.02 22.01 120.02 17.98 116.55 16.23C115.597 15.75 114.193 15.5133 112.34 15.52C107.533 15.54 102.823 15.4767 98.21 15.33C97.6033 13.9433 96.9433 12.6033 96.23 11.31C94.38 7.96 93.99 4.82 92.56 1.46C92.4467 1.18667 92.5067 0.963333 92.74 0.79L93.19 0.46C93.4567 0.273333 93.4267 0.176667 93.1 0.17L55.31 0L131.2 0.2C131.371 0.200762 131.536 0.26037 131.671 0.369176C131.805 0.477981 131.9 0.629779 131.94 0.8C133.38 7.23333 134.593 14.0833 135.58 21.35C139.67 51.61 143.36 78.87 145.72 107.57C147.27 126.44 146.89 145.44 143.29 163.8C138.28 189.4 127.86 214.54 111.86 234.74C90.34 261.87 61.85 283.26 28.89 293.96C20.1567 296.793 10.5267 298.917 0 300.33Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape15&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.2758764491296 12.828515625)&quot; fill=&quot;rgb(191,146,59)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M231.61 0L269.4 0.17C269.726 0.176667 269.756 0.273333 269.49 0.46L269.04 0.79C268.806 0.963333 268.746 1.18667 268.86 1.46C270.29 4.82 270.68 7.96 272.53 11.31C273.243 12.6033 273.903 13.9433 274.51 15.33C268.76 17.07 269.07 27.78 275.82 27.53C278.38 27.43 281.006 27.4267 283.7 27.52C283.3 29.0333 283.246 30.1467 283.54 30.86C286.846 38.9133 289.73 47.1033 292.19 55.43C292.523 56.5633 293.573 58.24 295.34 60.46C290.98 60.76 286.806 61.0267 282.82 61.26C277.7 61.56 274.45 67.2 278.08 71.26C278.86 72.1333 280.413 72.6 282.74 72.66C287.386 72.7733 292.206 72.66 297.2 72.32L297.54 82.05C293.013 81.9567 288.443 81.9633 283.83 82.07C281.84 82.11 280.61 82.75 279.5 84.26C276.44 88.44 277.126 91.8367 281.56 94.45C282.513 103.723 283.253 112.977 283.78 122.21C283.826 123.037 283.99 123.77 284.27 124.41C284.57 125.09 284.913 125.77 285.3 126.45C282.193 127.497 280.633 129.463 280.62 132.35C280.613 134.79 281.763 136.753 284.07 138.24C281.93 156.593 277.493 173.123 270.76 187.83C261.606 207.817 247.22 225.063 227.6 239.57C218.546 246.263 208.406 252.023 197.18 256.85C191.52 259.28 187.21 264.45 191.61 270.42C195.03 275.03 202.58 274.56 207.69 272.93C208.243 272.67 208.806 272.62 209.38 272.78C209.503 272.813 209.609 272.894 209.674 273.004C209.739 273.115 209.758 273.246 209.728 273.371C209.697 273.495 209.619 273.603 209.51 273.67C206.703 275.357 203.803 276.927 200.81 278.38C197.383 280.04 191.4 281.92 182.86 284.02C165.386 287.427 148.786 288.113 133.06 286.08C116.433 283.94 99.2895 279.17 81.6295 271.77C75.1162 269.043 68.6828 266.14 62.3295 263.06C54.3762 259.2 46.8962 254.463 39.8895 248.85C40.5695 248.377 41.3595 247.947 42.2595 247.56C44.5695 246.55 46.3695 244.3 44.1695 241.99C29.1962 226.303 18.1928 209.247 11.1595 190.82C1.95285 166.687 -1.55715 141.62 0.629514 115.62C2.01618 99.0867 3.45618 82.5733 4.94951 66.08C5.49618 59.9533 6.20618 53.32 7.07951 46.18C8.95285 30.8733 10.7762 15.5733 12.5495 0.28ZM230.747 11.7302C228.758 9.7412 226.058 8.62261 223.245 8.62261C220.432 8.62261 217.731 9.7412 215.742 11.7302L213.89 13.5829C211.901 15.5719 210.782 18.2724 210.782 21.0853C210.782 23.8982 211.901 26.5987 213.89 28.5877L215.092 29.7898C217.081 31.7788 219.781 32.8974 222.594 32.8974C225.407 32.8974 228.108 31.7788 230.097 29.7898L231.949 27.9371C233.938 25.9481 235.057 23.2476 235.057 20.4347C235.057 17.6218 233.938 14.9213 231.949 12.9323ZM47.1595 186.78C39.7128 170.84 35.7195 154.833 35.1795 138.76C34.9528 131.94 35.0895 124.72 35.5895 117.1C37.1495 93.44 39.2662 67.4833 41.9395 39.23C42.3395 35.0167 42.6262 30.7267 42.7995 26.36C43.4195 10.9 25.2095 12.45 24.4195 25.69C23.0462 48.79 21.1195 72.2233 18.6395 95.99C17.6595 105.337 16.9995 114.63 16.6595 123.87C16.3328 132.65 16.6595 140.653 17.6395 147.88C19.5062 161.707 22.9728 175.147 28.0395 188.2C29.1795 191.153 30.6662 194.07 32.4995 196.95C35.2995 201.37 41.5395 202.72 45.3395 198.89C48.7328 195.483 49.3395 191.447 47.1595 186.78ZM87.1943 37.8021C86.8236 36.4743 85.902 35.3574 84.6342 34.6994C83.3663 34.0413 81.8534 33.8945 80.4311 34.2916C79.0088 34.6887 77.7908 35.598 77.0472 36.8177C76.3037 38.0374 76.094 39.4701 76.4647 40.7979C76.8355 42.1257 77.757 43.2426 79.0249 43.9006C80.2927 44.5587 81.8056 44.7055 83.2279 44.3084C84.6502 43.9113 85.8682 43.002 86.6118 41.7823C87.3554 40.5626 87.565 39.1299 87.1943 37.8021ZM242.9 63.3691C242.905 60.5116 242.14 57.7024 240.682 55.2252C239.224 52.7479 237.124 50.6888 234.594 49.2556C232.064 47.8225 229.192 47.0651 226.268 47.06C223.344 47.0549 220.469 47.8022 217.934 49.2266C215.399 50.6509 213.292 52.7027 211.826 55.1748C210.359 57.6469 209.585 60.4534 209.58 63.3109C209.575 66.1684 210.34 68.9776 211.797 71.4548C213.255 73.9321 215.355 75.9912 217.885 77.4244C220.415 78.8575 223.287 79.6149 226.211 79.62C229.135 79.6251 232.01 78.8778 234.545 77.4534C237.08 76.0291 239.187 73.9773 240.653 71.5052C242.12 69.0331 242.895 66.2266 242.9 63.3691ZM85.9041 71.8823C88.1531 72.912 90.7367 72.9736 93.0816 72.0534C95.4266 71.1333 97.3455 69.3049 98.4127 66.9739C99.1193 65.4306 99.4215 63.7348 99.2889 62.0574C99.1563 60.38 98.5935 58.7796 97.6572 57.4176C96.721 56.0556 95.4439 54.9794 93.9549 54.2977C91.7059 53.268 89.1223 53.2064 86.7774 54.1266C84.4325 55.0467 82.5135 56.8751 81.4463 59.2061C80.7398 60.7494 80.4375 62.4452 80.5701 64.1226C80.7028 65.8 81.2656 67.4004 82.2018 68.7624C83.1381 70.1244 84.4151 71.2006 85.9041 71.8823ZM60.6086 105.171C63.2448 106.638 66.3725 106.974 69.2978 106.105C72.223 105.236 74.7122 103.231 76.213 100.535C77.7138 97.8381 78.1063 94.6659 77.3035 91.7217C76.5007 88.7775 74.5666 86.2966 71.9304 84.8293C69.2942 83.362 66.1665 83.0257 63.2413 83.8948C60.316 84.7639 57.8268 86.7691 56.326 89.4655C54.8252 92.1619 54.4327 95.3341 55.2355 98.2783C56.0384 101.222 57.9724 103.703 60.6086 105.171ZM187.08 98.11C187.08 96.1959 186.318 94.3582 184.965 93.0047C183.611 91.6512 181.774 90.89 179.86 90.89C177.945 90.89 176.108 91.6512 174.754 93.0047C173.401 94.3582 172.64 96.1959 172.64 98.11C172.64 100.024 173.401 101.862 174.754 103.215C176.108 104.569 177.945 105.33 179.86 105.33C181.127 105.33 182.372 104.996 183.47 104.363C184.567 103.729 185.479 102.817 186.112 101.72C186.746 100.623 187.08 99.3773 187.08 98.11ZM234.564 99.0027C233.705 97.863 232.551 96.9774 231.217 96.4351C229.883 95.8929 228.416 95.7129 226.964 95.9133C225.513 96.1138 224.127 96.6877 222.947 97.5771C221.766 98.4665 220.833 99.6405 220.24 100.981C219.647 102.321 219.416 103.78 219.57 105.212C219.723 106.644 220.256 107.998 221.115 109.137C221.974 110.277 223.128 111.163 224.462 111.705C225.796 112.247 227.263 112.427 228.715 112.227C230.166 112.026 231.552 111.452 232.732 110.563C233.913 109.673 234.846 108.499 235.439 107.159C236.032 105.819 236.263 104.36 236.109 102.928C235.956 101.496 235.423 100.142 234.564 99.0027ZM47.9695 214.56C45.1695 220.83 50.0195 225.32 54.0495 229.45C57.6895 233.19 61.8995 236.09 66.6995 232.86C71.8895 229.38 72.0595 223.24 67.9795 218.66C64.2095 214.41 60.6395 209.6 54.3295 209.99C51.4095 210.17 49.1195 211.99 47.9695 214.56Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape16&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.8026079545455 12.838359375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M26.0114 0C24.238 15.2933 22.4147 30.5933 20.5414 45.9C19.668 53.04 18.958 59.6733 18.4114 65.8C16.918 82.2933 15.478 98.8067 14.0914 115.34C11.9047 141.34 15.4147 166.407 24.6214 190.54C31.6547 208.967 42.658 226.023 57.6314 241.71C59.8314 244.02 58.0314 246.27 55.7214 247.28C54.8214 247.667 54.0314 248.097 53.3514 248.57C51.9014 250.07 52.3314 253.14 52.3514 255.14C31.6214 235.93 17.0114 211.99 8.66137 185.13C2.48804 165.29 -0.385293 145.337 0.0413737 125.27C0.691374 94.91 5.82137 63.64 9.38137 32.5C9.99471 27.1467 10.7014 21.75 11.5014 16.31C12.3214 10.7767 13.5247 5.69667 15.1114 1.07C15.2107 0.778294 15.3987 0.524438 15.6494 0.343583C15.9001 0.162728 16.2013 0.0636261 16.5114 0.06Z&quot;&gt;&lt;/path&gt; &lt;rect id=&quot;shape17&quot; transform=&quot;matrix(0.0248592227760896 -0.0248592227760896 0.0248592227760896 0.0248592227760896 19.531681996495 13.569794617477)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; width=&quot;23.84&quot; height=&quot;22.92&quot; rx=&quot;10.61&quot; ry=&quot;10.61&quot;&gt;&lt;/rect&gt; &lt;path id=&quot;shape18&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.857255859375 13.3649990428515)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M30.6225 171.52C32.8025 176.187 32.1958 180.223 28.8025 183.63C25.0025 187.46 18.7625 186.11 15.9625 181.69C14.1292 178.81 12.6425 175.893 11.5025 172.94C6.43583 159.887 2.96917 146.447 1.1025 132.62C0.1225 125.393 -0.204167 117.39 0.1225 108.61C0.4625 99.37 1.1225 90.0767 2.1025 80.73C4.5825 56.9634 6.50917 33.53 7.8825 10.43C8.6725 -2.80997 26.8825 -4.35997 26.2625 11.1C26.0892 15.4667 25.8025 19.7567 25.4025 23.97C22.7292 52.2234 20.6125 78.18 19.0525 101.84C18.5525 109.46 18.4158 116.68 18.6425 123.5C19.1825 139.573 23.1758 155.58 30.6225 171.52Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape19&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.7841415488515 13.3674609375)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.0522 0C8.66553 0.146667 13.3755 0.21 18.1822 0.19C20.0355 0.183333 21.4389 0.42 22.3922 0.9C25.8622 2.65 26.8622 6.68 24.4922 9.93C23.2455 11.6367 21.2922 12.4233 18.6322 12.29C16.7255 12.1967 14.9289 12.1633 13.2422 12.19C10.5489 12.0967 7.9222 12.1 5.3622 12.2C-1.3878 12.45 -1.6978 1.74 4.0522 0Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape20&quot; transform=&quot;matrix(0.0338611839889802 -0.00945421244350544 0.00945421244350544 0.0338611839889802 14.9149266129752 14.0867380565676)&quot; rx=&quot;5.57&quot; ry=&quot;5.2&quot; cx=&quot;5.57&quot; cy=&quot;5.2&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape21&quot; transform=&quot;matrix(0.0351561964539828 6.13592003636124e-05 -6.13592003636124e-05 0.0351561964539828 19.6449060698586 14.4819473774511)&quot; rx=&quot;16.66&quot; ry=&quot;16.28&quot; cx=&quot;16.66&quot; cy=&quot;16.28&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape22&quot; transform=&quot;matrix(-0.0146348716029047 0.031965331958686 -0.031965331958686 -0.0146348716029047 15.8772166930746 14.8739620295146)&quot; rx=&quot;9.67&quot; ry=&quot;9.33&quot; cx=&quot;9.67&quot; cy=&quot;9.33&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape23&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.997793706651 14.9540625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M18.805 0C21.585 0.06 23.4616 1.22333 24.435 3.49C25.995 7.11667 24.7383 9.90667 20.665 11.86C15.6716 12.2 10.8516 12.3133 6.20498 12.2C3.87831 12.14 2.32498 11.6733 1.54498 10.8C-2.08502 6.74 1.16498 1.1 6.28498 0.8C10.2716 0.566667 14.445 0.3 18.805 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape24&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.0361349190606 15.7107890625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M19.9144 0.0653333C23.6544 0.312 25.9044 1.90533 26.6644 4.84533C27.3911 7.62533 26.7277 9.78533 24.6744 11.3253C22.6044 12.8753 19.9444 12.4853 17.4044 12.5253C13.2911 12.5987 8.80105 12.5787 3.93438 12.4653C-0.498949 9.852 -1.18562 6.45533 1.87438 2.27533C2.98438 0.765333 4.21438 0.125333 6.20438 0.0853333C10.8177 -0.0213333 15.3877 -0.028 19.9144 0.0653333Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape25&quot; transform=&quot;matrix(-0.0170977282180133 0.0307185547160906 -0.0307185547160906 -0.0170977282180133 15.1542587716268 16.0053675452257)&quot; rx=&quot;11.64&quot; ry=&quot;11.38&quot; cx=&quot;11.64&quot; cy=&quot;11.38&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;circle id=&quot;shape26&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.345234375 16.0238671875)&quot; r=&quot;7.22&quot; cx=&quot;7.22&quot; cy=&quot;7.22&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape27&quot; transform=&quot;matrix(0.0280770296501001 -0.0211575594076892 0.0211575594076892 0.0280770296501001 19.8774398273616 16.4371069616574)&quot; rx=&quot;8.42&quot; ry=&quot;8.13&quot; cx=&quot;8.42&quot; cy=&quot;8.13&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape28&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1414052368516 17.2710454963236)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.02 12.1647L3.45003 11.8747C1.14336 10.388 -0.00663785 8.42471 2.88184e-05 5.98471C0.0133622 3.09804 1.57336 1.13137 4.68003 0.0847059C10.1067 0.00470588 15.6967 -0.0186275 21.45 0.0147059C22.75 0.0247059 23.92 0.0247059 24.8 1.15471C27.1134 4.10804 27.24 7.30471 25.18 10.7447C24.5867 11.7314 23.5334 12.2047 22.02 12.1647Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape29&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.9485123620206 17.688515625)&quot; fill=&quot;rgb(191,129,58)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M94.2701 0L112.84 0.29C113.373 6.01 113.157 11.6167 112.19 17.11C110.957 24.1567 109.597 30.3733 108.11 35.76C106.843 40.3467 104.56 46.5667 101.26 54.42C98.5934 60.76 95.7234 66.4633 92.6501 71.53C74.9968 100.71 50.0768 121.763 17.8901 134.69C12.7801 136.32 5.23009 136.79 1.81009 132.18C-2.58991 126.21 1.72009 121.04 7.38009 118.61C18.6068 113.783 28.7468 108.023 37.8001 101.33C57.4201 86.8233 71.8068 69.5767 80.9601 49.59C87.6934 34.8833 92.1301 18.3533 94.2701 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape30&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9331058615201 20.210194296345)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.830544 4.59225C1.98054 2.02225 4.27054 0.202251 7.19054 0.0222511C13.5005 -0.367749 17.0705 4.44225 20.8405 8.69225C24.9205 13.2723 24.7505 19.4123 19.5605 22.8923C14.7605 26.1223 10.5505 23.2223 6.91054 19.4823C2.88054 15.3523 -1.96946 10.8623 0.830544 4.59225Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape31&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.6404577789765 21.5771484375)&quot; fill=&quot;rgb(191,129,58)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.07476 0C8.08142 5.61333 15.5614 10.35 23.5148 14.21C29.8681 17.29 36.3014 20.1933 42.8148 22.92C60.4748 30.32 77.6181 35.09 94.2448 37.23C109.971 39.2633 126.571 38.5767 144.045 35.17L147.645 35.08C147.945 35.0733 148.221 35.15 148.475 35.31C149.161 35.7233 149.338 36.3467 149.005 37.18C148.878 37.4867 148.938 37.7533 149.185 37.98C149.755 38.5 150.175 38.94 150.235 39.77C150.361 41.7967 150.618 43.8033 151.005 45.79C151.065 46.1233 150.975 46.4067 150.735 46.64C150.228 47.1467 149.631 47.4867 148.945 47.66C148.731 47.7133 148.631 47.85 148.645 48.07C148.658 48.2767 148.501 48.4167 148.175 48.49C148.041 48.5167 147.908 48.5333 147.775 48.54L145.005 48.63C144.678 48.6433 144.485 48.81 144.425 49.13C144.371 49.41 144.138 49.5633 143.725 49.59C143.659 49.5967 143.588 49.5933 143.515 49.58C141.015 49.2067 139.005 49.84 137.485 51.48C124.278 53.2267 112.368 53.5833 101.755 52.55C80.2748 50.4633 60.3014 44.84 41.8348 35.68C35.8281 32.7 28.6481 28.54 20.2948 23.2C14.0414 19.2067 7.30142 13.6633 0.0747565 6.57C0.0547565 4.57 -0.375243 1.5 1.07476 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape32&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.548046875 24.3846604970638)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M37.39 126.792L36.84 125.732C36.6867 125.445 36.61 125.139 36.61 124.812L36.29 50.1519C39.97 50.1319 42.74 50.0419 44.93 47.3519C46.0567 45.9652 46.4067 44.4152 45.98 42.7019C44.81 38.0219 40.08 37.5119 35.72 37.6019L35.91 26.2919C40.16 26.9019 44.77 27.8519 48.81 25.9619C52.26 24.3519 53.31 20.2319 50.85 17.2519C48.51 14.4319 45.36 14.2119 41.99 14.2719C35.7567 14.3852 29.3167 14.4052 22.67 14.3319C19.49 14.3019 16.81 15.9619 15.14 18.6319C15.2 16.6619 12.86 15.6819 11.44 14.7519C10.6133 14.2119 9.90667 13.5852 9.32 12.8719C6.57333 9.53188 3.78 6.23188 0.94 2.97188C0.46 2.41855 0.146667 1.62521 0 0.591879C17.1 3.24521 34.28 3.98188 51.54 2.80188C57.06 2.42188 62.3133 1.51855 67.3 0.0918792C68.18 -0.154787 68.3567 0.0952125 67.83 0.841879C58.7633 13.8352 53.49 29.3252 52.01 47.3119C50.37 67.3319 51 88.9819 56.8 107.652C58.81 114.142 62.13 120.072 65.01 126.212C65.0485 126.291 65.0589 126.382 65.0394 126.468C65.02 126.554 64.9718 126.631 64.9029 126.686C64.834 126.741 64.7483 126.772 64.66 126.772Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape33&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.486355851717 24.3923298330305)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.75477 0.373729C1.90143 1.40706 2.21477 2.2004 2.69477 2.75373C5.53477 6.01373 8.3281 9.31373 11.0748 12.6537C11.6614 13.3671 12.3681 13.9937 13.1948 14.5337C14.6148 15.4637 16.9548 16.4437 16.8948 18.4137L16.5848 19.0537C15.9714 19.3604 15.6748 19.8204 15.6948 20.4337C15.8148 23.3437 16.3448 26.1237 18.0248 28.6937C19.9714 31.6737 22.1714 34.5471 24.6248 37.3137C19.6548 39.6737 18.5548 46.9937 24.3448 49.3137C24.1981 53.2071 24.2048 57.1237 24.3648 61.0637C24.5581 65.7371 24.5748 69.6437 24.4148 72.7837C24.2014 77.0371 23.9914 81.3304 23.7848 85.6637C23.1248 99.8304 19.6748 113.244 13.4348 125.904C13.2814 126.21 13.0314 126.384 12.6848 126.424L11.5948 126.534L3.79477 126.534C3.66373 126.534 3.5364 126.49 3.43437 126.408C3.33234 126.325 3.26171 126.21 3.23447 126.082C3.20722 125.954 3.22499 125.82 3.28477 125.704C16.0848 100.784 18.1148 71.0737 14.6948 43.5737C12.8014 28.3737 7.92143 14.0371 0.0547669 0.563729C0.0152725 0.50031 -0.00361813 0.426609 0.000572506 0.352292C0.00476314 0.277975 0.0318434 0.20644 0.0782619 0.147067C0.12468 0.0876949 0.188315 0.0431997 0.26082 0.0194171C0.333326 -0.0043654 0.411387 -0.00634806 0.484767 0.0137292Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape34&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.0617214476865 24.8861307529877)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M21.2988 12.0278C16.7455 11.8878 12.1288 11.8545 7.44881 11.9278C4.74215 11.9678 2.94548 11.7312 2.05881 11.2178C0.238812 10.1645 -0.374521 8.0945 0.218812 5.00784L0.528812 4.36784C2.19881 1.69784 4.87881 0.0378364 8.05881 0.0678364C14.7055 0.14117 21.1455 0.12117 27.3788 0.00783636C30.7488 -0.0521636 33.8988 0.167836 36.2388 2.98784C38.6988 5.96784 37.6488 10.0878 34.1988 11.6978C30.1588 13.5878 25.5488 12.6378 21.2988 12.0278Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape35&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.038091694079 25.0621875000001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.890947 0C0.297614 3.08667 0.910947 5.15667 2.73095 6.21C3.61761 6.72333 5.41428 6.96 8.12095 6.92C12.8009 6.84667 17.4176 6.88 21.9709 7.02L21.7809 18.33L8.93095 18.26C6.47761 15.4933 4.27761 12.62 2.33095 9.64C0.650947 7.07 0.120947 4.29 0.000947368 1.38C-0.0190526 0.766667 0.277614 0.306667 0.890947 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape36&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.2047130847683 25.704140625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.19149 0L17.0415 0.07C21.4015 -0.02 26.1315 0.49 27.3015 5.17C27.7282 6.88333 27.3782 8.43333 26.2515 9.82C24.0615 12.51 21.2915 12.6 17.6115 12.62L3.91149 12C-1.87851 9.68 -0.778506 2.36 4.19149 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape37&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.893984375 26.126015625)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M12.75 0L26.45 0.62L26.77 75.28C26.77 75.6067 26.8467 75.9133 27 76.2L27.55 77.26L0 77.22L1.09 77.11C1.43667 77.07 1.68667 76.8967 1.84 76.59C8.08 63.93 11.53 50.5167 12.19 36.35C12.3967 32.0167 12.6067 27.7233 12.82 23.47C12.98 20.33 12.9633 16.4233 12.77 11.75C12.61 7.81 12.6033 3.89333 12.75 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape38&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.22640625 29.4324536132813)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M29.96 24.0302C30.7067 23.5835 30.1467 23.1702 28.28 22.7902C27.96 22.7235 27.6733 22.5835 27.42 22.3702C24.9333 20.2235 22.8967 18.7069 21.31 17.8202C12.91 13.1069 5.80667 7.21687 0 0.150208L30.09 0.000208333C30.4767 -0.00645833 30.7833 0.146875 31.01 0.460208C37.57 9.69354 45.7567 17.2435 55.57 23.1102C55.9433 23.3302 55.92 23.4969 55.5 23.6102C54.48 23.8769 53.4167 24.0135 52.31 24.0202C44.77 24.0669 37.32 24.0702 29.96 24.0302Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape39&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.2706541442871 29.4394921875)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M38.2747 0C35.2147 4.74667 31.2681 10.0433 26.4347 15.89C23.4547 19.49 20.7014 22.14 18.1747 23.84L0.754727 23.73C-0.17194 23.7233 -0.245273 23.4733 0.534727 22.98C9.87473 17.05 17.3747 9.52 24.9347 0.58C25.0571 0.432797 25.211 0.314351 25.3856 0.233119C25.5601 0.151886 25.7511 0.109846 25.9447 0.11Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape40&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.909609375 29.437734375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M65.9 0C71.7067 7.06667 78.81 12.9567 87.21 17.67C88.7967 18.5567 90.8333 20.0733 93.32 22.22C93.5733 22.4333 93.86 22.5733 94.18 22.64C96.0467 23.02 96.6067 23.4333 95.86 23.88L0 23.89C2.52667 22.19 5.28 19.54 8.26 15.94C13.0933 10.0933 17.04 4.79667 20.1 0.05Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape41&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.6264334548969 30.8390367406574)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M175.558 0.450733C176.245 0.450733 176.568 0.567399 176.528 0.800733C176.494 1.0303 176.388 1.24303 176.226 1.40826C176.065 1.5735 175.855 1.68291 175.628 1.72073C171.935 2.3474 168.581 2.65073 165.568 2.63073C163.998 2.62073 162.798 3.35073 161.188 3.18073C160.808 3.14073 160.445 3.20407 160.098 3.37073L158.488 4.16073C158.195 4.30073 157.958 4.50407 157.778 4.77073C157.045 5.85073 156.111 6.47073 154.978 6.63073C153.258 6.87073 151.491 6.99073 149.678 6.99073C111.858 6.8974 73.5681 6.84073 34.8081 6.82073C28.6781 6.82073 24.4281 9.63073 23.3181 15.9507L0.628115 15.8107C0.50059 15.8104 0.376138 15.7713 0.2713 15.6987C0.166463 15.626 0.0861025 15.5233 0.0409006 15.404C-0.00430136 15.2848 -0.0122487 15.1546 0.0181151 15.0307C2.16812 6.40073 10.0881 -0.0792673 19.0981 0.00073271C53.2181 0.314066 87.8014 0.380733 122.848 0.200733C140.421 0.114066 157.991 0.197399 175.558 0.450733Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape42&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.4462109375 30.8548828125)&quot; fill=&quot;rgb(191,146,59)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M152.24 0L253.08 0.15C253.047 2.17 252.56 3.72667 251.62 4.82C250.867 5.69333 249.93 6.13667 248.81 6.15C221.383 6.39 194.363 6.58667 167.75 6.74C167.283 6.74 167.03 6.97333 166.99 7.44C166.87 8.95333 167.113 10.3433 167.72 11.61C167.847 11.8833 167.89 12.1667 167.85 12.46L167.63 14.18C167.577 14.5867 167.74 14.86 168.12 15C168.573 15.1667 168.867 15.3533 169 15.56L0 15.5C1.11 9.18 5.36 6.37 11.49 6.37C50.25 6.39 88.54 6.44667 126.36 6.54C128.173 6.54 129.94 6.42 131.66 6.18C132.793 6.02 133.727 5.4 134.46 4.32C134.64 4.05333 134.877 3.85 135.17 3.71L136.78 2.92C137.127 2.75333 137.49 2.69 137.87 2.73C139.48 2.9 140.68 2.17 142.25 2.18C145.263 2.2 148.617 1.89667 152.31 1.27C152.537 1.23218 152.746 1.12277 152.908 0.957532C153.07 0.792295 153.175 0.579568 153.21 0.35C153.25 0.116667 152.927 -1.13687e-13 152.24 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape43&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 19.3159081135321 30.86015625)&quot; fill=&quot;rgb(191,129,58)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M86.1197 0C93.6331 3.14 98.2231 7.99667 99.8897 14.57C99.9181 14.684 99.9111 14.804 99.8698 14.914C99.8285 15.024 99.7547 15.1189 99.6583 15.186C99.5618 15.2532 99.4472 15.2894 99.3297 15.29L2.03972 15.41C1.90639 15.2033 1.61306 15.0167 1.15972 14.85C0.779725 14.71 0.616391 14.4367 0.669725 14.03L0.889725 12.31C0.929725 12.0167 0.886391 11.7333 0.759725 11.46C0.153058 10.1933 -0.0902752 8.80333 0.0297248 7.29C0.0697248 6.82333 0.323058 6.59 0.789725 6.59C27.4031 6.43667 54.4231 6.24 81.8497 6C82.9697 5.98667 83.9064 5.54333 84.6597 4.67C85.5997 3.57667 86.0864 2.02 86.1197 0Z&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt;&lt;div class=&quot;w-16 h-16&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;fill-[${rgbColor} w-16 h-16&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 36 36&quot;&gt; &lt;defs&gt;&lt;/defs&gt; &lt;path id=&quot;shape0&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 10.393984646722 3.24851063866497)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M384.119 800.308C389.392 800.401 395.079 800.381 401.179 800.248C405.299 800.161 408.469 800.568 410.689 801.468C415.949 803.598 420.779 810.198 420.289 816.268C419.669 823.858 412.349 829.318 404.999 829.328C277.499 829.355 146.952 829.355 13.3589 829.328C8.63888 829.328 4.09888 825.978 1.87888 822.058C-2.73112 813.888 1.52888 803.918 10.4389 801.028C11.9855 800.528 13.9555 800.285 16.3489 800.298C22.1289 800.338 27.6889 800.265 33.0289 800.078C33.1769 800.076 33.3188 800.017 33.4263 799.913C33.5337 799.809 33.5989 799.668 33.6089 799.518C33.7489 797.391 34.0889 795.351 34.6289 793.398C38.5755 779.138 46.7822 768.285 59.2489 760.838C67.2389 756.068 77.9989 753.418 87.8689 753.798C91.7089 753.938 95.6189 754.578 99.3589 753.338C121.612 745.945 138.126 732.518 148.899 713.058C160.649 691.848 162.149 664.098 156.689 640.298C150.949 615.338 135.539 594.358 113.659 581.418C104.759 576.151 97.1322 571.378 90.7789 567.098C79.8722 559.751 69.4389 550.391 59.4789 539.018C41.7922 518.825 28.7222 496.301 20.2689 471.448C13.2089 450.695 9.41555 429.945 8.88888 409.198C8.39555 389.938 9.51888 370.588 12.2589 351.148C15.7689 326.188 18.7489 301.968 22.2689 277.258C23.1955 270.798 23.9055 264.308 24.3989 257.788C25.2922 245.915 26.1489 234.441 26.9689 223.368C28.2189 206.548 28.2189 189.968 28.2289 172.948C28.229 172.665 28.1641 172.386 28.0392 172.133C27.9143 171.88 27.7328 171.659 27.5089 171.488C4.71888 154.278 -3.35112 123.728 10.2489 97.8679C21.8189 75.8479 44.3589 62.0579 69.5789 63.3579C72.9922 63.5379 76.3389 64.1179 79.6189 65.0979C79.7826 65.1468 79.9567 65.1513 80.1235 65.1109C80.2903 65.0705 80.4439 64.9867 80.5689 64.8679C95.3422 50.8279 113.322 44.9613 134.509 47.2679C134.656 47.2852 134.804 47.2536 134.932 47.1778C135.061 47.102 135.161 46.9862 135.219 46.8479C136.972 42.6213 139.372 38.5079 142.419 34.5079C153.299 20.2379 166.749 9.32792 184.089 3.97792C204.569 -2.34875 224.312 -1.12875 243.319 7.63792C258.599 14.6779 272.559 26.6579 280.469 41.6579C280.596 41.9046 280.792 41.9846 281.059 41.8979C289.839 38.9646 299.389 37.9446 309.709 38.8379C326.729 40.3079 342.309 50.4379 353.989 63.2879C354.516 63.8679 355.166 64.1746 355.939 64.2079C361.419 64.4546 366.656 65.5513 371.649 67.4979C392.199 75.5079 406.519 91.1379 411.669 112.968C413.189 119.421 413.456 125.841 412.469 132.228C409.882 148.975 401.956 162.205 388.689 171.918C387.729 172.628 387.729 173.468 387.719 174.528C387.586 191.895 387.899 207.108 388.659 220.168C389.549 235.238 390.999 253.908 393.189 270.758C396.622 297.205 400.169 324.231 403.829 351.838C404.689 358.351 405.536 366.615 406.369 376.628C407.042 384.655 407.406 391.321 407.459 396.628C407.679 420.268 404.476 443.035 397.849 464.928C386.419 502.718 363.929 536.538 333.029 561.268C324.009 568.498 312.959 575.088 302.869 581.488C297.502 584.888 292.979 588.131 289.299 591.218C265.139 611.508 255.039 640.758 256.429 672.398C258.039 709.018 277.959 738.488 312.639 751.718C317.389 753.528 321.449 754.508 326.659 754.038C338.269 753.008 349.089 755.608 359.129 762.058C371.639 770.088 381.589 784.038 383.299 799.558C383.352 800.045 383.626 800.295 384.119 800.308ZM34.9389 123.938C34.6255 130.038 36.5689 135.461 40.7689 140.208C42.9155 142.635 45.5089 143.855 48.5489 143.868C57.4489 143.895 67.6722 143.898 79.2189 143.878C80.8589 143.878 81.9889 142.308 82.5389 140.958C82.6855 140.585 82.6522 140.231 82.4389 139.898C80.5522 136.978 80.8189 134.321 83.2389 131.928C87.7189 127.508 91.8289 130.808 94.8789 134.678C97.7389 138.308 103.749 143.708 108.819 143.768C117.746 143.855 126.882 143.871 136.229 143.818C142.909 143.768 150.429 136.098 154.769 131.618C156.269 130.068 158.029 129.188 160.259 129.608C164.159 130.328 166.106 132.778 166.099 136.958C166.099 138.248 165.299 139.248 164.549 140.218C164.261 140.59 164.13 141.06 164.184 141.527C164.239 141.994 164.474 142.422 164.839 142.718C166.006 143.678 167.326 144.148 168.799 144.128C196.979 143.828 224.629 143.751 251.749 143.898C253.509 143.905 255.106 143.581 256.539 142.928C256.721 142.847 256.872 142.708 256.969 142.533C257.065 142.358 257.101 142.155 257.073 141.955C257.044 141.756 256.951 141.571 256.809 141.428C253.879 138.498 254.059 132.908 257.859 130.608C262.999 127.498 266.539 130.248 269.939 133.818C274.619 138.718 280.959 143.828 287.779 143.838C296.859 143.865 305.789 143.868 314.569 143.848C321.399 143.828 328.259 136.098 332.759 131.638C335.086 129.338 337.459 128.821 339.879 130.088C343.819 132.161 344.612 135.195 342.259 139.188C342.08 139.495 341.983 139.844 341.98 140.198C341.976 140.552 342.066 140.901 342.239 141.208C343.319 143.118 344.959 144.088 347.179 144.068C354.066 144.001 361.086 143.928 368.239 143.848C370.352 143.821 372.149 143.235 373.629 142.088C379.589 137.488 382.416 131.278 382.109 123.458C381.969 109.928 371.589 99.2079 359.169 95.4779C358.953 95.4151 358.724 95.4137 358.51 95.4738C358.296 95.534 358.105 95.6534 357.959 95.8179C355.212 98.9446 351.706 100.435 347.439 100.288C341.069 100.068 338.009 96.4579 335.789 91.1479C332.202 82.5946 326.232 76.3279 317.879 72.3479C307.626 67.4546 296.802 67.5779 285.409 72.7179C282.069 74.2179 279.519 77.4279 276.309 79.4679C269.159 84.0279 261.339 79.8879 260.179 71.8979C258.606 61.0979 253.279 51.6813 244.199 43.6479C217.109 19.6679 175.399 28.6579 160.839 61.6279C158.766 66.3279 157.699 70.8946 157.639 75.3279C157.559 80.8679 155.339 86.2279 149.929 88.1679C144.262 90.2146 139.372 89.0513 135.259 84.6779C133.749 83.0679 132.859 81.0279 131.499 79.3379C131.286 79.0646 131.012 78.8779 130.679 78.7779C128.472 78.1113 126.346 77.8213 124.299 77.9079C113.326 78.3813 104.429 83.1579 97.6089 92.2379C94.2189 96.7479 94.0089 102.468 90.0089 106.458C86.8589 109.588 81.6689 110.618 77.7089 108.488C73.0155 105.968 70.9422 101.938 71.4889 96.3979C71.5755 95.5313 71.1922 95.0446 70.3389 94.9379C59.7789 93.5446 50.8422 96.5046 43.5289 103.818C38.0555 109.291 35.1922 115.998 34.9389 123.938ZM70.3189 172.868L60.5489 172.868C60.0022 172.868 59.7255 173.141 59.7189 173.688C59.4855 194.395 58.5655 214.878 56.9589 235.138C56.6655 238.818 56.5355 242.431 56.5689 245.978C56.5689 246.378 56.7689 246.578 57.1689 246.578L287.389 246.598L306.739 246.558L315.789 246.558C316.622 246.558 317.009 246.145 316.949 245.318C315.196 221.491 313.862 197.675 312.949 173.868C312.939 173.596 312.822 173.339 312.625 173.151C312.427 172.963 312.163 172.858 311.889 172.858L302.559 172.868L102.799 172.818L85.9489 172.788ZM345.659 172.918L336.369 172.938C335.276 172.938 334.742 173.485 334.769 174.578C335.302 197.585 336.822 220.561 339.329 243.508C339.429 244.421 339.629 245.291 339.929 246.118C339.981 246.258 340.075 246.379 340.199 246.463C340.322 246.547 340.469 246.591 340.619 246.588L349.349 246.478L358.959 246.388C359.056 246.388 359.152 246.362 359.234 246.311C359.317 246.259 359.384 246.186 359.427 246.099C359.47 246.012 359.488 245.915 359.479 245.818C358.169 231.648 357.729 217.678 356.929 203.398C356.396 193.905 356.209 183.971 356.369 173.598C356.371 173.466 356.337 173.335 356.273 173.221C356.208 173.106 356.114 173.011 356.001 172.945C355.888 172.88 355.759 172.846 355.629 172.848ZM285.139 272.498L66.0789 272.778L56.5789 272.838C56.2688 272.842 55.9676 272.941 55.7169 273.122C55.4662 273.302 55.2782 273.556 55.1789 273.848C53.5922 278.475 52.3889 283.555 51.5689 289.088C50.7689 294.528 50.0622 299.925 49.4489 305.278C45.8889 336.418 40.7589 367.688 40.1089 398.048C39.6822 418.115 42.5555 438.068 48.7289 457.908C57.0789 484.768 71.6889 508.708 92.4189 527.918C99.6455 535.011 106.386 540.555 112.639 544.548C120.992 549.888 128.172 554.048 134.179 557.028C152.646 566.188 172.619 571.811 194.099 573.898C204.712 574.931 216.622 574.575 229.829 572.828C240.356 571.415 249.986 569.291 258.719 566.458C291.679 555.758 320.169 534.368 341.689 507.238C357.689 487.038 368.109 461.898 373.119 436.298C376.719 417.938 377.099 398.938 375.549 380.068C373.189 351.368 369.499 324.108 365.409 293.848C364.422 286.581 363.209 279.731 361.769 273.298C361.729 273.128 361.634 272.976 361.499 272.867C361.365 272.758 361.199 272.699 361.029 272.698ZM175.049 601.798L173.779 601.438C173.706 601.418 173.627 601.42 173.555 601.444C173.482 601.467 173.419 601.512 173.372 601.571C173.326 601.631 173.299 601.702 173.295 601.776C173.29 601.851 173.309 601.925 173.349 601.988C181.216 615.461 186.096 629.798 187.989 644.998C191.409 672.498 189.379 702.208 176.579 727.128C176.519 727.245 176.501 727.378 176.529 727.506C176.556 727.635 176.626 727.75 176.728 727.832C176.831 727.914 176.958 727.959 177.089 727.958L184.889 727.958L212.439 727.998L239.709 727.978C239.797 727.978 239.883 727.947 239.952 727.892C240.021 727.837 240.069 727.76 240.088 727.674C240.108 727.588 240.097 727.497 240.059 727.418C237.179 721.278 233.859 715.348 231.849 708.858C226.049 690.188 225.419 668.538 227.059 648.518C228.539 630.531 233.812 615.041 242.879 602.048C243.406 601.301 243.229 601.051 242.349 601.298C237.362 602.725 232.109 603.628 226.589 604.008C209.329 605.188 192.149 604.451 175.049 601.798ZM222.789 744.938L176.989 744.988L164.659 745.098C164.465 745.098 164.274 745.14 164.1 745.221C163.925 745.302 163.771 745.421 163.649 745.568C156.089 754.508 148.589 762.038 139.249 767.968C138.469 768.461 138.542 768.711 139.469 768.718L156.889 768.828L252.749 768.818C260.109 768.858 267.559 768.855 275.099 768.808C276.206 768.801 277.269 768.665 278.289 768.398C278.709 768.285 278.732 768.118 278.359 767.898C268.546 762.031 260.359 754.481 253.799 745.248C253.572 744.935 253.266 744.781 252.879 744.788ZM86.8189 800.748L255.819 800.808L353.109 800.688C353.226 800.687 353.341 800.651 353.437 800.584C353.534 800.517 353.608 800.422 353.649 800.312C353.69 800.202 353.697 800.082 353.669 799.968C352.002 793.395 347.412 788.538 339.899 785.398L239.059 785.248C221.492 784.995 203.922 784.911 186.349 784.998C151.302 785.178 116.719 785.111 82.5989 784.798C73.5889 784.718 65.6689 791.198 63.5189 799.828C63.4885 799.952 63.4965 800.082 63.5417 800.201C63.5869 800.32 63.6672 800.423 63.7721 800.496C63.8769 800.568 64.0014 800.608 64.1289 800.608Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape1&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6223046875 4.3066710451255)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.17 93.3591L341.7 94.8091C341.347 94.9025 341.043 95.0758 340.79 95.3291C334.81 101.209 327.56 101.079 319.06 100.739C316.15 100.619 313.98 99.6891 312.72 96.9491C310.21 91.4791 305.03 84.9891 298.07 88.5091C296.217 89.4491 294.677 90.6225 293.45 92.0291C288.01 98.2791 282.29 103.559 274.1 105.299C270.267 106.112 266.1 106.416 261.6 106.209C253.04 105.819 244.67 101.199 239.15 94.8491C232.37 87.0391 226.88 84.2491 219.24 92.9691C214.89 97.9391 209.89 101.049 202.97 101.219C196.37 101.379 189.917 101.426 183.61 101.359C182.93 101.352 182.43 100.989 182.11 100.269C182.01 100.04 181.975 99.7876 182.008 99.5391C182.042 99.2906 182.143 99.0554 182.3 98.8591C183.04 97.9325 183.813 97.0725 184.62 96.2791C187.09 93.8491 185.64 89.9291 183.51 87.8291C180.65 85.0091 175.91 85.9891 173.39 88.9391C172.23 90.2925 171.17 91.6391 170.21 92.9791C163.5 102.299 152.67 101.929 142.47 100.679C134.9 99.7591 131.64 94.3891 126.62 89.6591C123.633 86.8525 120.593 86.8391 117.5 89.6191C112.63 93.9791 108.24 99.7591 102.47 102.719C88.07 110.129 72.61 106.679 62.57 94.0391C58.62 89.0591 52.95 85.2191 47.21 90.7591C44.54 93.3491 43.94 96.9991 40.53 99.0891C36.59 101.509 29.55 101.139 24.26 101.029C18.64 100.899 13.25 100.999 9.85 97.1991C7.82 94.9191 4 93.8291 2.11 96.9691C1.02333 98.7691 0.446667 98.6225 0.38 96.5291C0.366667 95.9891 0.24 95.0925 0 93.8391C0.253333 85.8991 3.11667 79.1925 8.59 73.7191C15.9033 66.4058 24.84 63.4458 35.4 64.8391C36.2533 64.9458 36.6367 65.4325 36.55 66.2991C36.0033 71.8391 38.0767 75.8691 42.77 78.3891C46.73 80.5191 51.92 79.4891 55.07 76.3591C59.07 72.3691 59.28 66.6491 62.67 62.1391C69.49 53.0591 78.3867 48.2825 89.36 47.8091C91.4067 47.7225 93.5333 48.0125 95.74 48.6791C96.0733 48.7791 96.3467 48.9658 96.56 49.2391C97.92 50.9291 98.81 52.9691 100.32 54.5791C104.433 58.9525 109.323 60.1158 114.99 58.0691C120.4 56.1291 122.62 50.7691 122.7 45.2291C122.76 40.7958 123.827 36.2291 125.9 31.5291C140.46 -1.44087 182.17 -10.4309 209.26 13.5491C218.34 21.5825 223.667 30.9991 225.24 41.7991C226.4 49.7891 234.22 53.9291 241.37 49.3691C244.58 47.3291 247.13 44.1191 250.47 42.6191C261.863 37.4791 272.687 37.3558 282.94 42.2491C291.293 46.2291 297.263 52.4958 300.85 61.0491C303.07 66.3591 306.13 69.9691 312.5 70.1891C316.767 70.3358 320.273 68.8458 323.02 65.7191C323.166 65.5546 323.357 65.4352 323.571 65.3751C323.785 65.3149 324.014 65.3163 324.23 65.3791C336.65 69.1091 347.03 79.8291 347.17 93.3591Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape2&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6211575655465 7.33540715628013)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.203 7.20842C347.509 15.0284 344.683 21.2384 338.723 25.8384C337.243 26.9851 335.446 27.5718 333.333 27.5984C326.179 27.6784 319.159 27.7518 312.273 27.8184C310.053 27.8384 308.413 26.8684 307.333 24.9584C307.159 24.651 307.07 24.3028 307.074 23.9484C307.077 23.594 307.173 23.2458 307.353 22.9384C309.706 18.9451 308.913 15.9118 304.973 13.8384C302.553 12.5718 300.179 13.0884 297.853 15.3884C293.353 19.8484 286.493 27.5784 279.663 27.5984C270.883 27.6184 261.953 27.6151 252.873 27.5884C246.053 27.5784 239.713 22.4684 235.033 17.5684C231.633 13.9984 228.093 11.2484 222.953 14.3584C219.153 16.6584 218.973 22.2484 221.903 25.1784C222.045 25.3214 222.137 25.5067 222.166 25.706C222.195 25.9053 222.159 26.108 222.062 26.2834C221.966 26.4588 221.815 26.5975 221.633 26.6784C220.199 27.3318 218.603 27.6551 216.843 27.6484C189.723 27.5018 162.073 27.5784 133.893 27.8784C132.419 27.8984 131.099 27.4284 129.933 26.4684C129.567 26.1723 129.332 25.7446 129.278 25.2775C129.224 24.8105 129.355 24.3403 129.643 23.9684C130.393 22.9984 131.193 21.9984 131.193 20.7084C131.199 16.5284 129.253 14.0784 125.353 13.3584C123.123 12.9384 121.363 13.8184 119.863 15.3684C115.523 19.8484 108.003 27.5184 101.323 27.5684C91.976 27.6218 82.8393 27.6051 73.9126 27.5184C68.8426 27.4584 62.8326 22.0584 59.9726 18.4284C56.9226 14.5584 52.8126 11.2584 48.3326 15.6784C45.9126 18.0718 45.646 20.7284 47.5326 23.6484C47.746 23.9818 47.7793 24.3351 47.6326 24.7084C47.0826 26.0584 45.9526 27.6284 44.3126 27.6284C32.766 27.6484 22.5426 27.6451 13.6426 27.6184C10.6026 27.6051 8.0093 26.3851 5.86263 23.9584C1.66263 19.2118 -0.280704 13.7884 0.0326292 7.68842C0.272629 8.94175 0.399296 9.83842 0.412629 10.3784C0.479296 12.4718 1.05596 12.6184 2.14263 10.8184C4.03263 7.67842 7.85263 8.76842 9.88263 11.0484C13.2826 14.8484 18.6726 14.7484 24.2926 14.8784C29.5826 14.9884 36.6226 15.3584 40.5626 12.9384C43.9726 10.8484 44.5726 7.19842 47.2426 4.60842C52.9826 -0.931581 58.6526 2.90842 62.6026 7.88842C72.6426 20.5284 88.1026 23.9784 102.503 16.5684C108.273 13.6084 112.663 7.82842 117.533 3.46842C120.626 0.688419 123.666 0.701752 126.653 3.50842C131.673 8.23842 134.933 13.6084 142.503 14.5284C152.703 15.7784 163.533 16.1484 170.243 6.82842C171.203 5.48842 172.263 4.14175 173.423 2.78842C175.943 -0.161581 180.683 -1.14158 183.543 1.67842C185.673 3.77842 187.123 7.69842 184.653 10.1284C183.846 10.9218 183.073 11.7818 182.333 12.7084C182.175 12.9047 182.074 13.1399 182.041 13.3884C182.007 13.6369 182.043 13.8894 182.143 14.1184C182.463 14.8384 182.963 15.2018 183.643 15.2084C189.949 15.2751 196.403 15.2284 203.003 15.0684C209.923 14.8984 214.923 11.7884 219.273 6.81842C226.913 -1.90158 232.403 0.888419 239.183 8.69842C244.703 15.0484 253.073 19.6684 261.633 20.0584C266.133 20.2651 270.299 19.9618 274.133 19.1484C282.323 17.4084 288.043 12.1284 293.483 5.87842C294.709 4.47175 296.249 3.29842 298.103 2.35842C305.063 -1.16158 310.243 5.32842 312.753 10.7984C314.013 13.5384 316.183 14.4684 319.093 14.5884C327.593 14.9284 334.843 15.0584 340.823 9.17842C341.076 8.92509 341.379 8.75175 341.733 8.65842Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape3&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.7941352600339 9.3230859375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M17.6779 0C16.5513 11.84 15.9213 19.36 15.7879 22.56C15.3079 33.9733 14.6346 46.28 13.7679 59.48C13.6013 62.04 13.1046 63.7467 12.2779 64.6C8.55793 68.45 -0.30207 67.53 0.00793038 61.06C1.34793 33.3133 2.02793 12.9867 2.04793 0.08Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape4&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9413128810975 9.32414062500001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M201.657 0.05C201.63 7.10333 201.687 11.5967 201.827 13.53C203.28 33.53 204.617 53.6 205.837 73.74L186.487 73.78L193.557 73.61C193.714 73.6076 193.867 73.5609 193.998 73.4752C194.129 73.3896 194.234 73.2685 194.299 73.126C194.364 72.9835 194.388 72.8254 194.367 72.67C193.367 64.75 192.894 56.7733 192.947 48.74C196.9 43.82 196.69 38.93 192.317 34.07C191.537 32.47 191.137 31.2867 191.117 30.52C190.984 25.7933 191.01 21.2667 191.197 16.94C191.213 16.5684 191.128 16.1993 190.951 15.872C190.773 15.5446 190.51 15.2711 190.189 15.0807C189.868 14.8902 189.501 14.7897 189.127 14.79L153.317 14.9C152.777 12.9667 151.747 11.28 150.227 9.84C148.927 8.60667 147.257 7.7 145.217 7.12C138.364 5.17333 133.557 7.71667 130.797 14.75C116.39 14.8967 101.944 14.9467 87.4571 14.9C61.1271 14.81 34.7871 15.13 8.5371 15.06C6.00377 15.0533 4.15377 14.7633 2.9871 14.19C0.773767 13.11 -0.209566 11.2233 0.0371003 8.53C0.150434 7.29667 0.770434 4.45333 1.8971 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape5&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.5460546875 9.32519283839548)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M3.69 73.6301L0 0.0700704L9.97 7.03745e-05C10.1004 -0.00175254 10.2289 0.031869 10.3421 0.0974247C10.4553 0.16298 10.5492 0.258107 10.6139 0.372872C10.6786 0.487637 10.7118 0.617903 10.71 0.75007C10.55 11.1234 10.7367 21.0567 11.27 30.5501C12.07 44.8301 12.51 58.8001 13.82 72.9701C13.8293 73.0668 13.8114 73.1643 13.7681 73.2514C13.7249 73.3384 13.6581 73.4116 13.5754 73.4627C13.4926 73.5137 13.3972 73.5405 13.3 73.5401Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape6&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.3825550063776 9.3230859375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M13.7551 0.08C13.7351 12.9867 13.0551 33.3133 11.7151 61.06C11.4051 67.53 20.2651 68.45 23.9851 64.6C24.8118 63.7467 25.3084 62.04 25.4751 59.48C26.3418 46.28 27.0151 33.9733 27.4951 22.56C27.6284 19.36 28.2584 11.84 29.3851 0L46.2351 0.03C45.1084 4.48333 44.4884 7.32667 44.3751 8.56C44.1284 11.2533 45.1118 13.14 47.3251 14.22C48.4918 14.7933 50.3418 15.0833 52.8751 15.09C79.1251 15.16 105.465 14.84 131.795 14.93C146.282 14.9767 160.728 14.9267 175.135 14.78C174.568 20.8133 176.498 24.9267 180.925 27.12C183.338 28.3133 185.805 28.72 188.325 28.34C194.755 27.36 198.095 21.26 197.655 14.93L233.465 14.82C233.839 14.8197 234.206 14.9202 234.527 15.1107C234.848 15.3011 235.111 15.5746 235.289 15.902C235.466 16.2293 235.551 16.5984 235.535 16.97C235.348 21.2967 235.322 25.8233 235.455 30.55C235.475 31.3167 235.875 32.5 236.655 34.1C232.788 31.5133 229.168 30.99 225.795 32.53C211.935 38.83 224.195 59.55 237.285 48.77C237.232 56.8033 237.705 64.78 238.705 72.7C238.726 72.8554 238.702 73.0135 238.637 73.156C238.572 73.2985 238.467 73.4196 238.336 73.5052C238.205 73.5909 238.052 73.6376 237.895 73.64L230.825 73.81L0.605102 73.79C0.205102 73.79 0.00510204 73.59 0.00510204 73.19C-0.0282313 69.6433 0.101769 66.03 0.395102 62.35C2.00177 42.09 2.92177 21.6067 3.1551 0.9C3.16177 0.353333 3.43844 0.08 3.9851 0.08ZM127.005 36.5C127.005 34.413 126.456 32.3624 125.412 30.555C124.369 28.7476 122.867 27.2464 121.06 26.203C119.253 25.1595 117.202 24.61 115.115 24.61C111.963 24.61 108.937 25.8635 106.708 28.0925C104.479 30.3215 103.225 33.3478 103.225 36.5C103.225 39.6522 104.479 42.6785 106.708 44.9075C108.937 47.1365 111.963 48.39 115.115 48.39C117.202 48.39 119.253 47.8405 121.06 46.797C122.867 45.7536 124.369 44.2524 125.412 42.445C126.456 40.6376 127.005 38.587 127.005 36.5ZM75.9704 37.4184C76.0574 34.3019 74.8637 31.2741 72.6541 29.007C70.4445 26.7398 67.3954 25.4143 64.1835 25.3246C62.057 25.2652 59.9523 25.7501 58.0818 26.7303C56.2114 27.7105 54.6403 29.152 53.5271 30.9092C52.414 32.6664 51.7974 34.6782 51.7398 36.7416C51.6528 39.8581 52.8465 42.8859 55.0561 45.153C57.2657 47.4202 60.3148 48.7457 63.5267 48.8354C65.6532 48.8948 67.7579 48.4099 69.6284 47.4297C71.4988 46.4495 73.0699 45.008 74.1831 43.2508C75.2962 41.4936 75.9128 39.4818 75.9704 37.4184ZM183.874 50.7982C183.856 49.4819 183.468 48.1937 182.749 47.0635C182.03 45.9334 181.006 45.0007 179.779 44.3595C178.552 43.7184 177.166 43.3911 175.76 43.4107C173.637 43.4404 171.61 44.2595 170.128 45.6863C168.646 47.1131 167.828 49.0336 167.856 51.0218C167.874 52.3381 168.262 53.6263 168.981 54.7565C169.7 55.8866 170.725 56.8193 171.951 57.4605C173.178 58.1016 174.564 58.4289 175.97 58.4093C178.093 58.3796 180.121 57.5605 181.603 56.1337C183.084 54.7069 183.902 52.7864 183.874 50.7982Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape7&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.0305953125001 9.32554685349047)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.0064 0.0100006L9.3364 6.11826e-07C9.61064 -0.000292647 9.87453 0.104847 10.0721 0.293135C10.2697 0.481423 10.3861 0.738544 10.3964 1.01C11.3097 24.8167 12.6431 48.6333 14.3964 72.46C14.4564 73.2867 14.0697 73.7 13.2364 73.7L4.1864 73.7C2.9664 53.56 1.62973 33.49 0.1764 13.49C0.0364 11.5567 -0.0202667 7.06333 0.0064 0.0100006Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape8&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1631696428572 9.32765624999999)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M10.891 0L14.581 73.56L5.85095 73.67C5.70139 73.6731 5.55452 73.6294 5.43088 73.5452C5.30724 73.461 5.21287 73.3403 5.16095 73.2C4.86095 72.3733 4.66095 71.5033 4.56095 70.59C2.05429 47.6433 0.534286 24.6667 0.000952381 1.66C-0.0257143 0.566667 0.507619 0.02 1.60095 0.02Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape9&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.5362571970961 9.55219950584632)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.6165 8.41299C23.0565 14.743 19.7165 20.843 13.2865 21.823C10.7665 22.203 8.2998 21.7963 5.88646 20.603C1.4598 18.4097 -0.470205 14.2963 0.0964619 8.26299C2.85646 1.22966 7.66313 -1.31367 14.5165 0.632992C16.5565 1.21299 18.2265 2.11966 19.5265 3.35299C21.0465 4.79299 22.0765 6.47966 22.6165 8.41299Z&quot;&gt;&lt;/path&gt; &lt;circle id=&quot;shape10&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.0115625 10.18828125)&quot; r=&quot;11.89&quot; cx=&quot;11.89&quot; cy=&quot;11.89&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape11&quot; transform=&quot;matrix(0.0351425431068875 0.000981620111375468 -0.000981620111375468 0.0351425431068875 14.2130771675543 10.2015061448131)&quot; rx=&quot;12.12&quot; ry=&quot;11.76&quot; cx=&quot;12.12&quot; cy=&quot;11.76&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape12&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 20.1057469902912 10.4364122450525)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M16.9732 2.43205C21.3465 7.29205 21.5565 12.1821 17.6032 17.1021C4.5132 27.8821 -7.7468 7.16205 6.1132 0.862052C9.48653 -0.677948 13.1065 -0.154615 16.9732 2.43205Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape13&quot; transform=&quot;matrix(0.0351528231097021 -0.000490857902548076 0.000490857902548076 0.0351528231097021 18.2800569526222 10.8531762234766)&quot; rx=&quot;8.01&quot; ry=&quot;7.5&quot; cx=&quot;8.01&quot; cy=&quot;7.5&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape14&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.47390625 12.828515625)&quot; fill=&quot;rgb(178,96,51)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0 300.33C1.52 298.69 3.53 298.057 6.03 298.43C6.10297 298.443 6.17377 298.447 6.24 298.44C6.65333 298.413 6.88667 298.26 6.94 297.98C7 297.66 7.19333 297.493 7.52 297.48L10.29 297.39C10.4233 297.383 10.5567 297.367 10.69 297.34C11.0167 297.267 11.1733 297.127 11.16 296.92C11.1467 296.7 11.2467 296.563 11.46 296.51C12.1467 296.337 12.7433 295.997 13.25 295.49C13.49 295.257 13.58 294.973 13.52 294.64C13.1333 292.653 12.8767 290.647 12.75 288.62C12.69 287.79 12.27 287.35 11.7 286.83C11.4533 286.603 11.3933 286.337 11.52 286.03C11.8533 285.197 11.6767 284.573 10.99 284.16C10.7367 284 10.46 283.923 10.16 283.93L6.56 284.02C15.1 281.92 21.0833 280.04 24.51 278.38C27.5033 276.927 30.4033 275.357 33.21 273.67C33.319 273.603 33.3974 273.495 33.4282 273.371C33.4589 273.246 33.4397 273.115 33.3746 273.004C33.3096 272.894 33.2037 272.813 33.08 272.78C32.5067 272.62 31.9433 272.67 31.39 272.93C63.5767 260.003 88.4967 238.95 106.15 209.77C109.223 204.703 112.093 199 114.76 192.66C118.06 184.807 120.343 178.587 121.61 174C123.097 168.613 124.457 162.397 125.69 155.35C126.657 149.857 126.873 144.25 126.34 138.53C127.853 138.57 128.907 138.097 129.5 137.11C131.56 133.67 131.433 130.473 129.12 127.52C128.24 126.39 127.07 126.39 125.77 126.38C120.017 126.347 114.427 126.37 109 126.45C108.613 125.77 108.27 125.09 107.97 124.41C107.69 123.77 107.527 123.037 107.48 122.21C106.953 112.977 106.213 103.723 105.26 94.45C110.127 94.5633 114.617 94.5833 118.73 94.51C121.27 94.47 123.93 94.86 126 93.31C128.053 91.77 128.717 89.61 127.99 86.83C127.23 83.89 124.98 82.2967 121.24 82.05L120.9 72.32C124.973 70.3667 126.23 67.5767 124.67 63.95C123.697 61.6833 121.82 60.52 119.04 60.46C117.273 58.24 116.223 56.5633 115.89 55.43C113.43 47.1033 110.547 38.9133 107.24 30.86C106.947 30.1467 107 29.0333 107.4 27.52C109.087 27.4933 110.883 27.5267 112.79 27.62C115.45 27.7533 117.403 26.9667 118.65 25.26C121.02 22.01 120.02 17.98 116.55 16.23C115.597 15.75 114.193 15.5133 112.34 15.52C107.533 15.54 102.823 15.4767 98.21 15.33C97.6033 13.9433 96.9433 12.6033 96.23 11.31C94.38 7.96 93.99 4.82 92.56 1.46C92.4467 1.18667 92.5067 0.963333 92.74 0.79L93.19 0.46C93.4567 0.273333 93.4267 0.176667 93.1 0.17L55.31 0L131.2 0.2C131.371 0.200762 131.536 0.26037 131.671 0.369176C131.805 0.477981 131.9 0.629779 131.94 0.8C133.38 7.23333 134.593 14.0833 135.58 21.35C139.67 51.61 143.36 78.87 145.72 107.57C147.27 126.44 146.89 145.44 143.29 163.8C138.28 189.4 127.86 214.54 111.86 234.74C90.34 261.87 61.85 283.26 28.89 293.96C20.1567 296.793 10.5267 298.917 0 300.33Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape15&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.2758764491296 12.828515625)&quot; fill=&quot;rgb(191,129,58)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M231.61 0L269.4 0.17C269.726 0.176667 269.756 0.273333 269.49 0.46L269.04 0.79C268.806 0.963333 268.746 1.18667 268.86 1.46C270.29 4.82 270.68 7.96 272.53 11.31C273.243 12.6033 273.903 13.9433 274.51 15.33C268.76 17.07 269.07 27.78 275.82 27.53C278.38 27.43 281.006 27.4267 283.7 27.52C283.3 29.0333 283.246 30.1467 283.54 30.86C286.846 38.9133 289.73 47.1033 292.19 55.43C292.523 56.5633 293.573 58.24 295.34 60.46C290.98 60.76 286.806 61.0267 282.82 61.26C277.7 61.56 274.45 67.2 278.08 71.26C278.86 72.1333 280.413 72.6 282.74 72.66C287.386 72.7733 292.206 72.66 297.2 72.32L297.54 82.05C293.013 81.9567 288.443 81.9633 283.83 82.07C281.84 82.11 280.61 82.75 279.5 84.26C276.44 88.44 277.126 91.8367 281.56 94.45C282.513 103.723 283.253 112.977 283.78 122.21C283.826 123.037 283.99 123.77 284.27 124.41C284.57 125.09 284.913 125.77 285.3 126.45C282.193 127.497 280.633 129.463 280.62 132.35C280.613 134.79 281.763 136.753 284.07 138.24C281.93 156.593 277.493 173.123 270.76 187.83C261.606 207.817 247.22 225.063 227.6 239.57C218.546 246.263 208.406 252.023 197.18 256.85C191.52 259.28 187.21 264.45 191.61 270.42C195.03 275.03 202.58 274.56 207.69 272.93C208.243 272.67 208.806 272.62 209.38 272.78C209.503 272.813 209.609 272.894 209.674 273.004C209.739 273.115 209.758 273.246 209.728 273.371C209.697 273.495 209.619 273.603 209.51 273.67C206.703 275.357 203.803 276.927 200.81 278.38C197.383 280.04 191.4 281.92 182.86 284.02C165.386 287.427 148.786 288.113 133.06 286.08C116.433 283.94 99.2895 279.17 81.6295 271.77C75.1162 269.043 68.6828 266.14 62.3295 263.06C54.3762 259.2 46.8962 254.463 39.8895 248.85C40.5695 248.377 41.3595 247.947 42.2595 247.56C44.5695 246.55 46.3695 244.3 44.1695 241.99C29.1962 226.303 18.1928 209.247 11.1595 190.82C1.95285 166.687 -1.55715 141.62 0.629514 115.62C2.01618 99.0867 3.45618 82.5733 4.94951 66.08C5.49618 59.9533 6.20618 53.32 7.07951 46.18C8.95285 30.8733 10.7762 15.5733 12.5495 0.28ZM230.747 11.7302C228.758 9.7412 226.058 8.62261 223.245 8.62261C220.432 8.62261 217.731 9.7412 215.742 11.7302L213.89 13.5829C211.901 15.5719 210.782 18.2724 210.782 21.0853C210.782 23.8982 211.901 26.5987 213.89 28.5877L215.092 29.7898C217.081 31.7788 219.781 32.8974 222.594 32.8974C225.407 32.8974 228.108 31.7788 230.097 29.7898L231.949 27.9371C233.938 25.9481 235.057 23.2476 235.057 20.4347C235.057 17.6218 233.938 14.9213 231.949 12.9323ZM47.1595 186.78C39.7128 170.84 35.7195 154.833 35.1795 138.76C34.9528 131.94 35.0895 124.72 35.5895 117.1C37.1495 93.44 39.2662 67.4833 41.9395 39.23C42.3395 35.0167 42.6262 30.7267 42.7995 26.36C43.4195 10.9 25.2095 12.45 24.4195 25.69C23.0462 48.79 21.1195 72.2233 18.6395 95.99C17.6595 105.337 16.9995 114.63 16.6595 123.87C16.3328 132.65 16.6595 140.653 17.6395 147.88C19.5062 161.707 22.9728 175.147 28.0395 188.2C29.1795 191.153 30.6662 194.07 32.4995 196.95C35.2995 201.37 41.5395 202.72 45.3395 198.89C48.7328 195.483 49.3395 191.447 47.1595 186.78ZM87.1943 37.8021C86.8236 36.4743 85.902 35.3574 84.6342 34.6994C83.3663 34.0413 81.8534 33.8945 80.4311 34.2916C79.0088 34.6887 77.7908 35.598 77.0472 36.8177C76.3037 38.0374 76.094 39.4701 76.4647 40.7979C76.8355 42.1257 77.757 43.2426 79.0249 43.9006C80.2927 44.5587 81.8056 44.7055 83.2279 44.3084C84.6502 43.9113 85.8682 43.002 86.6118 41.7823C87.3554 40.5626 87.565 39.1299 87.1943 37.8021ZM242.9 63.3691C242.905 60.5116 242.14 57.7024 240.682 55.2252C239.224 52.7479 237.124 50.6888 234.594 49.2556C232.064 47.8225 229.192 47.0651 226.268 47.06C223.344 47.0549 220.469 47.8022 217.934 49.2266C215.399 50.6509 213.292 52.7027 211.826 55.1748C210.359 57.6469 209.585 60.4534 209.58 63.3109C209.575 66.1684 210.34 68.9776 211.797 71.4548C213.255 73.9321 215.355 75.9912 217.885 77.4244C220.415 78.8575 223.287 79.6149 226.211 79.62C229.135 79.6251 232.01 78.8778 234.545 77.4534C237.08 76.0291 239.187 73.9773 240.653 71.5052C242.12 69.0331 242.895 66.2266 242.9 63.3691ZM85.9041 71.8823C88.1531 72.912 90.7367 72.9736 93.0816 72.0534C95.4266 71.1333 97.3455 69.3049 98.4127 66.9739C99.1193 65.4306 99.4215 63.7348 99.2889 62.0574C99.1563 60.38 98.5935 58.7796 97.6572 57.4176C96.721 56.0556 95.4439 54.9794 93.9549 54.2977C91.7059 53.268 89.1223 53.2064 86.7774 54.1266C84.4325 55.0467 82.5135 56.8751 81.4463 59.2061C80.7398 60.7494 80.4375 62.4452 80.5701 64.1226C80.7028 65.8 81.2656 67.4004 82.2018 68.7624C83.1381 70.1244 84.4151 71.2006 85.9041 71.8823ZM60.6086 105.171C63.2448 106.638 66.3725 106.974 69.2978 106.105C72.223 105.236 74.7122 103.231 76.213 100.535C77.7138 97.8381 78.1063 94.6659 77.3035 91.7217C76.5007 88.7775 74.5666 86.2966 71.9304 84.8293C69.2942 83.362 66.1665 83.0257 63.2413 83.8948C60.316 84.7639 57.8268 86.7691 56.326 89.4655C54.8252 92.1619 54.4327 95.3341 55.2355 98.2783C56.0384 101.222 57.9724 103.703 60.6086 105.171ZM187.08 98.11C187.08 96.1959 186.318 94.3582 184.965 93.0047C183.611 91.6512 181.774 90.89 179.86 90.89C177.945 90.89 176.108 91.6512 174.754 93.0047C173.401 94.3582 172.64 96.1959 172.64 98.11C172.64 100.024 173.401 101.862 174.754 103.215C176.108 104.569 177.945 105.33 179.86 105.33C181.127 105.33 182.372 104.996 183.47 104.363C184.567 103.729 185.479 102.817 186.112 101.72C186.746 100.623 187.08 99.3773 187.08 98.11ZM234.564 99.0027C233.705 97.863 232.551 96.9774 231.217 96.4351C229.883 95.8929 228.416 95.7129 226.964 95.9133C225.513 96.1138 224.127 96.6877 222.947 97.5771C221.766 98.4665 220.833 99.6405 220.24 100.981C219.647 102.321 219.416 103.78 219.57 105.212C219.723 106.644 220.256 107.998 221.115 109.137C221.974 110.277 223.128 111.163 224.462 111.705C225.796 112.247 227.263 112.427 228.715 112.227C230.166 112.026 231.552 111.452 232.732 110.563C233.913 109.673 234.846 108.499 235.439 107.159C236.032 105.819 236.263 104.36 236.109 102.928C235.956 101.496 235.423 100.142 234.564 99.0027ZM47.9695 214.56C45.1695 220.83 50.0195 225.32 54.0495 229.45C57.6895 233.19 61.8995 236.09 66.6995 232.86C71.8895 229.38 72.0595 223.24 67.9795 218.66C64.2095 214.41 60.6395 209.6 54.3295 209.99C51.4095 210.17 49.1195 211.99 47.9695 214.56Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape16&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.8026079545455 12.838359375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M26.0114 0C24.238 15.2933 22.4147 30.5933 20.5414 45.9C19.668 53.04 18.958 59.6733 18.4114 65.8C16.918 82.2933 15.478 98.8067 14.0914 115.34C11.9047 141.34 15.4147 166.407 24.6214 190.54C31.6547 208.967 42.658 226.023 57.6314 241.71C59.8314 244.02 58.0314 246.27 55.7214 247.28C54.8214 247.667 54.0314 248.097 53.3514 248.57C51.9014 250.07 52.3314 253.14 52.3514 255.14C31.6214 235.93 17.0114 211.99 8.66137 185.13C2.48804 165.29 -0.385293 145.337 0.0413737 125.27C0.691374 94.91 5.82137 63.64 9.38137 32.5C9.99471 27.1467 10.7014 21.75 11.5014 16.31C12.3214 10.7767 13.5247 5.69667 15.1114 1.07C15.2107 0.778294 15.3987 0.524438 15.6494 0.343583C15.9001 0.162728 16.2013 0.0636261 16.5114 0.06Z&quot;&gt;&lt;/path&gt; &lt;rect id=&quot;shape17&quot; transform=&quot;matrix(0.0248592227760896 -0.0248592227760896 0.0248592227760896 0.0248592227760896 19.531681996495 13.569794617477)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; width=&quot;23.84&quot; height=&quot;22.92&quot; rx=&quot;10.61&quot; ry=&quot;10.61&quot;&gt;&lt;/rect&gt; &lt;path id=&quot;shape18&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.857255859375 13.3649990428515)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M30.6225 171.52C32.8025 176.187 32.1958 180.223 28.8025 183.63C25.0025 187.46 18.7625 186.11 15.9625 181.69C14.1292 178.81 12.6425 175.893 11.5025 172.94C6.43583 159.887 2.96917 146.447 1.1025 132.62C0.1225 125.393 -0.204167 117.39 0.1225 108.61C0.4625 99.37 1.1225 90.0767 2.1025 80.73C4.5825 56.9634 6.50917 33.53 7.8825 10.43C8.6725 -2.80997 26.8825 -4.35997 26.2625 11.1C26.0892 15.4667 25.8025 19.7567 25.4025 23.97C22.7292 52.2234 20.6125 78.18 19.0525 101.84C18.5525 109.46 18.4158 116.68 18.6425 123.5C19.1825 139.573 23.1758 155.58 30.6225 171.52Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape19&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.7841415488515 13.3674609375)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.0522 0C8.66553 0.146667 13.3755 0.21 18.1822 0.19C20.0355 0.183333 21.4389 0.42 22.3922 0.9C25.8622 2.65 26.8622 6.68 24.4922 9.93C23.2455 11.6367 21.2922 12.4233 18.6322 12.29C16.7255 12.1967 14.9289 12.1633 13.2422 12.19C10.5489 12.0967 7.9222 12.1 5.3622 12.2C-1.3878 12.45 -1.6978 1.74 4.0522 0Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape20&quot; transform=&quot;matrix(0.0338611839889802 -0.00945421244350544 0.00945421244350544 0.0338611839889802 14.9149266129752 14.0867380565676)&quot; rx=&quot;5.57&quot; ry=&quot;5.2&quot; cx=&quot;5.57&quot; cy=&quot;5.2&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape21&quot; transform=&quot;matrix(0.0351561964539828 6.13592003636124e-05 -6.13592003636124e-05 0.0351561964539828 19.6449060698586 14.4819473774511)&quot; rx=&quot;16.66&quot; ry=&quot;16.28&quot; cx=&quot;16.66&quot; cy=&quot;16.28&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape22&quot; transform=&quot;matrix(-0.0146348716029047 0.031965331958686 -0.031965331958686 -0.0146348716029047 15.8772166930746 14.8739620295146)&quot; rx=&quot;9.67&quot; ry=&quot;9.33&quot; cx=&quot;9.67&quot; cy=&quot;9.33&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape23&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.997793706651 14.9540625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M18.805 0C21.585 0.06 23.4616 1.22333 24.435 3.49C25.995 7.11667 24.7383 9.90667 20.665 11.86C15.6716 12.2 10.8516 12.3133 6.20498 12.2C3.87831 12.14 2.32498 11.6733 1.54498 10.8C-2.08502 6.74 1.16498 1.1 6.28498 0.8C10.2716 0.566667 14.445 0.3 18.805 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape24&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.0361349190606 15.7107890625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M19.9144 0.0653333C23.6544 0.312 25.9044 1.90533 26.6644 4.84533C27.3911 7.62533 26.7277 9.78533 24.6744 11.3253C22.6044 12.8753 19.9444 12.4853 17.4044 12.5253C13.2911 12.5987 8.80105 12.5787 3.93438 12.4653C-0.498949 9.852 -1.18562 6.45533 1.87438 2.27533C2.98438 0.765333 4.21438 0.125333 6.20438 0.0853333C10.8177 -0.0213333 15.3877 -0.028 19.9144 0.0653333Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape25&quot; transform=&quot;matrix(-0.0170977282180133 0.0307185547160906 -0.0307185547160906 -0.0170977282180133 15.1542587716268 16.0053675452257)&quot; rx=&quot;11.64&quot; ry=&quot;11.38&quot; cx=&quot;11.64&quot; cy=&quot;11.38&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;circle id=&quot;shape26&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.345234375 16.0238671875)&quot; r=&quot;7.22&quot; cx=&quot;7.22&quot; cy=&quot;7.22&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape27&quot; transform=&quot;matrix(0.0280770296501001 -0.0211575594076892 0.0211575594076892 0.0280770296501001 19.8774398273616 16.4371069616574)&quot; rx=&quot;8.42&quot; ry=&quot;8.13&quot; cx=&quot;8.42&quot; cy=&quot;8.13&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape28&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1414052368516 17.2710454963236)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.02 12.1647L3.45003 11.8747C1.14336 10.388 -0.00663785 8.42471 2.88184e-05 5.98471C0.0133622 3.09804 1.57336 1.13137 4.68003 0.0847059C10.1067 0.00470588 15.6967 -0.0186275 21.45 0.0147059C22.75 0.0247059 23.92 0.0247059 24.8 1.15471C27.1134 4.10804 27.24 7.30471 25.18 10.7447C24.5867 11.7314 23.5334 12.2047 22.02 12.1647Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape29&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.9485123620206 17.688515625)&quot; fill=&quot;rgb(191,113,56)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M94.2701 0L112.84 0.29C113.373 6.01 113.157 11.6167 112.19 17.11C110.957 24.1567 109.597 30.3733 108.11 35.76C106.843 40.3467 104.56 46.5667 101.26 54.42C98.5934 60.76 95.7234 66.4633 92.6501 71.53C74.9968 100.71 50.0768 121.763 17.8901 134.69C12.7801 136.32 5.23009 136.79 1.81009 132.18C-2.58991 126.21 1.72009 121.04 7.38009 118.61C18.6068 113.783 28.7468 108.023 37.8001 101.33C57.4201 86.8233 71.8068 69.5767 80.9601 49.59C87.6934 34.8833 92.1301 18.3533 94.2701 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape30&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9331058615201 20.210194296345)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.830544 4.59225C1.98054 2.02225 4.27054 0.202251 7.19054 0.0222511C13.5005 -0.367749 17.0705 4.44225 20.8405 8.69225C24.9205 13.2723 24.7505 19.4123 19.5605 22.8923C14.7605 26.1223 10.5505 23.2223 6.91054 19.4823C2.88054 15.3523 -1.96946 10.8623 0.830544 4.59225Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape31&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.6404577789765 21.5771484375)&quot; fill=&quot;rgb(191,113,56)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.07476 0C8.08142 5.61333 15.5614 10.35 23.5148 14.21C29.8681 17.29 36.3014 20.1933 42.8148 22.92C60.4748 30.32 77.6181 35.09 94.2448 37.23C109.971 39.2633 126.571 38.5767 144.045 35.17L147.645 35.08C147.945 35.0733 148.221 35.15 148.475 35.31C149.161 35.7233 149.338 36.3467 149.005 37.18C148.878 37.4867 148.938 37.7533 149.185 37.98C149.755 38.5 150.175 38.94 150.235 39.77C150.361 41.7967 150.618 43.8033 151.005 45.79C151.065 46.1233 150.975 46.4067 150.735 46.64C150.228 47.1467 149.631 47.4867 148.945 47.66C148.731 47.7133 148.631 47.85 148.645 48.07C148.658 48.2767 148.501 48.4167 148.175 48.49C148.041 48.5167 147.908 48.5333 147.775 48.54L145.005 48.63C144.678 48.6433 144.485 48.81 144.425 49.13C144.371 49.41 144.138 49.5633 143.725 49.59C143.659 49.5967 143.588 49.5933 143.515 49.58C141.015 49.2067 139.005 49.84 137.485 51.48C124.278 53.2267 112.368 53.5833 101.755 52.55C80.2748 50.4633 60.3014 44.84 41.8348 35.68C35.8281 32.7 28.6481 28.54 20.2948 23.2C14.0414 19.2067 7.30142 13.6633 0.0747565 6.57C0.0547565 4.57 -0.375243 1.5 1.07476 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape32&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.548046875 24.3846604970638)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M37.39 126.792L36.84 125.732C36.6867 125.445 36.61 125.139 36.61 124.812L36.29 50.1519C39.97 50.1319 42.74 50.0419 44.93 47.3519C46.0567 45.9652 46.4067 44.4152 45.98 42.7019C44.81 38.0219 40.08 37.5119 35.72 37.6019L35.91 26.2919C40.16 26.9019 44.77 27.8519 48.81 25.9619C52.26 24.3519 53.31 20.2319 50.85 17.2519C48.51 14.4319 45.36 14.2119 41.99 14.2719C35.7567 14.3852 29.3167 14.4052 22.67 14.3319C19.49 14.3019 16.81 15.9619 15.14 18.6319C15.2 16.6619 12.86 15.6819 11.44 14.7519C10.6133 14.2119 9.90667 13.5852 9.32 12.8719C6.57333 9.53188 3.78 6.23188 0.94 2.97188C0.46 2.41855 0.146667 1.62521 0 0.591879C17.1 3.24521 34.28 3.98188 51.54 2.80188C57.06 2.42188 62.3133 1.51855 67.3 0.0918792C68.18 -0.154787 68.3567 0.0952125 67.83 0.841879C58.7633 13.8352 53.49 29.3252 52.01 47.3119C50.37 67.3319 51 88.9819 56.8 107.652C58.81 114.142 62.13 120.072 65.01 126.212C65.0485 126.291 65.0589 126.382 65.0394 126.468C65.02 126.554 64.9718 126.631 64.9029 126.686C64.834 126.741 64.7483 126.772 64.66 126.772Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape33&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.486355851717 24.3923298330305)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.75477 0.373729C1.90143 1.40706 2.21477 2.2004 2.69477 2.75373C5.53477 6.01373 8.3281 9.31373 11.0748 12.6537C11.6614 13.3671 12.3681 13.9937 13.1948 14.5337C14.6148 15.4637 16.9548 16.4437 16.8948 18.4137L16.5848 19.0537C15.9714 19.3604 15.6748 19.8204 15.6948 20.4337C15.8148 23.3437 16.3448 26.1237 18.0248 28.6937C19.9714 31.6737 22.1714 34.5471 24.6248 37.3137C19.6548 39.6737 18.5548 46.9937 24.3448 49.3137C24.1981 53.2071 24.2048 57.1237 24.3648 61.0637C24.5581 65.7371 24.5748 69.6437 24.4148 72.7837C24.2014 77.0371 23.9914 81.3304 23.7848 85.6637C23.1248 99.8304 19.6748 113.244 13.4348 125.904C13.2814 126.21 13.0314 126.384 12.6848 126.424L11.5948 126.534L3.79477 126.534C3.66373 126.534 3.5364 126.49 3.43437 126.408C3.33234 126.325 3.26171 126.21 3.23447 126.082C3.20722 125.954 3.22499 125.82 3.28477 125.704C16.0848 100.784 18.1148 71.0737 14.6948 43.5737C12.8014 28.3737 7.92143 14.0371 0.0547669 0.563729C0.0152725 0.50031 -0.00361813 0.426609 0.000572506 0.352292C0.00476314 0.277975 0.0318434 0.20644 0.0782619 0.147067C0.12468 0.0876949 0.188315 0.0431997 0.26082 0.0194171C0.333326 -0.0043654 0.411387 -0.00634806 0.484767 0.0137292Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape34&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.0617214476865 24.8861307529877)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M21.2988 12.0278C16.7455 11.8878 12.1288 11.8545 7.44881 11.9278C4.74215 11.9678 2.94548 11.7312 2.05881 11.2178C0.238812 10.1645 -0.374521 8.0945 0.218812 5.00784L0.528812 4.36784C2.19881 1.69784 4.87881 0.0378364 8.05881 0.0678364C14.7055 0.14117 21.1455 0.12117 27.3788 0.00783636C30.7488 -0.0521636 33.8988 0.167836 36.2388 2.98784C38.6988 5.96784 37.6488 10.0878 34.1988 11.6978C30.1588 13.5878 25.5488 12.6378 21.2988 12.0278Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape35&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.038091694079 25.0621875000001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.890947 0C0.297614 3.08667 0.910947 5.15667 2.73095 6.21C3.61761 6.72333 5.41428 6.96 8.12095 6.92C12.8009 6.84667 17.4176 6.88 21.9709 7.02L21.7809 18.33L8.93095 18.26C6.47761 15.4933 4.27761 12.62 2.33095 9.64C0.650947 7.07 0.120947 4.29 0.000947368 1.38C-0.0190526 0.766667 0.277614 0.306667 0.890947 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape36&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.2047130847683 25.704140625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.19149 0L17.0415 0.07C21.4015 -0.02 26.1315 0.49 27.3015 5.17C27.7282 6.88333 27.3782 8.43333 26.2515 9.82C24.0615 12.51 21.2915 12.6 17.6115 12.62L3.91149 12C-1.87851 9.68 -0.778506 2.36 4.19149 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape37&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.893984375 26.126015625)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M12.75 0L26.45 0.62L26.77 75.28C26.77 75.6067 26.8467 75.9133 27 76.2L27.55 77.26L0 77.22L1.09 77.11C1.43667 77.07 1.68667 76.8967 1.84 76.59C8.08 63.93 11.53 50.5167 12.19 36.35C12.3967 32.0167 12.6067 27.7233 12.82 23.47C12.98 20.33 12.9633 16.4233 12.77 11.75C12.61 7.81 12.6033 3.89333 12.75 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape38&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.22640625 29.4324536132813)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M29.96 24.0302C30.7067 23.5835 30.1467 23.1702 28.28 22.7902C27.96 22.7235 27.6733 22.5835 27.42 22.3702C24.9333 20.2235 22.8967 18.7069 21.31 17.8202C12.91 13.1069 5.80667 7.21687 0 0.150208L30.09 0.000208333C30.4767 -0.00645833 30.7833 0.146875 31.01 0.460208C37.57 9.69354 45.7567 17.2435 55.57 23.1102C55.9433 23.3302 55.92 23.4969 55.5 23.6102C54.48 23.8769 53.4167 24.0135 52.31 24.0202C44.77 24.0669 37.32 24.0702 29.96 24.0302Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape39&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.2706541442871 29.4394921875)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M38.2747 0C35.2147 4.74667 31.2681 10.0433 26.4347 15.89C23.4547 19.49 20.7014 22.14 18.1747 23.84L0.754727 23.73C-0.17194 23.7233 -0.245273 23.4733 0.534727 22.98C9.87473 17.05 17.3747 9.52 24.9347 0.58C25.0571 0.432797 25.211 0.314351 25.3856 0.233119C25.5601 0.151886 25.7511 0.109846 25.9447 0.11Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape40&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.909609375 29.437734375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M65.9 0C71.7067 7.06667 78.81 12.9567 87.21 17.67C88.7967 18.5567 90.8333 20.0733 93.32 22.22C93.5733 22.4333 93.86 22.5733 94.18 22.64C96.0467 23.02 96.6067 23.4333 95.86 23.88L0 23.89C2.52667 22.19 5.28 19.54 8.26 15.94C13.0933 10.0933 17.04 4.79667 20.1 0.05Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape41&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.6264334548969 30.8390367406574)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M175.558 0.450733C176.245 0.450733 176.568 0.567399 176.528 0.800733C176.494 1.0303 176.388 1.24303 176.226 1.40826C176.065 1.5735 175.855 1.68291 175.628 1.72073C171.935 2.3474 168.581 2.65073 165.568 2.63073C163.998 2.62073 162.798 3.35073 161.188 3.18073C160.808 3.14073 160.445 3.20407 160.098 3.37073L158.488 4.16073C158.195 4.30073 157.958 4.50407 157.778 4.77073C157.045 5.85073 156.111 6.47073 154.978 6.63073C153.258 6.87073 151.491 6.99073 149.678 6.99073C111.858 6.8974 73.5681 6.84073 34.8081 6.82073C28.6781 6.82073 24.4281 9.63073 23.3181 15.9507L0.628115 15.8107C0.50059 15.8104 0.376138 15.7713 0.2713 15.6987C0.166463 15.626 0.0861025 15.5233 0.0409006 15.404C-0.00430136 15.2848 -0.0122487 15.1546 0.0181151 15.0307C2.16812 6.40073 10.0881 -0.0792673 19.0981 0.00073271C53.2181 0.314066 87.8014 0.380733 122.848 0.200733C140.421 0.114066 157.991 0.197399 175.558 0.450733Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape42&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.4462109375 30.8548828125)&quot; fill=&quot;rgb(191,129,58)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M152.24 0L253.08 0.15C253.047 2.17 252.56 3.72667 251.62 4.82C250.867 5.69333 249.93 6.13667 248.81 6.15C221.383 6.39 194.363 6.58667 167.75 6.74C167.283 6.74 167.03 6.97333 166.99 7.44C166.87 8.95333 167.113 10.3433 167.72 11.61C167.847 11.8833 167.89 12.1667 167.85 12.46L167.63 14.18C167.577 14.5867 167.74 14.86 168.12 15C168.573 15.1667 168.867 15.3533 169 15.56L0 15.5C1.11 9.18 5.36 6.37 11.49 6.37C50.25 6.39 88.54 6.44667 126.36 6.54C128.173 6.54 129.94 6.42 131.66 6.18C132.793 6.02 133.727 5.4 134.46 4.32C134.64 4.05333 134.877 3.85 135.17 3.71L136.78 2.92C137.127 2.75333 137.49 2.69 137.87 2.73C139.48 2.9 140.68 2.17 142.25 2.18C145.263 2.2 148.617 1.89667 152.31 1.27C152.537 1.23218 152.746 1.12277 152.908 0.957532C153.07 0.792295 153.175 0.579568 153.21 0.35C153.25 0.116667 152.927 -1.13687e-13 152.24 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape43&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 19.3159081135321 30.86015625)&quot; fill=&quot;rgb(191,113,56)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M86.1197 0C93.6331 3.14 98.2231 7.99667 99.8897 14.57C99.9181 14.684 99.9111 14.804 99.8698 14.914C99.8285 15.024 99.7547 15.1189 99.6583 15.186C99.5618 15.2532 99.4472 15.2894 99.3297 15.29L2.03972 15.41C1.90639 15.2033 1.61306 15.0167 1.15972 14.85C0.779725 14.71 0.616391 14.4367 0.669725 14.03L0.889725 12.31C0.929725 12.0167 0.886391 11.7333 0.759725 11.46C0.153058 10.1933 -0.0902752 8.80333 0.0297248 7.29C0.0697248 6.82333 0.323058 6.59 0.789725 6.59C27.4031 6.43667 54.4231 6.24 81.8497 6C82.9697 5.98667 83.9064 5.54333 84.6597 4.67C85.5997 3.57667 86.0864 2.02 86.1197 0Z&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt;&lt;div class=&quot;w-16 h-16&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;fill-[${rgbColor} w-16 h-16&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 36 36&quot;&gt; &lt;defs&gt;&lt;/defs&gt; &lt;path id=&quot;shape0&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 10.393984646722 3.24851063866497)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M384.119 800.308C389.392 800.401 395.079 800.381 401.179 800.248C405.299 800.161 408.469 800.568 410.689 801.468C415.949 803.598 420.779 810.198 420.289 816.268C419.669 823.858 412.349 829.318 404.999 829.328C277.499 829.355 146.952 829.355 13.3589 829.328C8.63888 829.328 4.09888 825.978 1.87888 822.058C-2.73112 813.888 1.52888 803.918 10.4389 801.028C11.9855 800.528 13.9555 800.285 16.3489 800.298C22.1289 800.338 27.6889 800.265 33.0289 800.078C33.1769 800.076 33.3188 800.017 33.4263 799.913C33.5337 799.809 33.5989 799.668 33.6089 799.518C33.7489 797.391 34.0889 795.351 34.6289 793.398C38.5755 779.138 46.7822 768.285 59.2489 760.838C67.2389 756.068 77.9989 753.418 87.8689 753.798C91.7089 753.938 95.6189 754.578 99.3589 753.338C121.612 745.945 138.126 732.518 148.899 713.058C160.649 691.848 162.149 664.098 156.689 640.298C150.949 615.338 135.539 594.358 113.659 581.418C104.759 576.151 97.1322 571.378 90.7789 567.098C79.8722 559.751 69.4389 550.391 59.4789 539.018C41.7922 518.825 28.7222 496.301 20.2689 471.448C13.2089 450.695 9.41555 429.945 8.88888 409.198C8.39555 389.938 9.51888 370.588 12.2589 351.148C15.7689 326.188 18.7489 301.968 22.2689 277.258C23.1955 270.798 23.9055 264.308 24.3989 257.788C25.2922 245.915 26.1489 234.441 26.9689 223.368C28.2189 206.548 28.2189 189.968 28.2289 172.948C28.229 172.665 28.1641 172.386 28.0392 172.133C27.9143 171.88 27.7328 171.659 27.5089 171.488C4.71888 154.278 -3.35112 123.728 10.2489 97.8679C21.8189 75.8479 44.3589 62.0579 69.5789 63.3579C72.9922 63.5379 76.3389 64.1179 79.6189 65.0979C79.7826 65.1468 79.9567 65.1513 80.1235 65.1109C80.2903 65.0705 80.4439 64.9867 80.5689 64.8679C95.3422 50.8279 113.322 44.9613 134.509 47.2679C134.656 47.2852 134.804 47.2536 134.932 47.1778C135.061 47.102 135.161 46.9862 135.219 46.8479C136.972 42.6213 139.372 38.5079 142.419 34.5079C153.299 20.2379 166.749 9.32792 184.089 3.97792C204.569 -2.34875 224.312 -1.12875 243.319 7.63792C258.599 14.6779 272.559 26.6579 280.469 41.6579C280.596 41.9046 280.792 41.9846 281.059 41.8979C289.839 38.9646 299.389 37.9446 309.709 38.8379C326.729 40.3079 342.309 50.4379 353.989 63.2879C354.516 63.8679 355.166 64.1746 355.939 64.2079C361.419 64.4546 366.656 65.5513 371.649 67.4979C392.199 75.5079 406.519 91.1379 411.669 112.968C413.189 119.421 413.456 125.841 412.469 132.228C409.882 148.975 401.956 162.205 388.689 171.918C387.729 172.628 387.729 173.468 387.719 174.528C387.586 191.895 387.899 207.108 388.659 220.168C389.549 235.238 390.999 253.908 393.189 270.758C396.622 297.205 400.169 324.231 403.829 351.838C404.689 358.351 405.536 366.615 406.369 376.628C407.042 384.655 407.406 391.321 407.459 396.628C407.679 420.268 404.476 443.035 397.849 464.928C386.419 502.718 363.929 536.538 333.029 561.268C324.009 568.498 312.959 575.088 302.869 581.488C297.502 584.888 292.979 588.131 289.299 591.218C265.139 611.508 255.039 640.758 256.429 672.398C258.039 709.018 277.959 738.488 312.639 751.718C317.389 753.528 321.449 754.508 326.659 754.038C338.269 753.008 349.089 755.608 359.129 762.058C371.639 770.088 381.589 784.038 383.299 799.558C383.352 800.045 383.626 800.295 384.119 800.308ZM34.9389 123.938C34.6255 130.038 36.5689 135.461 40.7689 140.208C42.9155 142.635 45.5089 143.855 48.5489 143.868C57.4489 143.895 67.6722 143.898 79.2189 143.878C80.8589 143.878 81.9889 142.308 82.5389 140.958C82.6855 140.585 82.6522 140.231 82.4389 139.898C80.5522 136.978 80.8189 134.321 83.2389 131.928C87.7189 127.508 91.8289 130.808 94.8789 134.678C97.7389 138.308 103.749 143.708 108.819 143.768C117.746 143.855 126.882 143.871 136.229 143.818C142.909 143.768 150.429 136.098 154.769 131.618C156.269 130.068 158.029 129.188 160.259 129.608C164.159 130.328 166.106 132.778 166.099 136.958C166.099 138.248 165.299 139.248 164.549 140.218C164.261 140.59 164.13 141.06 164.184 141.527C164.239 141.994 164.474 142.422 164.839 142.718C166.006 143.678 167.326 144.148 168.799 144.128C196.979 143.828 224.629 143.751 251.749 143.898C253.509 143.905 255.106 143.581 256.539 142.928C256.721 142.847 256.872 142.708 256.969 142.533C257.065 142.358 257.101 142.155 257.073 141.955C257.044 141.756 256.951 141.571 256.809 141.428C253.879 138.498 254.059 132.908 257.859 130.608C262.999 127.498 266.539 130.248 269.939 133.818C274.619 138.718 280.959 143.828 287.779 143.838C296.859 143.865 305.789 143.868 314.569 143.848C321.399 143.828 328.259 136.098 332.759 131.638C335.086 129.338 337.459 128.821 339.879 130.088C343.819 132.161 344.612 135.195 342.259 139.188C342.08 139.495 341.983 139.844 341.98 140.198C341.976 140.552 342.066 140.901 342.239 141.208C343.319 143.118 344.959 144.088 347.179 144.068C354.066 144.001 361.086 143.928 368.239 143.848C370.352 143.821 372.149 143.235 373.629 142.088C379.589 137.488 382.416 131.278 382.109 123.458C381.969 109.928 371.589 99.2079 359.169 95.4779C358.953 95.4151 358.724 95.4137 358.51 95.4738C358.296 95.534 358.105 95.6534 357.959 95.8179C355.212 98.9446 351.706 100.435 347.439 100.288C341.069 100.068 338.009 96.4579 335.789 91.1479C332.202 82.5946 326.232 76.3279 317.879 72.3479C307.626 67.4546 296.802 67.5779 285.409 72.7179C282.069 74.2179 279.519 77.4279 276.309 79.4679C269.159 84.0279 261.339 79.8879 260.179 71.8979C258.606 61.0979 253.279 51.6813 244.199 43.6479C217.109 19.6679 175.399 28.6579 160.839 61.6279C158.766 66.3279 157.699 70.8946 157.639 75.3279C157.559 80.8679 155.339 86.2279 149.929 88.1679C144.262 90.2146 139.372 89.0513 135.259 84.6779C133.749 83.0679 132.859 81.0279 131.499 79.3379C131.286 79.0646 131.012 78.8779 130.679 78.7779C128.472 78.1113 126.346 77.8213 124.299 77.9079C113.326 78.3813 104.429 83.1579 97.6089 92.2379C94.2189 96.7479 94.0089 102.468 90.0089 106.458C86.8589 109.588 81.6689 110.618 77.7089 108.488C73.0155 105.968 70.9422 101.938 71.4889 96.3979C71.5755 95.5313 71.1922 95.0446 70.3389 94.9379C59.7789 93.5446 50.8422 96.5046 43.5289 103.818C38.0555 109.291 35.1922 115.998 34.9389 123.938ZM70.3189 172.868L60.5489 172.868C60.0022 172.868 59.7255 173.141 59.7189 173.688C59.4855 194.395 58.5655 214.878 56.9589 235.138C56.6655 238.818 56.5355 242.431 56.5689 245.978C56.5689 246.378 56.7689 246.578 57.1689 246.578L287.389 246.598L306.739 246.558L315.789 246.558C316.622 246.558 317.009 246.145 316.949 245.318C315.196 221.491 313.862 197.675 312.949 173.868C312.939 173.596 312.822 173.339 312.625 173.151C312.427 172.963 312.163 172.858 311.889 172.858L302.559 172.868L102.799 172.818L85.9489 172.788ZM345.659 172.918L336.369 172.938C335.276 172.938 334.742 173.485 334.769 174.578C335.302 197.585 336.822 220.561 339.329 243.508C339.429 244.421 339.629 245.291 339.929 246.118C339.981 246.258 340.075 246.379 340.199 246.463C340.322 246.547 340.469 246.591 340.619 246.588L349.349 246.478L358.959 246.388C359.056 246.388 359.152 246.362 359.234 246.311C359.317 246.259 359.384 246.186 359.427 246.099C359.47 246.012 359.488 245.915 359.479 245.818C358.169 231.648 357.729 217.678 356.929 203.398C356.396 193.905 356.209 183.971 356.369 173.598C356.371 173.466 356.337 173.335 356.273 173.221C356.208 173.106 356.114 173.011 356.001 172.945C355.888 172.88 355.759 172.846 355.629 172.848ZM285.139 272.498L66.0789 272.778L56.5789 272.838C56.2688 272.842 55.9676 272.941 55.7169 273.122C55.4662 273.302 55.2782 273.556 55.1789 273.848C53.5922 278.475 52.3889 283.555 51.5689 289.088C50.7689 294.528 50.0622 299.925 49.4489 305.278C45.8889 336.418 40.7589 367.688 40.1089 398.048C39.6822 418.115 42.5555 438.068 48.7289 457.908C57.0789 484.768 71.6889 508.708 92.4189 527.918C99.6455 535.011 106.386 540.555 112.639 544.548C120.992 549.888 128.172 554.048 134.179 557.028C152.646 566.188 172.619 571.811 194.099 573.898C204.712 574.931 216.622 574.575 229.829 572.828C240.356 571.415 249.986 569.291 258.719 566.458C291.679 555.758 320.169 534.368 341.689 507.238C357.689 487.038 368.109 461.898 373.119 436.298C376.719 417.938 377.099 398.938 375.549 380.068C373.189 351.368 369.499 324.108 365.409 293.848C364.422 286.581 363.209 279.731 361.769 273.298C361.729 273.128 361.634 272.976 361.499 272.867C361.365 272.758 361.199 272.699 361.029 272.698ZM175.049 601.798L173.779 601.438C173.706 601.418 173.627 601.42 173.555 601.444C173.482 601.467 173.419 601.512 173.372 601.571C173.326 601.631 173.299 601.702 173.295 601.776C173.29 601.851 173.309 601.925 173.349 601.988C181.216 615.461 186.096 629.798 187.989 644.998C191.409 672.498 189.379 702.208 176.579 727.128C176.519 727.245 176.501 727.378 176.529 727.506C176.556 727.635 176.626 727.75 176.728 727.832C176.831 727.914 176.958 727.959 177.089 727.958L184.889 727.958L212.439 727.998L239.709 727.978C239.797 727.978 239.883 727.947 239.952 727.892C240.021 727.837 240.069 727.76 240.088 727.674C240.108 727.588 240.097 727.497 240.059 727.418C237.179 721.278 233.859 715.348 231.849 708.858C226.049 690.188 225.419 668.538 227.059 648.518C228.539 630.531 233.812 615.041 242.879 602.048C243.406 601.301 243.229 601.051 242.349 601.298C237.362 602.725 232.109 603.628 226.589 604.008C209.329 605.188 192.149 604.451 175.049 601.798ZM222.789 744.938L176.989 744.988L164.659 745.098C164.465 745.098 164.274 745.14 164.1 745.221C163.925 745.302 163.771 745.421 163.649 745.568C156.089 754.508 148.589 762.038 139.249 767.968C138.469 768.461 138.542 768.711 139.469 768.718L156.889 768.828L252.749 768.818C260.109 768.858 267.559 768.855 275.099 768.808C276.206 768.801 277.269 768.665 278.289 768.398C278.709 768.285 278.732 768.118 278.359 767.898C268.546 762.031 260.359 754.481 253.799 745.248C253.572 744.935 253.266 744.781 252.879 744.788ZM86.8189 800.748L255.819 800.808L353.109 800.688C353.226 800.687 353.341 800.651 353.437 800.584C353.534 800.517 353.608 800.422 353.649 800.312C353.69 800.202 353.697 800.082 353.669 799.968C352.002 793.395 347.412 788.538 339.899 785.398L239.059 785.248C221.492 784.995 203.922 784.911 186.349 784.998C151.302 785.178 116.719 785.111 82.5989 784.798C73.5889 784.718 65.6689 791.198 63.5189 799.828C63.4885 799.952 63.4965 800.082 63.5417 800.201C63.5869 800.32 63.6672 800.423 63.7721 800.496C63.8769 800.568 64.0014 800.608 64.1289 800.608Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape1&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6223046875 4.3066710451255)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.17 93.3591L341.7 94.8091C341.347 94.9025 341.043 95.0758 340.79 95.3291C334.81 101.209 327.56 101.079 319.06 100.739C316.15 100.619 313.98 99.6891 312.72 96.9491C310.21 91.4791 305.03 84.9891 298.07 88.5091C296.217 89.4491 294.677 90.6225 293.45 92.0291C288.01 98.2791 282.29 103.559 274.1 105.299C270.267 106.112 266.1 106.416 261.6 106.209C253.04 105.819 244.67 101.199 239.15 94.8491C232.37 87.0391 226.88 84.2491 219.24 92.9691C214.89 97.9391 209.89 101.049 202.97 101.219C196.37 101.379 189.917 101.426 183.61 101.359C182.93 101.352 182.43 100.989 182.11 100.269C182.01 100.04 181.975 99.7876 182.008 99.5391C182.042 99.2906 182.143 99.0554 182.3 98.8591C183.04 97.9325 183.813 97.0725 184.62 96.2791C187.09 93.8491 185.64 89.9291 183.51 87.8291C180.65 85.0091 175.91 85.9891 173.39 88.9391C172.23 90.2925 171.17 91.6391 170.21 92.9791C163.5 102.299 152.67 101.929 142.47 100.679C134.9 99.7591 131.64 94.3891 126.62 89.6591C123.633 86.8525 120.593 86.8391 117.5 89.6191C112.63 93.9791 108.24 99.7591 102.47 102.719C88.07 110.129 72.61 106.679 62.57 94.0391C58.62 89.0591 52.95 85.2191 47.21 90.7591C44.54 93.3491 43.94 96.9991 40.53 99.0891C36.59 101.509 29.55 101.139 24.26 101.029C18.64 100.899 13.25 100.999 9.85 97.1991C7.82 94.9191 4 93.8291 2.11 96.9691C1.02333 98.7691 0.446667 98.6225 0.38 96.5291C0.366667 95.9891 0.24 95.0925 0 93.8391C0.253333 85.8991 3.11667 79.1925 8.59 73.7191C15.9033 66.4058 24.84 63.4458 35.4 64.8391C36.2533 64.9458 36.6367 65.4325 36.55 66.2991C36.0033 71.8391 38.0767 75.8691 42.77 78.3891C46.73 80.5191 51.92 79.4891 55.07 76.3591C59.07 72.3691 59.28 66.6491 62.67 62.1391C69.49 53.0591 78.3867 48.2825 89.36 47.8091C91.4067 47.7225 93.5333 48.0125 95.74 48.6791C96.0733 48.7791 96.3467 48.9658 96.56 49.2391C97.92 50.9291 98.81 52.9691 100.32 54.5791C104.433 58.9525 109.323 60.1158 114.99 58.0691C120.4 56.1291 122.62 50.7691 122.7 45.2291C122.76 40.7958 123.827 36.2291 125.9 31.5291C140.46 -1.44087 182.17 -10.4309 209.26 13.5491C218.34 21.5825 223.667 30.9991 225.24 41.7991C226.4 49.7891 234.22 53.9291 241.37 49.3691C244.58 47.3291 247.13 44.1191 250.47 42.6191C261.863 37.4791 272.687 37.3558 282.94 42.2491C291.293 46.2291 297.263 52.4958 300.85 61.0491C303.07 66.3591 306.13 69.9691 312.5 70.1891C316.767 70.3358 320.273 68.8458 323.02 65.7191C323.166 65.5546 323.357 65.4352 323.571 65.3751C323.785 65.3149 324.014 65.3163 324.23 65.3791C336.65 69.1091 347.03 79.8291 347.17 93.3591Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape2&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6211575655465 7.33540715628013)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.203 7.20842C347.509 15.0284 344.683 21.2384 338.723 25.8384C337.243 26.9851 335.446 27.5718 333.333 27.5984C326.179 27.6784 319.159 27.7518 312.273 27.8184C310.053 27.8384 308.413 26.8684 307.333 24.9584C307.159 24.651 307.07 24.3028 307.074 23.9484C307.077 23.594 307.173 23.2458 307.353 22.9384C309.706 18.9451 308.913 15.9118 304.973 13.8384C302.553 12.5718 300.179 13.0884 297.853 15.3884C293.353 19.8484 286.493 27.5784 279.663 27.5984C270.883 27.6184 261.953 27.6151 252.873 27.5884C246.053 27.5784 239.713 22.4684 235.033 17.5684C231.633 13.9984 228.093 11.2484 222.953 14.3584C219.153 16.6584 218.973 22.2484 221.903 25.1784C222.045 25.3214 222.137 25.5067 222.166 25.706C222.195 25.9053 222.159 26.108 222.062 26.2834C221.966 26.4588 221.815 26.5975 221.633 26.6784C220.199 27.3318 218.603 27.6551 216.843 27.6484C189.723 27.5018 162.073 27.5784 133.893 27.8784C132.419 27.8984 131.099 27.4284 129.933 26.4684C129.567 26.1723 129.332 25.7446 129.278 25.2775C129.224 24.8105 129.355 24.3403 129.643 23.9684C130.393 22.9984 131.193 21.9984 131.193 20.7084C131.199 16.5284 129.253 14.0784 125.353 13.3584C123.123 12.9384 121.363 13.8184 119.863 15.3684C115.523 19.8484 108.003 27.5184 101.323 27.5684C91.976 27.6218 82.8393 27.6051 73.9126 27.5184C68.8426 27.4584 62.8326 22.0584 59.9726 18.4284C56.9226 14.5584 52.8126 11.2584 48.3326 15.6784C45.9126 18.0718 45.646 20.7284 47.5326 23.6484C47.746 23.9818 47.7793 24.3351 47.6326 24.7084C47.0826 26.0584 45.9526 27.6284 44.3126 27.6284C32.766 27.6484 22.5426 27.6451 13.6426 27.6184C10.6026 27.6051 8.0093 26.3851 5.86263 23.9584C1.66263 19.2118 -0.280704 13.7884 0.0326292 7.68842C0.272629 8.94175 0.399296 9.83842 0.412629 10.3784C0.479296 12.4718 1.05596 12.6184 2.14263 10.8184C4.03263 7.67842 7.85263 8.76842 9.88263 11.0484C13.2826 14.8484 18.6726 14.7484 24.2926 14.8784C29.5826 14.9884 36.6226 15.3584 40.5626 12.9384C43.9726 10.8484 44.5726 7.19842 47.2426 4.60842C52.9826 -0.931581 58.6526 2.90842 62.6026 7.88842C72.6426 20.5284 88.1026 23.9784 102.503 16.5684C108.273 13.6084 112.663 7.82842 117.533 3.46842C120.626 0.688419 123.666 0.701752 126.653 3.50842C131.673 8.23842 134.933 13.6084 142.503 14.5284C152.703 15.7784 163.533 16.1484 170.243 6.82842C171.203 5.48842 172.263 4.14175 173.423 2.78842C175.943 -0.161581 180.683 -1.14158 183.543 1.67842C185.673 3.77842 187.123 7.69842 184.653 10.1284C183.846 10.9218 183.073 11.7818 182.333 12.7084C182.175 12.9047 182.074 13.1399 182.041 13.3884C182.007 13.6369 182.043 13.8894 182.143 14.1184C182.463 14.8384 182.963 15.2018 183.643 15.2084C189.949 15.2751 196.403 15.2284 203.003 15.0684C209.923 14.8984 214.923 11.7884 219.273 6.81842C226.913 -1.90158 232.403 0.888419 239.183 8.69842C244.703 15.0484 253.073 19.6684 261.633 20.0584C266.133 20.2651 270.299 19.9618 274.133 19.1484C282.323 17.4084 288.043 12.1284 293.483 5.87842C294.709 4.47175 296.249 3.29842 298.103 2.35842C305.063 -1.16158 310.243 5.32842 312.753 10.7984C314.013 13.5384 316.183 14.4684 319.093 14.5884C327.593 14.9284 334.843 15.0584 340.823 9.17842C341.076 8.92509 341.379 8.75175 341.733 8.65842Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape3&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.7941352600339 9.3230859375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M17.6779 0C16.5513 11.84 15.9213 19.36 15.7879 22.56C15.3079 33.9733 14.6346 46.28 13.7679 59.48C13.6013 62.04 13.1046 63.7467 12.2779 64.6C8.55793 68.45 -0.30207 67.53 0.00793038 61.06C1.34793 33.3133 2.02793 12.9867 2.04793 0.08Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape4&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9413128810975 9.32414062500001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M201.657 0.05C201.63 7.10333 201.687 11.5967 201.827 13.53C203.28 33.53 204.617 53.6 205.837 73.74L186.487 73.78L193.557 73.61C193.714 73.6076 193.867 73.5609 193.998 73.4752C194.129 73.3896 194.234 73.2685 194.299 73.126C194.364 72.9835 194.388 72.8254 194.367 72.67C193.367 64.75 192.894 56.7733 192.947 48.74C196.9 43.82 196.69 38.93 192.317 34.07C191.537 32.47 191.137 31.2867 191.117 30.52C190.984 25.7933 191.01 21.2667 191.197 16.94C191.213 16.5684 191.128 16.1993 190.951 15.872C190.773 15.5446 190.51 15.2711 190.189 15.0807C189.868 14.8902 189.501 14.7897 189.127 14.79L153.317 14.9C152.777 12.9667 151.747 11.28 150.227 9.84C148.927 8.60667 147.257 7.7 145.217 7.12C138.364 5.17333 133.557 7.71667 130.797 14.75C116.39 14.8967 101.944 14.9467 87.4571 14.9C61.1271 14.81 34.7871 15.13 8.5371 15.06C6.00377 15.0533 4.15377 14.7633 2.9871 14.19C0.773767 13.11 -0.209566 11.2233 0.0371003 8.53C0.150434 7.29667 0.770434 4.45333 1.8971 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape5&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.5460546875 9.32519283839548)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M3.69 73.6301L0 0.0700704L9.97 7.03745e-05C10.1004 -0.00175254 10.2289 0.031869 10.3421 0.0974247C10.4553 0.16298 10.5492 0.258107 10.6139 0.372872C10.6786 0.487637 10.7118 0.617903 10.71 0.75007C10.55 11.1234 10.7367 21.0567 11.27 30.5501C12.07 44.8301 12.51 58.8001 13.82 72.9701C13.8293 73.0668 13.8114 73.1643 13.7681 73.2514C13.7249 73.3384 13.6581 73.4116 13.5754 73.4627C13.4926 73.5137 13.3972 73.5405 13.3 73.5401Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape6&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.3825550063776 9.3230859375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M13.7551 0.08C13.7351 12.9867 13.0551 33.3133 11.7151 61.06C11.4051 67.53 20.2651 68.45 23.9851 64.6C24.8118 63.7467 25.3084 62.04 25.4751 59.48C26.3418 46.28 27.0151 33.9733 27.4951 22.56C27.6284 19.36 28.2584 11.84 29.3851 0L46.2351 0.03C45.1084 4.48333 44.4884 7.32667 44.3751 8.56C44.1284 11.2533 45.1118 13.14 47.3251 14.22C48.4918 14.7933 50.3418 15.0833 52.8751 15.09C79.1251 15.16 105.465 14.84 131.795 14.93C146.282 14.9767 160.728 14.9267 175.135 14.78C174.568 20.8133 176.498 24.9267 180.925 27.12C183.338 28.3133 185.805 28.72 188.325 28.34C194.755 27.36 198.095 21.26 197.655 14.93L233.465 14.82C233.839 14.8197 234.206 14.9202 234.527 15.1107C234.848 15.3011 235.111 15.5746 235.289 15.902C235.466 16.2293 235.551 16.5984 235.535 16.97C235.348 21.2967 235.322 25.8233 235.455 30.55C235.475 31.3167 235.875 32.5 236.655 34.1C232.788 31.5133 229.168 30.99 225.795 32.53C211.935 38.83 224.195 59.55 237.285 48.77C237.232 56.8033 237.705 64.78 238.705 72.7C238.726 72.8554 238.702 73.0135 238.637 73.156C238.572 73.2985 238.467 73.4196 238.336 73.5052C238.205 73.5909 238.052 73.6376 237.895 73.64L230.825 73.81L0.605102 73.79C0.205102 73.79 0.00510204 73.59 0.00510204 73.19C-0.0282313 69.6433 0.101769 66.03 0.395102 62.35C2.00177 42.09 2.92177 21.6067 3.1551 0.9C3.16177 0.353333 3.43844 0.08 3.9851 0.08ZM127.005 36.5C127.005 34.413 126.456 32.3624 125.412 30.555C124.369 28.7476 122.867 27.2464 121.06 26.203C119.253 25.1595 117.202 24.61 115.115 24.61C111.963 24.61 108.937 25.8635 106.708 28.0925C104.479 30.3215 103.225 33.3478 103.225 36.5C103.225 39.6522 104.479 42.6785 106.708 44.9075C108.937 47.1365 111.963 48.39 115.115 48.39C117.202 48.39 119.253 47.8405 121.06 46.797C122.867 45.7536 124.369 44.2524 125.412 42.445C126.456 40.6376 127.005 38.587 127.005 36.5ZM75.9704 37.4184C76.0574 34.3019 74.8637 31.2741 72.6541 29.007C70.4445 26.7398 67.3954 25.4143 64.1835 25.3246C62.057 25.2652 59.9523 25.7501 58.0818 26.7303C56.2114 27.7105 54.6403 29.152 53.5271 30.9092C52.414 32.6664 51.7974 34.6782 51.7398 36.7416C51.6528 39.8581 52.8465 42.8859 55.0561 45.153C57.2657 47.4202 60.3148 48.7457 63.5267 48.8354C65.6532 48.8948 67.7579 48.4099 69.6284 47.4297C71.4988 46.4495 73.0699 45.008 74.1831 43.2508C75.2962 41.4936 75.9128 39.4818 75.9704 37.4184ZM183.874 50.7982C183.856 49.4819 183.468 48.1937 182.749 47.0635C182.03 45.9334 181.006 45.0007 179.779 44.3595C178.552 43.7184 177.166 43.3911 175.76 43.4107C173.637 43.4404 171.61 44.2595 170.128 45.6863C168.646 47.1131 167.828 49.0336 167.856 51.0218C167.874 52.3381 168.262 53.6263 168.981 54.7565C169.7 55.8866 170.725 56.8193 171.951 57.4605C173.178 58.1016 174.564 58.4289 175.97 58.4093C178.093 58.3796 180.121 57.5605 181.603 56.1337C183.084 54.7069 183.902 52.7864 183.874 50.7982Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape7&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.0305953125001 9.32554685349047)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.0064 0.0100006L9.3364 6.11826e-07C9.61064 -0.000292647 9.87453 0.104847 10.0721 0.293135C10.2697 0.481423 10.3861 0.738544 10.3964 1.01C11.3097 24.8167 12.6431 48.6333 14.3964 72.46C14.4564 73.2867 14.0697 73.7 13.2364 73.7L4.1864 73.7C2.9664 53.56 1.62973 33.49 0.1764 13.49C0.0364 11.5567 -0.0202667 7.06333 0.0064 0.0100006Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape8&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1631696428572 9.32765624999999)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M10.891 0L14.581 73.56L5.85095 73.67C5.70139 73.6731 5.55452 73.6294 5.43088 73.5452C5.30724 73.461 5.21287 73.3403 5.16095 73.2C4.86095 72.3733 4.66095 71.5033 4.56095 70.59C2.05429 47.6433 0.534286 24.6667 0.000952381 1.66C-0.0257143 0.566667 0.507619 0.02 1.60095 0.02Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape9&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.5362571970961 9.55219950584632)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.6165 8.41299C23.0565 14.743 19.7165 20.843 13.2865 21.823C10.7665 22.203 8.2998 21.7963 5.88646 20.603C1.4598 18.4097 -0.470205 14.2963 0.0964619 8.26299C2.85646 1.22966 7.66313 -1.31367 14.5165 0.632992C16.5565 1.21299 18.2265 2.11966 19.5265 3.35299C21.0465 4.79299 22.0765 6.47966 22.6165 8.41299Z&quot;&gt;&lt;/path&gt; &lt;circle id=&quot;shape10&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.0115625 10.18828125)&quot; r=&quot;11.89&quot; cx=&quot;11.89&quot; cy=&quot;11.89&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape11&quot; transform=&quot;matrix(0.0351425431068875 0.000981620111375468 -0.000981620111375468 0.0351425431068875 14.2130771675543 10.2015061448131)&quot; rx=&quot;12.12&quot; ry=&quot;11.76&quot; cx=&quot;12.12&quot; cy=&quot;11.76&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape12&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 20.1057469902912 10.4364122450525)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M16.9732 2.43205C21.3465 7.29205 21.5565 12.1821 17.6032 17.1021C4.5132 27.8821 -7.7468 7.16205 6.1132 0.862052C9.48653 -0.677948 13.1065 -0.154615 16.9732 2.43205Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape13&quot; transform=&quot;matrix(0.0351528231097021 -0.000490857902548076 0.000490857902548076 0.0351528231097021 18.2800569526222 10.8531762234766)&quot; rx=&quot;8.01&quot; ry=&quot;7.5&quot; cx=&quot;8.01&quot; cy=&quot;7.5&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape14&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.47390625 12.828515625)&quot; fill=&quot;rgb(152,83,54)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0 300.33C1.52 298.69 3.53 298.057 6.03 298.43C6.10297 298.443 6.17377 298.447 6.24 298.44C6.65333 298.413 6.88667 298.26 6.94 297.98C7 297.66 7.19333 297.493 7.52 297.48L10.29 297.39C10.4233 297.383 10.5567 297.367 10.69 297.34C11.0167 297.267 11.1733 297.127 11.16 296.92C11.1467 296.7 11.2467 296.563 11.46 296.51C12.1467 296.337 12.7433 295.997 13.25 295.49C13.49 295.257 13.58 294.973 13.52 294.64C13.1333 292.653 12.8767 290.647 12.75 288.62C12.69 287.79 12.27 287.35 11.7 286.83C11.4533 286.603 11.3933 286.337 11.52 286.03C11.8533 285.197 11.6767 284.573 10.99 284.16C10.7367 284 10.46 283.923 10.16 283.93L6.56 284.02C15.1 281.92 21.0833 280.04 24.51 278.38C27.5033 276.927 30.4033 275.357 33.21 273.67C33.319 273.603 33.3974 273.495 33.4282 273.371C33.4589 273.246 33.4397 273.115 33.3746 273.004C33.3096 272.894 33.2037 272.813 33.08 272.78C32.5067 272.62 31.9433 272.67 31.39 272.93C63.5767 260.003 88.4967 238.95 106.15 209.77C109.223 204.703 112.093 199 114.76 192.66C118.06 184.807 120.343 178.587 121.61 174C123.097 168.613 124.457 162.397 125.69 155.35C126.657 149.857 126.873 144.25 126.34 138.53C127.853 138.57 128.907 138.097 129.5 137.11C131.56 133.67 131.433 130.473 129.12 127.52C128.24 126.39 127.07 126.39 125.77 126.38C120.017 126.347 114.427 126.37 109 126.45C108.613 125.77 108.27 125.09 107.97 124.41C107.69 123.77 107.527 123.037 107.48 122.21C106.953 112.977 106.213 103.723 105.26 94.45C110.127 94.5633 114.617 94.5833 118.73 94.51C121.27 94.47 123.93 94.86 126 93.31C128.053 91.77 128.717 89.61 127.99 86.83C127.23 83.89 124.98 82.2967 121.24 82.05L120.9 72.32C124.973 70.3667 126.23 67.5767 124.67 63.95C123.697 61.6833 121.82 60.52 119.04 60.46C117.273 58.24 116.223 56.5633 115.89 55.43C113.43 47.1033 110.547 38.9133 107.24 30.86C106.947 30.1467 107 29.0333 107.4 27.52C109.087 27.4933 110.883 27.5267 112.79 27.62C115.45 27.7533 117.403 26.9667 118.65 25.26C121.02 22.01 120.02 17.98 116.55 16.23C115.597 15.75 114.193 15.5133 112.34 15.52C107.533 15.54 102.823 15.4767 98.21 15.33C97.6033 13.9433 96.9433 12.6033 96.23 11.31C94.38 7.96 93.99 4.82 92.56 1.46C92.4467 1.18667 92.5067 0.963333 92.74 0.79L93.19 0.46C93.4567 0.273333 93.4267 0.176667 93.1 0.17L55.31 0L131.2 0.2C131.371 0.200762 131.536 0.26037 131.671 0.369176C131.805 0.477981 131.9 0.629779 131.94 0.8C133.38 7.23333 134.593 14.0833 135.58 21.35C139.67 51.61 143.36 78.87 145.72 107.57C147.27 126.44 146.89 145.44 143.29 163.8C138.28 189.4 127.86 214.54 111.86 234.74C90.34 261.87 61.85 283.26 28.89 293.96C20.1567 296.793 10.5267 298.917 0 300.33Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape15&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.2758764491296 12.828515625)&quot; fill=&quot;rgb(191,113,56)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M231.61 0L269.4 0.17C269.726 0.176667 269.756 0.273333 269.49 0.46L269.04 0.79C268.806 0.963333 268.746 1.18667 268.86 1.46C270.29 4.82 270.68 7.96 272.53 11.31C273.243 12.6033 273.903 13.9433 274.51 15.33C268.76 17.07 269.07 27.78 275.82 27.53C278.38 27.43 281.006 27.4267 283.7 27.52C283.3 29.0333 283.246 30.1467 283.54 30.86C286.846 38.9133 289.73 47.1033 292.19 55.43C292.523 56.5633 293.573 58.24 295.34 60.46C290.98 60.76 286.806 61.0267 282.82 61.26C277.7 61.56 274.45 67.2 278.08 71.26C278.86 72.1333 280.413 72.6 282.74 72.66C287.386 72.7733 292.206 72.66 297.2 72.32L297.54 82.05C293.013 81.9567 288.443 81.9633 283.83 82.07C281.84 82.11 280.61 82.75 279.5 84.26C276.44 88.44 277.126 91.8367 281.56 94.45C282.513 103.723 283.253 112.977 283.78 122.21C283.826 123.037 283.99 123.77 284.27 124.41C284.57 125.09 284.913 125.77 285.3 126.45C282.193 127.497 280.633 129.463 280.62 132.35C280.613 134.79 281.763 136.753 284.07 138.24C281.93 156.593 277.493 173.123 270.76 187.83C261.606 207.817 247.22 225.063 227.6 239.57C218.546 246.263 208.406 252.023 197.18 256.85C191.52 259.28 187.21 264.45 191.61 270.42C195.03 275.03 202.58 274.56 207.69 272.93C208.243 272.67 208.806 272.62 209.38 272.78C209.503 272.813 209.609 272.894 209.674 273.004C209.739 273.115 209.758 273.246 209.728 273.371C209.697 273.495 209.619 273.603 209.51 273.67C206.703 275.357 203.803 276.927 200.81 278.38C197.383 280.04 191.4 281.92 182.86 284.02C165.386 287.427 148.786 288.113 133.06 286.08C116.433 283.94 99.2895 279.17 81.6295 271.77C75.1162 269.043 68.6828 266.14 62.3295 263.06C54.3762 259.2 46.8962 254.463 39.8895 248.85C40.5695 248.377 41.3595 247.947 42.2595 247.56C44.5695 246.55 46.3695 244.3 44.1695 241.99C29.1962 226.303 18.1928 209.247 11.1595 190.82C1.95285 166.687 -1.55715 141.62 0.629514 115.62C2.01618 99.0867 3.45618 82.5733 4.94951 66.08C5.49618 59.9533 6.20618 53.32 7.07951 46.18C8.95285 30.8733 10.7762 15.5733 12.5495 0.28ZM230.747 11.7302C228.758 9.7412 226.058 8.62261 223.245 8.62261C220.432 8.62261 217.731 9.7412 215.742 11.7302L213.89 13.5829C211.901 15.5719 210.782 18.2724 210.782 21.0853C210.782 23.8982 211.901 26.5987 213.89 28.5877L215.092 29.7898C217.081 31.7788 219.781 32.8974 222.594 32.8974C225.407 32.8974 228.108 31.7788 230.097 29.7898L231.949 27.9371C233.938 25.9481 235.057 23.2476 235.057 20.4347C235.057 17.6218 233.938 14.9213 231.949 12.9323ZM47.1595 186.78C39.7128 170.84 35.7195 154.833 35.1795 138.76C34.9528 131.94 35.0895 124.72 35.5895 117.1C37.1495 93.44 39.2662 67.4833 41.9395 39.23C42.3395 35.0167 42.6262 30.7267 42.7995 26.36C43.4195 10.9 25.2095 12.45 24.4195 25.69C23.0462 48.79 21.1195 72.2233 18.6395 95.99C17.6595 105.337 16.9995 114.63 16.6595 123.87C16.3328 132.65 16.6595 140.653 17.6395 147.88C19.5062 161.707 22.9728 175.147 28.0395 188.2C29.1795 191.153 30.6662 194.07 32.4995 196.95C35.2995 201.37 41.5395 202.72 45.3395 198.89C48.7328 195.483 49.3395 191.447 47.1595 186.78ZM87.1943 37.8021C86.8236 36.4743 85.902 35.3574 84.6342 34.6994C83.3663 34.0413 81.8534 33.8945 80.4311 34.2916C79.0088 34.6887 77.7908 35.598 77.0472 36.8177C76.3037 38.0374 76.094 39.4701 76.4647 40.7979C76.8355 42.1257 77.757 43.2426 79.0249 43.9006C80.2927 44.5587 81.8056 44.7055 83.2279 44.3084C84.6502 43.9113 85.8682 43.002 86.6118 41.7823C87.3554 40.5626 87.565 39.1299 87.1943 37.8021ZM242.9 63.3691C242.905 60.5116 242.14 57.7024 240.682 55.2252C239.224 52.7479 237.124 50.6888 234.594 49.2556C232.064 47.8225 229.192 47.0651 226.268 47.06C223.344 47.0549 220.469 47.8022 217.934 49.2266C215.399 50.6509 213.292 52.7027 211.826 55.1748C210.359 57.6469 209.585 60.4534 209.58 63.3109C209.575 66.1684 210.34 68.9776 211.797 71.4548C213.255 73.9321 215.355 75.9912 217.885 77.4244C220.415 78.8575 223.287 79.6149 226.211 79.62C229.135 79.6251 232.01 78.8778 234.545 77.4534C237.08 76.0291 239.187 73.9773 240.653 71.5052C242.12 69.0331 242.895 66.2266 242.9 63.3691ZM85.9041 71.8823C88.1531 72.912 90.7367 72.9736 93.0816 72.0534C95.4266 71.1333 97.3455 69.3049 98.4127 66.9739C99.1193 65.4306 99.4215 63.7348 99.2889 62.0574C99.1563 60.38 98.5935 58.7796 97.6572 57.4176C96.721 56.0556 95.4439 54.9794 93.9549 54.2977C91.7059 53.268 89.1223 53.2064 86.7774 54.1266C84.4325 55.0467 82.5135 56.8751 81.4463 59.2061C80.7398 60.7494 80.4375 62.4452 80.5701 64.1226C80.7028 65.8 81.2656 67.4004 82.2018 68.7624C83.1381 70.1244 84.4151 71.2006 85.9041 71.8823ZM60.6086 105.171C63.2448 106.638 66.3725 106.974 69.2978 106.105C72.223 105.236 74.7122 103.231 76.213 100.535C77.7138 97.8381 78.1063 94.6659 77.3035 91.7217C76.5007 88.7775 74.5666 86.2966 71.9304 84.8293C69.2942 83.362 66.1665 83.0257 63.2413 83.8948C60.316 84.7639 57.8268 86.7691 56.326 89.4655C54.8252 92.1619 54.4327 95.3341 55.2355 98.2783C56.0384 101.222 57.9724 103.703 60.6086 105.171ZM187.08 98.11C187.08 96.1959 186.318 94.3582 184.965 93.0047C183.611 91.6512 181.774 90.89 179.86 90.89C177.945 90.89 176.108 91.6512 174.754 93.0047C173.401 94.3582 172.64 96.1959 172.64 98.11C172.64 100.024 173.401 101.862 174.754 103.215C176.108 104.569 177.945 105.33 179.86 105.33C181.127 105.33 182.372 104.996 183.47 104.363C184.567 103.729 185.479 102.817 186.112 101.72C186.746 100.623 187.08 99.3773 187.08 98.11ZM234.564 99.0027C233.705 97.863 232.551 96.9774 231.217 96.4351C229.883 95.8929 228.416 95.7129 226.964 95.9133C225.513 96.1138 224.127 96.6877 222.947 97.5771C221.766 98.4665 220.833 99.6405 220.24 100.981C219.647 102.321 219.416 103.78 219.57 105.212C219.723 106.644 220.256 107.998 221.115 109.137C221.974 110.277 223.128 111.163 224.462 111.705C225.796 112.247 227.263 112.427 228.715 112.227C230.166 112.026 231.552 111.452 232.732 110.563C233.913 109.673 234.846 108.499 235.439 107.159C236.032 105.819 236.263 104.36 236.109 102.928C235.956 101.496 235.423 100.142 234.564 99.0027ZM47.9695 214.56C45.1695 220.83 50.0195 225.32 54.0495 229.45C57.6895 233.19 61.8995 236.09 66.6995 232.86C71.8895 229.38 72.0595 223.24 67.9795 218.66C64.2095 214.41 60.6395 209.6 54.3295 209.99C51.4095 210.17 49.1195 211.99 47.9695 214.56Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape16&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.8026079545455 12.838359375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M26.0114 0C24.238 15.2933 22.4147 30.5933 20.5414 45.9C19.668 53.04 18.958 59.6733 18.4114 65.8C16.918 82.2933 15.478 98.8067 14.0914 115.34C11.9047 141.34 15.4147 166.407 24.6214 190.54C31.6547 208.967 42.658 226.023 57.6314 241.71C59.8314 244.02 58.0314 246.27 55.7214 247.28C54.8214 247.667 54.0314 248.097 53.3514 248.57C51.9014 250.07 52.3314 253.14 52.3514 255.14C31.6214 235.93 17.0114 211.99 8.66137 185.13C2.48804 165.29 -0.385293 145.337 0.0413737 125.27C0.691374 94.91 5.82137 63.64 9.38137 32.5C9.99471 27.1467 10.7014 21.75 11.5014 16.31C12.3214 10.7767 13.5247 5.69667 15.1114 1.07C15.2107 0.778294 15.3987 0.524438 15.6494 0.343583C15.9001 0.162728 16.2013 0.0636261 16.5114 0.06Z&quot;&gt;&lt;/path&gt; &lt;rect id=&quot;shape17&quot; transform=&quot;matrix(0.0248592227760896 -0.0248592227760896 0.0248592227760896 0.0248592227760896 19.531681996495 13.569794617477)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; width=&quot;23.84&quot; height=&quot;22.92&quot; rx=&quot;10.61&quot; ry=&quot;10.61&quot;&gt;&lt;/rect&gt; &lt;path id=&quot;shape18&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.857255859375 13.3649990428515)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M30.6225 171.52C32.8025 176.187 32.1958 180.223 28.8025 183.63C25.0025 187.46 18.7625 186.11 15.9625 181.69C14.1292 178.81 12.6425 175.893 11.5025 172.94C6.43583 159.887 2.96917 146.447 1.1025 132.62C0.1225 125.393 -0.204167 117.39 0.1225 108.61C0.4625 99.37 1.1225 90.0767 2.1025 80.73C4.5825 56.9634 6.50917 33.53 7.8825 10.43C8.6725 -2.80997 26.8825 -4.35997 26.2625 11.1C26.0892 15.4667 25.8025 19.7567 25.4025 23.97C22.7292 52.2234 20.6125 78.18 19.0525 101.84C18.5525 109.46 18.4158 116.68 18.6425 123.5C19.1825 139.573 23.1758 155.58 30.6225 171.52Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape19&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.7841415488515 13.3674609375)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.0522 0C8.66553 0.146667 13.3755 0.21 18.1822 0.19C20.0355 0.183333 21.4389 0.42 22.3922 0.9C25.8622 2.65 26.8622 6.68 24.4922 9.93C23.2455 11.6367 21.2922 12.4233 18.6322 12.29C16.7255 12.1967 14.9289 12.1633 13.2422 12.19C10.5489 12.0967 7.9222 12.1 5.3622 12.2C-1.3878 12.45 -1.6978 1.74 4.0522 0Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape20&quot; transform=&quot;matrix(0.0338611839889802 -0.00945421244350544 0.00945421244350544 0.0338611839889802 14.9149266129752 14.0867380565676)&quot; rx=&quot;5.57&quot; ry=&quot;5.2&quot; cx=&quot;5.57&quot; cy=&quot;5.2&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape21&quot; transform=&quot;matrix(0.0351561964539828 6.13592003636124e-05 -6.13592003636124e-05 0.0351561964539828 19.6449060698586 14.4819473774511)&quot; rx=&quot;16.66&quot; ry=&quot;16.28&quot; cx=&quot;16.66&quot; cy=&quot;16.28&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape22&quot; transform=&quot;matrix(-0.0146348716029047 0.031965331958686 -0.031965331958686 -0.0146348716029047 15.8772166930746 14.8739620295146)&quot; rx=&quot;9.67&quot; ry=&quot;9.33&quot; cx=&quot;9.67&quot; cy=&quot;9.33&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape23&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.997793706651 14.9540625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M18.805 0C21.585 0.06 23.4616 1.22333 24.435 3.49C25.995 7.11667 24.7383 9.90667 20.665 11.86C15.6716 12.2 10.8516 12.3133 6.20498 12.2C3.87831 12.14 2.32498 11.6733 1.54498 10.8C-2.08502 6.74 1.16498 1.1 6.28498 0.8C10.2716 0.566667 14.445 0.3 18.805 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape24&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.0361349190606 15.7107890625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M19.9144 0.0653333C23.6544 0.312 25.9044 1.90533 26.6644 4.84533C27.3911 7.62533 26.7277 9.78533 24.6744 11.3253C22.6044 12.8753 19.9444 12.4853 17.4044 12.5253C13.2911 12.5987 8.80105 12.5787 3.93438 12.4653C-0.498949 9.852 -1.18562 6.45533 1.87438 2.27533C2.98438 0.765333 4.21438 0.125333 6.20438 0.0853333C10.8177 -0.0213333 15.3877 -0.028 19.9144 0.0653333Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape25&quot; transform=&quot;matrix(-0.0170977282180133 0.0307185547160906 -0.0307185547160906 -0.0170977282180133 15.1542587716268 16.0053675452257)&quot; rx=&quot;11.64&quot; ry=&quot;11.38&quot; cx=&quot;11.64&quot; cy=&quot;11.38&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;circle id=&quot;shape26&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.345234375 16.0238671875)&quot; r=&quot;7.22&quot; cx=&quot;7.22&quot; cy=&quot;7.22&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape27&quot; transform=&quot;matrix(0.0280770296501001 -0.0211575594076892 0.0211575594076892 0.0280770296501001 19.8774398273616 16.4371069616574)&quot; rx=&quot;8.42&quot; ry=&quot;8.13&quot; cx=&quot;8.42&quot; cy=&quot;8.13&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape28&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1414052368516 17.2710454963236)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.02 12.1647L3.45003 11.8747C1.14336 10.388 -0.00663785 8.42471 2.88184e-05 5.98471C0.0133622 3.09804 1.57336 1.13137 4.68003 0.0847059C10.1067 0.00470588 15.6967 -0.0186275 21.45 0.0147059C22.75 0.0247059 23.92 0.0247059 24.8 1.15471C27.1134 4.10804 27.24 7.30471 25.18 10.7447C24.5867 11.7314 23.5334 12.2047 22.02 12.1647Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape29&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.9485123620206 17.688515625)&quot; fill=&quot;rgb(178,96,51)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M94.2701 0L112.84 0.29C113.373 6.01 113.157 11.6167 112.19 17.11C110.957 24.1567 109.597 30.3733 108.11 35.76C106.843 40.3467 104.56 46.5667 101.26 54.42C98.5934 60.76 95.7234 66.4633 92.6501 71.53C74.9968 100.71 50.0768 121.763 17.8901 134.69C12.7801 136.32 5.23009 136.79 1.81009 132.18C-2.58991 126.21 1.72009 121.04 7.38009 118.61C18.6068 113.783 28.7468 108.023 37.8001 101.33C57.4201 86.8233 71.8068 69.5767 80.9601 49.59C87.6934 34.8833 92.1301 18.3533 94.2701 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape30&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9331058615201 20.210194296345)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.830544 4.59225C1.98054 2.02225 4.27054 0.202251 7.19054 0.0222511C13.5005 -0.367749 17.0705 4.44225 20.8405 8.69225C24.9205 13.2723 24.7505 19.4123 19.5605 22.8923C14.7605 26.1223 10.5505 23.2223 6.91054 19.4823C2.88054 15.3523 -1.96946 10.8623 0.830544 4.59225Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape31&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.6404577789765 21.5771484375)&quot; fill=&quot;rgb(178,96,51)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.07476 0C8.08142 5.61333 15.5614 10.35 23.5148 14.21C29.8681 17.29 36.3014 20.1933 42.8148 22.92C60.4748 30.32 77.6181 35.09 94.2448 37.23C109.971 39.2633 126.571 38.5767 144.045 35.17L147.645 35.08C147.945 35.0733 148.221 35.15 148.475 35.31C149.161 35.7233 149.338 36.3467 149.005 37.18C148.878 37.4867 148.938 37.7533 149.185 37.98C149.755 38.5 150.175 38.94 150.235 39.77C150.361 41.7967 150.618 43.8033 151.005 45.79C151.065 46.1233 150.975 46.4067 150.735 46.64C150.228 47.1467 149.631 47.4867 148.945 47.66C148.731 47.7133 148.631 47.85 148.645 48.07C148.658 48.2767 148.501 48.4167 148.175 48.49C148.041 48.5167 147.908 48.5333 147.775 48.54L145.005 48.63C144.678 48.6433 144.485 48.81 144.425 49.13C144.371 49.41 144.138 49.5633 143.725 49.59C143.659 49.5967 143.588 49.5933 143.515 49.58C141.015 49.2067 139.005 49.84 137.485 51.48C124.278 53.2267 112.368 53.5833 101.755 52.55C80.2748 50.4633 60.3014 44.84 41.8348 35.68C35.8281 32.7 28.6481 28.54 20.2948 23.2C14.0414 19.2067 7.30142 13.6633 0.0747565 6.57C0.0547565 4.57 -0.375243 1.5 1.07476 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape32&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.548046875 24.3846604970638)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M37.39 126.792L36.84 125.732C36.6867 125.445 36.61 125.139 36.61 124.812L36.29 50.1519C39.97 50.1319 42.74 50.0419 44.93 47.3519C46.0567 45.9652 46.4067 44.4152 45.98 42.7019C44.81 38.0219 40.08 37.5119 35.72 37.6019L35.91 26.2919C40.16 26.9019 44.77 27.8519 48.81 25.9619C52.26 24.3519 53.31 20.2319 50.85 17.2519C48.51 14.4319 45.36 14.2119 41.99 14.2719C35.7567 14.3852 29.3167 14.4052 22.67 14.3319C19.49 14.3019 16.81 15.9619 15.14 18.6319C15.2 16.6619 12.86 15.6819 11.44 14.7519C10.6133 14.2119 9.90667 13.5852 9.32 12.8719C6.57333 9.53188 3.78 6.23188 0.94 2.97188C0.46 2.41855 0.146667 1.62521 0 0.591879C17.1 3.24521 34.28 3.98188 51.54 2.80188C57.06 2.42188 62.3133 1.51855 67.3 0.0918792C68.18 -0.154787 68.3567 0.0952125 67.83 0.841879C58.7633 13.8352 53.49 29.3252 52.01 47.3119C50.37 67.3319 51 88.9819 56.8 107.652C58.81 114.142 62.13 120.072 65.01 126.212C65.0485 126.291 65.0589 126.382 65.0394 126.468C65.02 126.554 64.9718 126.631 64.9029 126.686C64.834 126.741 64.7483 126.772 64.66 126.772Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape33&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.486355851717 24.3923298330305)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.75477 0.373729C1.90143 1.40706 2.21477 2.2004 2.69477 2.75373C5.53477 6.01373 8.3281 9.31373 11.0748 12.6537C11.6614 13.3671 12.3681 13.9937 13.1948 14.5337C14.6148 15.4637 16.9548 16.4437 16.8948 18.4137L16.5848 19.0537C15.9714 19.3604 15.6748 19.8204 15.6948 20.4337C15.8148 23.3437 16.3448 26.1237 18.0248 28.6937C19.9714 31.6737 22.1714 34.5471 24.6248 37.3137C19.6548 39.6737 18.5548 46.9937 24.3448 49.3137C24.1981 53.2071 24.2048 57.1237 24.3648 61.0637C24.5581 65.7371 24.5748 69.6437 24.4148 72.7837C24.2014 77.0371 23.9914 81.3304 23.7848 85.6637C23.1248 99.8304 19.6748 113.244 13.4348 125.904C13.2814 126.21 13.0314 126.384 12.6848 126.424L11.5948 126.534L3.79477 126.534C3.66373 126.534 3.5364 126.49 3.43437 126.408C3.33234 126.325 3.26171 126.21 3.23447 126.082C3.20722 125.954 3.22499 125.82 3.28477 125.704C16.0848 100.784 18.1148 71.0737 14.6948 43.5737C12.8014 28.3737 7.92143 14.0371 0.0547669 0.563729C0.0152725 0.50031 -0.00361813 0.426609 0.000572506 0.352292C0.00476314 0.277975 0.0318434 0.20644 0.0782619 0.147067C0.12468 0.0876949 0.188315 0.0431997 0.26082 0.0194171C0.333326 -0.0043654 0.411387 -0.00634806 0.484767 0.0137292Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape34&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.0617214476865 24.8861307529877)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M21.2988 12.0278C16.7455 11.8878 12.1288 11.8545 7.44881 11.9278C4.74215 11.9678 2.94548 11.7312 2.05881 11.2178C0.238812 10.1645 -0.374521 8.0945 0.218812 5.00784L0.528812 4.36784C2.19881 1.69784 4.87881 0.0378364 8.05881 0.0678364C14.7055 0.14117 21.1455 0.12117 27.3788 0.00783636C30.7488 -0.0521636 33.8988 0.167836 36.2388 2.98784C38.6988 5.96784 37.6488 10.0878 34.1988 11.6978C30.1588 13.5878 25.5488 12.6378 21.2988 12.0278Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape35&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.038091694079 25.0621875000001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.890947 0C0.297614 3.08667 0.910947 5.15667 2.73095 6.21C3.61761 6.72333 5.41428 6.96 8.12095 6.92C12.8009 6.84667 17.4176 6.88 21.9709 7.02L21.7809 18.33L8.93095 18.26C6.47761 15.4933 4.27761 12.62 2.33095 9.64C0.650947 7.07 0.120947 4.29 0.000947368 1.38C-0.0190526 0.766667 0.277614 0.306667 0.890947 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape36&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.2047130847683 25.704140625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.19149 0L17.0415 0.07C21.4015 -0.02 26.1315 0.49 27.3015 5.17C27.7282 6.88333 27.3782 8.43333 26.2515 9.82C24.0615 12.51 21.2915 12.6 17.6115 12.62L3.91149 12C-1.87851 9.68 -0.778506 2.36 4.19149 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape37&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.893984375 26.126015625)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M12.75 0L26.45 0.62L26.77 75.28C26.77 75.6067 26.8467 75.9133 27 76.2L27.55 77.26L0 77.22L1.09 77.11C1.43667 77.07 1.68667 76.8967 1.84 76.59C8.08 63.93 11.53 50.5167 12.19 36.35C12.3967 32.0167 12.6067 27.7233 12.82 23.47C12.98 20.33 12.9633 16.4233 12.77 11.75C12.61 7.81 12.6033 3.89333 12.75 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape38&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.22640625 29.4324536132813)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M29.96 24.0302C30.7067 23.5835 30.1467 23.1702 28.28 22.7902C27.96 22.7235 27.6733 22.5835 27.42 22.3702C24.9333 20.2235 22.8967 18.7069 21.31 17.8202C12.91 13.1069 5.80667 7.21687 0 0.150208L30.09 0.000208333C30.4767 -0.00645833 30.7833 0.146875 31.01 0.460208C37.57 9.69354 45.7567 17.2435 55.57 23.1102C55.9433 23.3302 55.92 23.4969 55.5 23.6102C54.48 23.8769 53.4167 24.0135 52.31 24.0202C44.77 24.0669 37.32 24.0702 29.96 24.0302Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape39&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.2706541442871 29.4394921875)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M38.2747 0C35.2147 4.74667 31.2681 10.0433 26.4347 15.89C23.4547 19.49 20.7014 22.14 18.1747 23.84L0.754727 23.73C-0.17194 23.7233 -0.245273 23.4733 0.534727 22.98C9.87473 17.05 17.3747 9.52 24.9347 0.58C25.0571 0.432797 25.211 0.314351 25.3856 0.233119C25.5601 0.151886 25.7511 0.109846 25.9447 0.11Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape40&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.909609375 29.437734375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M65.9 0C71.7067 7.06667 78.81 12.9567 87.21 17.67C88.7967 18.5567 90.8333 20.0733 93.32 22.22C93.5733 22.4333 93.86 22.5733 94.18 22.64C96.0467 23.02 96.6067 23.4333 95.86 23.88L0 23.89C2.52667 22.19 5.28 19.54 8.26 15.94C13.0933 10.0933 17.04 4.79667 20.1 0.05Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape41&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.6264334548969 30.8390367406574)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M175.558 0.450733C176.245 0.450733 176.568 0.567399 176.528 0.800733C176.494 1.0303 176.388 1.24303 176.226 1.40826C176.065 1.5735 175.855 1.68291 175.628 1.72073C171.935 2.3474 168.581 2.65073 165.568 2.63073C163.998 2.62073 162.798 3.35073 161.188 3.18073C160.808 3.14073 160.445 3.20407 160.098 3.37073L158.488 4.16073C158.195 4.30073 157.958 4.50407 157.778 4.77073C157.045 5.85073 156.111 6.47073 154.978 6.63073C153.258 6.87073 151.491 6.99073 149.678 6.99073C111.858 6.8974 73.5681 6.84073 34.8081 6.82073C28.6781 6.82073 24.4281 9.63073 23.3181 15.9507L0.628115 15.8107C0.50059 15.8104 0.376138 15.7713 0.2713 15.6987C0.166463 15.626 0.0861025 15.5233 0.0409006 15.404C-0.00430136 15.2848 -0.0122487 15.1546 0.0181151 15.0307C2.16812 6.40073 10.0881 -0.0792673 19.0981 0.00073271C53.2181 0.314066 87.8014 0.380733 122.848 0.200733C140.421 0.114066 157.991 0.197399 175.558 0.450733Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape42&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.4462109375 30.8548828125)&quot; fill=&quot;rgb(191,113,56)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M152.24 0L253.08 0.15C253.047 2.17 252.56 3.72667 251.62 4.82C250.867 5.69333 249.93 6.13667 248.81 6.15C221.383 6.39 194.363 6.58667 167.75 6.74C167.283 6.74 167.03 6.97333 166.99 7.44C166.87 8.95333 167.113 10.3433 167.72 11.61C167.847 11.8833 167.89 12.1667 167.85 12.46L167.63 14.18C167.577 14.5867 167.74 14.86 168.12 15C168.573 15.1667 168.867 15.3533 169 15.56L0 15.5C1.11 9.18 5.36 6.37 11.49 6.37C50.25 6.39 88.54 6.44667 126.36 6.54C128.173 6.54 129.94 6.42 131.66 6.18C132.793 6.02 133.727 5.4 134.46 4.32C134.64 4.05333 134.877 3.85 135.17 3.71L136.78 2.92C137.127 2.75333 137.49 2.69 137.87 2.73C139.48 2.9 140.68 2.17 142.25 2.18C145.263 2.2 148.617 1.89667 152.31 1.27C152.537 1.23218 152.746 1.12277 152.908 0.957532C153.07 0.792295 153.175 0.579568 153.21 0.35C153.25 0.116667 152.927 -1.13687e-13 152.24 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape43&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 19.3159081135321 30.86015625)&quot; fill=&quot;rgb(178,96,51)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M86.1197 0C93.6331 3.14 98.2231 7.99667 99.8897 14.57C99.9181 14.684 99.9111 14.804 99.8698 14.914C99.8285 15.024 99.7547 15.1189 99.6583 15.186C99.5618 15.2532 99.4472 15.2894 99.3297 15.29L2.03972 15.41C1.90639 15.2033 1.61306 15.0167 1.15972 14.85C0.779725 14.71 0.616391 14.4367 0.669725 14.03L0.889725 12.31C0.929725 12.0167 0.886391 11.7333 0.759725 11.46C0.153058 10.1933 -0.0902752 8.80333 0.0297248 7.29C0.0697248 6.82333 0.323058 6.59 0.789725 6.59C27.4031 6.43667 54.4231 6.24 81.8497 6C82.9697 5.98667 83.9064 5.54333 84.6597 4.67C85.5997 3.57667 86.0864 2.02 86.1197 0Z&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt;&lt;div class=&quot;w-16 h-16&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;fill-[${rgbColor} w-16 h-16&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 36 36&quot;&gt; &lt;defs&gt;&lt;/defs&gt; &lt;path id=&quot;shape0&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 10.393984646722 3.24851063866497)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M384.119 800.308C389.392 800.401 395.079 800.381 401.179 800.248C405.299 800.161 408.469 800.568 410.689 801.468C415.949 803.598 420.779 810.198 420.289 816.268C419.669 823.858 412.349 829.318 404.999 829.328C277.499 829.355 146.952 829.355 13.3589 829.328C8.63888 829.328 4.09888 825.978 1.87888 822.058C-2.73112 813.888 1.52888 803.918 10.4389 801.028C11.9855 800.528 13.9555 800.285 16.3489 800.298C22.1289 800.338 27.6889 800.265 33.0289 800.078C33.1769 800.076 33.3188 800.017 33.4263 799.913C33.5337 799.809 33.5989 799.668 33.6089 799.518C33.7489 797.391 34.0889 795.351 34.6289 793.398C38.5755 779.138 46.7822 768.285 59.2489 760.838C67.2389 756.068 77.9989 753.418 87.8689 753.798C91.7089 753.938 95.6189 754.578 99.3589 753.338C121.612 745.945 138.126 732.518 148.899 713.058C160.649 691.848 162.149 664.098 156.689 640.298C150.949 615.338 135.539 594.358 113.659 581.418C104.759 576.151 97.1322 571.378 90.7789 567.098C79.8722 559.751 69.4389 550.391 59.4789 539.018C41.7922 518.825 28.7222 496.301 20.2689 471.448C13.2089 450.695 9.41555 429.945 8.88888 409.198C8.39555 389.938 9.51888 370.588 12.2589 351.148C15.7689 326.188 18.7489 301.968 22.2689 277.258C23.1955 270.798 23.9055 264.308 24.3989 257.788C25.2922 245.915 26.1489 234.441 26.9689 223.368C28.2189 206.548 28.2189 189.968 28.2289 172.948C28.229 172.665 28.1641 172.386 28.0392 172.133C27.9143 171.88 27.7328 171.659 27.5089 171.488C4.71888 154.278 -3.35112 123.728 10.2489 97.8679C21.8189 75.8479 44.3589 62.0579 69.5789 63.3579C72.9922 63.5379 76.3389 64.1179 79.6189 65.0979C79.7826 65.1468 79.9567 65.1513 80.1235 65.1109C80.2903 65.0705 80.4439 64.9867 80.5689 64.8679C95.3422 50.8279 113.322 44.9613 134.509 47.2679C134.656 47.2852 134.804 47.2536 134.932 47.1778C135.061 47.102 135.161 46.9862 135.219 46.8479C136.972 42.6213 139.372 38.5079 142.419 34.5079C153.299 20.2379 166.749 9.32792 184.089 3.97792C204.569 -2.34875 224.312 -1.12875 243.319 7.63792C258.599 14.6779 272.559 26.6579 280.469 41.6579C280.596 41.9046 280.792 41.9846 281.059 41.8979C289.839 38.9646 299.389 37.9446 309.709 38.8379C326.729 40.3079 342.309 50.4379 353.989 63.2879C354.516 63.8679 355.166 64.1746 355.939 64.2079C361.419 64.4546 366.656 65.5513 371.649 67.4979C392.199 75.5079 406.519 91.1379 411.669 112.968C413.189 119.421 413.456 125.841 412.469 132.228C409.882 148.975 401.956 162.205 388.689 171.918C387.729 172.628 387.729 173.468 387.719 174.528C387.586 191.895 387.899 207.108 388.659 220.168C389.549 235.238 390.999 253.908 393.189 270.758C396.622 297.205 400.169 324.231 403.829 351.838C404.689 358.351 405.536 366.615 406.369 376.628C407.042 384.655 407.406 391.321 407.459 396.628C407.679 420.268 404.476 443.035 397.849 464.928C386.419 502.718 363.929 536.538 333.029 561.268C324.009 568.498 312.959 575.088 302.869 581.488C297.502 584.888 292.979 588.131 289.299 591.218C265.139 611.508 255.039 640.758 256.429 672.398C258.039 709.018 277.959 738.488 312.639 751.718C317.389 753.528 321.449 754.508 326.659 754.038C338.269 753.008 349.089 755.608 359.129 762.058C371.639 770.088 381.589 784.038 383.299 799.558C383.352 800.045 383.626 800.295 384.119 800.308ZM34.9389 123.938C34.6255 130.038 36.5689 135.461 40.7689 140.208C42.9155 142.635 45.5089 143.855 48.5489 143.868C57.4489 143.895 67.6722 143.898 79.2189 143.878C80.8589 143.878 81.9889 142.308 82.5389 140.958C82.6855 140.585 82.6522 140.231 82.4389 139.898C80.5522 136.978 80.8189 134.321 83.2389 131.928C87.7189 127.508 91.8289 130.808 94.8789 134.678C97.7389 138.308 103.749 143.708 108.819 143.768C117.746 143.855 126.882 143.871 136.229 143.818C142.909 143.768 150.429 136.098 154.769 131.618C156.269 130.068 158.029 129.188 160.259 129.608C164.159 130.328 166.106 132.778 166.099 136.958C166.099 138.248 165.299 139.248 164.549 140.218C164.261 140.59 164.13 141.06 164.184 141.527C164.239 141.994 164.474 142.422 164.839 142.718C166.006 143.678 167.326 144.148 168.799 144.128C196.979 143.828 224.629 143.751 251.749 143.898C253.509 143.905 255.106 143.581 256.539 142.928C256.721 142.847 256.872 142.708 256.969 142.533C257.065 142.358 257.101 142.155 257.073 141.955C257.044 141.756 256.951 141.571 256.809 141.428C253.879 138.498 254.059 132.908 257.859 130.608C262.999 127.498 266.539 130.248 269.939 133.818C274.619 138.718 280.959 143.828 287.779 143.838C296.859 143.865 305.789 143.868 314.569 143.848C321.399 143.828 328.259 136.098 332.759 131.638C335.086 129.338 337.459 128.821 339.879 130.088C343.819 132.161 344.612 135.195 342.259 139.188C342.08 139.495 341.983 139.844 341.98 140.198C341.976 140.552 342.066 140.901 342.239 141.208C343.319 143.118 344.959 144.088 347.179 144.068C354.066 144.001 361.086 143.928 368.239 143.848C370.352 143.821 372.149 143.235 373.629 142.088C379.589 137.488 382.416 131.278 382.109 123.458C381.969 109.928 371.589 99.2079 359.169 95.4779C358.953 95.4151 358.724 95.4137 358.51 95.4738C358.296 95.534 358.105 95.6534 357.959 95.8179C355.212 98.9446 351.706 100.435 347.439 100.288C341.069 100.068 338.009 96.4579 335.789 91.1479C332.202 82.5946 326.232 76.3279 317.879 72.3479C307.626 67.4546 296.802 67.5779 285.409 72.7179C282.069 74.2179 279.519 77.4279 276.309 79.4679C269.159 84.0279 261.339 79.8879 260.179 71.8979C258.606 61.0979 253.279 51.6813 244.199 43.6479C217.109 19.6679 175.399 28.6579 160.839 61.6279C158.766 66.3279 157.699 70.8946 157.639 75.3279C157.559 80.8679 155.339 86.2279 149.929 88.1679C144.262 90.2146 139.372 89.0513 135.259 84.6779C133.749 83.0679 132.859 81.0279 131.499 79.3379C131.286 79.0646 131.012 78.8779 130.679 78.7779C128.472 78.1113 126.346 77.8213 124.299 77.9079C113.326 78.3813 104.429 83.1579 97.6089 92.2379C94.2189 96.7479 94.0089 102.468 90.0089 106.458C86.8589 109.588 81.6689 110.618 77.7089 108.488C73.0155 105.968 70.9422 101.938 71.4889 96.3979C71.5755 95.5313 71.1922 95.0446 70.3389 94.9379C59.7789 93.5446 50.8422 96.5046 43.5289 103.818C38.0555 109.291 35.1922 115.998 34.9389 123.938ZM70.3189 172.868L60.5489 172.868C60.0022 172.868 59.7255 173.141 59.7189 173.688C59.4855 194.395 58.5655 214.878 56.9589 235.138C56.6655 238.818 56.5355 242.431 56.5689 245.978C56.5689 246.378 56.7689 246.578 57.1689 246.578L287.389 246.598L306.739 246.558L315.789 246.558C316.622 246.558 317.009 246.145 316.949 245.318C315.196 221.491 313.862 197.675 312.949 173.868C312.939 173.596 312.822 173.339 312.625 173.151C312.427 172.963 312.163 172.858 311.889 172.858L302.559 172.868L102.799 172.818L85.9489 172.788ZM345.659 172.918L336.369 172.938C335.276 172.938 334.742 173.485 334.769 174.578C335.302 197.585 336.822 220.561 339.329 243.508C339.429 244.421 339.629 245.291 339.929 246.118C339.981 246.258 340.075 246.379 340.199 246.463C340.322 246.547 340.469 246.591 340.619 246.588L349.349 246.478L358.959 246.388C359.056 246.388 359.152 246.362 359.234 246.311C359.317 246.259 359.384 246.186 359.427 246.099C359.47 246.012 359.488 245.915 359.479 245.818C358.169 231.648 357.729 217.678 356.929 203.398C356.396 193.905 356.209 183.971 356.369 173.598C356.371 173.466 356.337 173.335 356.273 173.221C356.208 173.106 356.114 173.011 356.001 172.945C355.888 172.88 355.759 172.846 355.629 172.848ZM285.139 272.498L66.0789 272.778L56.5789 272.838C56.2688 272.842 55.9676 272.941 55.7169 273.122C55.4662 273.302 55.2782 273.556 55.1789 273.848C53.5922 278.475 52.3889 283.555 51.5689 289.088C50.7689 294.528 50.0622 299.925 49.4489 305.278C45.8889 336.418 40.7589 367.688 40.1089 398.048C39.6822 418.115 42.5555 438.068 48.7289 457.908C57.0789 484.768 71.6889 508.708 92.4189 527.918C99.6455 535.011 106.386 540.555 112.639 544.548C120.992 549.888 128.172 554.048 134.179 557.028C152.646 566.188 172.619 571.811 194.099 573.898C204.712 574.931 216.622 574.575 229.829 572.828C240.356 571.415 249.986 569.291 258.719 566.458C291.679 555.758 320.169 534.368 341.689 507.238C357.689 487.038 368.109 461.898 373.119 436.298C376.719 417.938 377.099 398.938 375.549 380.068C373.189 351.368 369.499 324.108 365.409 293.848C364.422 286.581 363.209 279.731 361.769 273.298C361.729 273.128 361.634 272.976 361.499 272.867C361.365 272.758 361.199 272.699 361.029 272.698ZM175.049 601.798L173.779 601.438C173.706 601.418 173.627 601.42 173.555 601.444C173.482 601.467 173.419 601.512 173.372 601.571C173.326 601.631 173.299 601.702 173.295 601.776C173.29 601.851 173.309 601.925 173.349 601.988C181.216 615.461 186.096 629.798 187.989 644.998C191.409 672.498 189.379 702.208 176.579 727.128C176.519 727.245 176.501 727.378 176.529 727.506C176.556 727.635 176.626 727.75 176.728 727.832C176.831 727.914 176.958 727.959 177.089 727.958L184.889 727.958L212.439 727.998L239.709 727.978C239.797 727.978 239.883 727.947 239.952 727.892C240.021 727.837 240.069 727.76 240.088 727.674C240.108 727.588 240.097 727.497 240.059 727.418C237.179 721.278 233.859 715.348 231.849 708.858C226.049 690.188 225.419 668.538 227.059 648.518C228.539 630.531 233.812 615.041 242.879 602.048C243.406 601.301 243.229 601.051 242.349 601.298C237.362 602.725 232.109 603.628 226.589 604.008C209.329 605.188 192.149 604.451 175.049 601.798ZM222.789 744.938L176.989 744.988L164.659 745.098C164.465 745.098 164.274 745.14 164.1 745.221C163.925 745.302 163.771 745.421 163.649 745.568C156.089 754.508 148.589 762.038 139.249 767.968C138.469 768.461 138.542 768.711 139.469 768.718L156.889 768.828L252.749 768.818C260.109 768.858 267.559 768.855 275.099 768.808C276.206 768.801 277.269 768.665 278.289 768.398C278.709 768.285 278.732 768.118 278.359 767.898C268.546 762.031 260.359 754.481 253.799 745.248C253.572 744.935 253.266 744.781 252.879 744.788ZM86.8189 800.748L255.819 800.808L353.109 800.688C353.226 800.687 353.341 800.651 353.437 800.584C353.534 800.517 353.608 800.422 353.649 800.312C353.69 800.202 353.697 800.082 353.669 799.968C352.002 793.395 347.412 788.538 339.899 785.398L239.059 785.248C221.492 784.995 203.922 784.911 186.349 784.998C151.302 785.178 116.719 785.111 82.5989 784.798C73.5889 784.718 65.6689 791.198 63.5189 799.828C63.4885 799.952 63.4965 800.082 63.5417 800.201C63.5869 800.32 63.6672 800.423 63.7721 800.496C63.8769 800.568 64.0014 800.608 64.1289 800.608Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape1&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6223046875 4.3066710451255)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.17 93.3591L341.7 94.8091C341.347 94.9025 341.043 95.0758 340.79 95.3291C334.81 101.209 327.56 101.079 319.06 100.739C316.15 100.619 313.98 99.6891 312.72 96.9491C310.21 91.4791 305.03 84.9891 298.07 88.5091C296.217 89.4491 294.677 90.6225 293.45 92.0291C288.01 98.2791 282.29 103.559 274.1 105.299C270.267 106.112 266.1 106.416 261.6 106.209C253.04 105.819 244.67 101.199 239.15 94.8491C232.37 87.0391 226.88 84.2491 219.24 92.9691C214.89 97.9391 209.89 101.049 202.97 101.219C196.37 101.379 189.917 101.426 183.61 101.359C182.93 101.352 182.43 100.989 182.11 100.269C182.01 100.04 181.975 99.7876 182.008 99.5391C182.042 99.2906 182.143 99.0554 182.3 98.8591C183.04 97.9325 183.813 97.0725 184.62 96.2791C187.09 93.8491 185.64 89.9291 183.51 87.8291C180.65 85.0091 175.91 85.9891 173.39 88.9391C172.23 90.2925 171.17 91.6391 170.21 92.9791C163.5 102.299 152.67 101.929 142.47 100.679C134.9 99.7591 131.64 94.3891 126.62 89.6591C123.633 86.8525 120.593 86.8391 117.5 89.6191C112.63 93.9791 108.24 99.7591 102.47 102.719C88.07 110.129 72.61 106.679 62.57 94.0391C58.62 89.0591 52.95 85.2191 47.21 90.7591C44.54 93.3491 43.94 96.9991 40.53 99.0891C36.59 101.509 29.55 101.139 24.26 101.029C18.64 100.899 13.25 100.999 9.85 97.1991C7.82 94.9191 4 93.8291 2.11 96.9691C1.02333 98.7691 0.446667 98.6225 0.38 96.5291C0.366667 95.9891 0.24 95.0925 0 93.8391C0.253333 85.8991 3.11667 79.1925 8.59 73.7191C15.9033 66.4058 24.84 63.4458 35.4 64.8391C36.2533 64.9458 36.6367 65.4325 36.55 66.2991C36.0033 71.8391 38.0767 75.8691 42.77 78.3891C46.73 80.5191 51.92 79.4891 55.07 76.3591C59.07 72.3691 59.28 66.6491 62.67 62.1391C69.49 53.0591 78.3867 48.2825 89.36 47.8091C91.4067 47.7225 93.5333 48.0125 95.74 48.6791C96.0733 48.7791 96.3467 48.9658 96.56 49.2391C97.92 50.9291 98.81 52.9691 100.32 54.5791C104.433 58.9525 109.323 60.1158 114.99 58.0691C120.4 56.1291 122.62 50.7691 122.7 45.2291C122.76 40.7958 123.827 36.2291 125.9 31.5291C140.46 -1.44087 182.17 -10.4309 209.26 13.5491C218.34 21.5825 223.667 30.9991 225.24 41.7991C226.4 49.7891 234.22 53.9291 241.37 49.3691C244.58 47.3291 247.13 44.1191 250.47 42.6191C261.863 37.4791 272.687 37.3558 282.94 42.2491C291.293 46.2291 297.263 52.4958 300.85 61.0491C303.07 66.3591 306.13 69.9691 312.5 70.1891C316.767 70.3358 320.273 68.8458 323.02 65.7191C323.166 65.5546 323.357 65.4352 323.571 65.3751C323.785 65.3149 324.014 65.3163 324.23 65.3791C336.65 69.1091 347.03 79.8291 347.17 93.3591Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape2&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6211575655465 7.33540715628013)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.203 7.20842C347.509 15.0284 344.683 21.2384 338.723 25.8384C337.243 26.9851 335.446 27.5718 333.333 27.5984C326.179 27.6784 319.159 27.7518 312.273 27.8184C310.053 27.8384 308.413 26.8684 307.333 24.9584C307.159 24.651 307.07 24.3028 307.074 23.9484C307.077 23.594 307.173 23.2458 307.353 22.9384C309.706 18.9451 308.913 15.9118 304.973 13.8384C302.553 12.5718 300.179 13.0884 297.853 15.3884C293.353 19.8484 286.493 27.5784 279.663 27.5984C270.883 27.6184 261.953 27.6151 252.873 27.5884C246.053 27.5784 239.713 22.4684 235.033 17.5684C231.633 13.9984 228.093 11.2484 222.953 14.3584C219.153 16.6584 218.973 22.2484 221.903 25.1784C222.045 25.3214 222.137 25.5067 222.166 25.706C222.195 25.9053 222.159 26.108 222.062 26.2834C221.966 26.4588 221.815 26.5975 221.633 26.6784C220.199 27.3318 218.603 27.6551 216.843 27.6484C189.723 27.5018 162.073 27.5784 133.893 27.8784C132.419 27.8984 131.099 27.4284 129.933 26.4684C129.567 26.1723 129.332 25.7446 129.278 25.2775C129.224 24.8105 129.355 24.3403 129.643 23.9684C130.393 22.9984 131.193 21.9984 131.193 20.7084C131.199 16.5284 129.253 14.0784 125.353 13.3584C123.123 12.9384 121.363 13.8184 119.863 15.3684C115.523 19.8484 108.003 27.5184 101.323 27.5684C91.976 27.6218 82.8393 27.6051 73.9126 27.5184C68.8426 27.4584 62.8326 22.0584 59.9726 18.4284C56.9226 14.5584 52.8126 11.2584 48.3326 15.6784C45.9126 18.0718 45.646 20.7284 47.5326 23.6484C47.746 23.9818 47.7793 24.3351 47.6326 24.7084C47.0826 26.0584 45.9526 27.6284 44.3126 27.6284C32.766 27.6484 22.5426 27.6451 13.6426 27.6184C10.6026 27.6051 8.0093 26.3851 5.86263 23.9584C1.66263 19.2118 -0.280704 13.7884 0.0326292 7.68842C0.272629 8.94175 0.399296 9.83842 0.412629 10.3784C0.479296 12.4718 1.05596 12.6184 2.14263 10.8184C4.03263 7.67842 7.85263 8.76842 9.88263 11.0484C13.2826 14.8484 18.6726 14.7484 24.2926 14.8784C29.5826 14.9884 36.6226 15.3584 40.5626 12.9384C43.9726 10.8484 44.5726 7.19842 47.2426 4.60842C52.9826 -0.931581 58.6526 2.90842 62.6026 7.88842C72.6426 20.5284 88.1026 23.9784 102.503 16.5684C108.273 13.6084 112.663 7.82842 117.533 3.46842C120.626 0.688419 123.666 0.701752 126.653 3.50842C131.673 8.23842 134.933 13.6084 142.503 14.5284C152.703 15.7784 163.533 16.1484 170.243 6.82842C171.203 5.48842 172.263 4.14175 173.423 2.78842C175.943 -0.161581 180.683 -1.14158 183.543 1.67842C185.673 3.77842 187.123 7.69842 184.653 10.1284C183.846 10.9218 183.073 11.7818 182.333 12.7084C182.175 12.9047 182.074 13.1399 182.041 13.3884C182.007 13.6369 182.043 13.8894 182.143 14.1184C182.463 14.8384 182.963 15.2018 183.643 15.2084C189.949 15.2751 196.403 15.2284 203.003 15.0684C209.923 14.8984 214.923 11.7884 219.273 6.81842C226.913 -1.90158 232.403 0.888419 239.183 8.69842C244.703 15.0484 253.073 19.6684 261.633 20.0584C266.133 20.2651 270.299 19.9618 274.133 19.1484C282.323 17.4084 288.043 12.1284 293.483 5.87842C294.709 4.47175 296.249 3.29842 298.103 2.35842C305.063 -1.16158 310.243 5.32842 312.753 10.7984C314.013 13.5384 316.183 14.4684 319.093 14.5884C327.593 14.9284 334.843 15.0584 340.823 9.17842C341.076 8.92509 341.379 8.75175 341.733 8.65842Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape3&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.7941352600339 9.3230859375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M17.6779 0C16.5513 11.84 15.9213 19.36 15.7879 22.56C15.3079 33.9733 14.6346 46.28 13.7679 59.48C13.6013 62.04 13.1046 63.7467 12.2779 64.6C8.55793 68.45 -0.30207 67.53 0.00793038 61.06C1.34793 33.3133 2.02793 12.9867 2.04793 0.08Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape4&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9413128810975 9.32414062500001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M201.657 0.05C201.63 7.10333 201.687 11.5967 201.827 13.53C203.28 33.53 204.617 53.6 205.837 73.74L186.487 73.78L193.557 73.61C193.714 73.6076 193.867 73.5609 193.998 73.4752C194.129 73.3896 194.234 73.2685 194.299 73.126C194.364 72.9835 194.388 72.8254 194.367 72.67C193.367 64.75 192.894 56.7733 192.947 48.74C196.9 43.82 196.69 38.93 192.317 34.07C191.537 32.47 191.137 31.2867 191.117 30.52C190.984 25.7933 191.01 21.2667 191.197 16.94C191.213 16.5684 191.128 16.1993 190.951 15.872C190.773 15.5446 190.51 15.2711 190.189 15.0807C189.868 14.8902 189.501 14.7897 189.127 14.79L153.317 14.9C152.777 12.9667 151.747 11.28 150.227 9.84C148.927 8.60667 147.257 7.7 145.217 7.12C138.364 5.17333 133.557 7.71667 130.797 14.75C116.39 14.8967 101.944 14.9467 87.4571 14.9C61.1271 14.81 34.7871 15.13 8.5371 15.06C6.00377 15.0533 4.15377 14.7633 2.9871 14.19C0.773767 13.11 -0.209566 11.2233 0.0371003 8.53C0.150434 7.29667 0.770434 4.45333 1.8971 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape5&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.5460546875 9.32519283839548)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M3.69 73.6301L0 0.0700704L9.97 7.03745e-05C10.1004 -0.00175254 10.2289 0.031869 10.3421 0.0974247C10.4553 0.16298 10.5492 0.258107 10.6139 0.372872C10.6786 0.487637 10.7118 0.617903 10.71 0.75007C10.55 11.1234 10.7367 21.0567 11.27 30.5501C12.07 44.8301 12.51 58.8001 13.82 72.9701C13.8293 73.0668 13.8114 73.1643 13.7681 73.2514C13.7249 73.3384 13.6581 73.4116 13.5754 73.4627C13.4926 73.5137 13.3972 73.5405 13.3 73.5401Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape6&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.3825550063776 9.3230859375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M13.7551 0.08C13.7351 12.9867 13.0551 33.3133 11.7151 61.06C11.4051 67.53 20.2651 68.45 23.9851 64.6C24.8118 63.7467 25.3084 62.04 25.4751 59.48C26.3418 46.28 27.0151 33.9733 27.4951 22.56C27.6284 19.36 28.2584 11.84 29.3851 0L46.2351 0.03C45.1084 4.48333 44.4884 7.32667 44.3751 8.56C44.1284 11.2533 45.1118 13.14 47.3251 14.22C48.4918 14.7933 50.3418 15.0833 52.8751 15.09C79.1251 15.16 105.465 14.84 131.795 14.93C146.282 14.9767 160.728 14.9267 175.135 14.78C174.568 20.8133 176.498 24.9267 180.925 27.12C183.338 28.3133 185.805 28.72 188.325 28.34C194.755 27.36 198.095 21.26 197.655 14.93L233.465 14.82C233.839 14.8197 234.206 14.9202 234.527 15.1107C234.848 15.3011 235.111 15.5746 235.289 15.902C235.466 16.2293 235.551 16.5984 235.535 16.97C235.348 21.2967 235.322 25.8233 235.455 30.55C235.475 31.3167 235.875 32.5 236.655 34.1C232.788 31.5133 229.168 30.99 225.795 32.53C211.935 38.83 224.195 59.55 237.285 48.77C237.232 56.8033 237.705 64.78 238.705 72.7C238.726 72.8554 238.702 73.0135 238.637 73.156C238.572 73.2985 238.467 73.4196 238.336 73.5052C238.205 73.5909 238.052 73.6376 237.895 73.64L230.825 73.81L0.605102 73.79C0.205102 73.79 0.00510204 73.59 0.00510204 73.19C-0.0282313 69.6433 0.101769 66.03 0.395102 62.35C2.00177 42.09 2.92177 21.6067 3.1551 0.9C3.16177 0.353333 3.43844 0.08 3.9851 0.08ZM127.005 36.5C127.005 34.413 126.456 32.3624 125.412 30.555C124.369 28.7476 122.867 27.2464 121.06 26.203C119.253 25.1595 117.202 24.61 115.115 24.61C111.963 24.61 108.937 25.8635 106.708 28.0925C104.479 30.3215 103.225 33.3478 103.225 36.5C103.225 39.6522 104.479 42.6785 106.708 44.9075C108.937 47.1365 111.963 48.39 115.115 48.39C117.202 48.39 119.253 47.8405 121.06 46.797C122.867 45.7536 124.369 44.2524 125.412 42.445C126.456 40.6376 127.005 38.587 127.005 36.5ZM75.9704 37.4184C76.0574 34.3019 74.8637 31.2741 72.6541 29.007C70.4445 26.7398 67.3954 25.4143 64.1835 25.3246C62.057 25.2652 59.9523 25.7501 58.0818 26.7303C56.2114 27.7105 54.6403 29.152 53.5271 30.9092C52.414 32.6664 51.7974 34.6782 51.7398 36.7416C51.6528 39.8581 52.8465 42.8859 55.0561 45.153C57.2657 47.4202 60.3148 48.7457 63.5267 48.8354C65.6532 48.8948 67.7579 48.4099 69.6284 47.4297C71.4988 46.4495 73.0699 45.008 74.1831 43.2508C75.2962 41.4936 75.9128 39.4818 75.9704 37.4184ZM183.874 50.7982C183.856 49.4819 183.468 48.1937 182.749 47.0635C182.03 45.9334 181.006 45.0007 179.779 44.3595C178.552 43.7184 177.166 43.3911 175.76 43.4107C173.637 43.4404 171.61 44.2595 170.128 45.6863C168.646 47.1131 167.828 49.0336 167.856 51.0218C167.874 52.3381 168.262 53.6263 168.981 54.7565C169.7 55.8866 170.725 56.8193 171.951 57.4605C173.178 58.1016 174.564 58.4289 175.97 58.4093C178.093 58.3796 180.121 57.5605 181.603 56.1337C183.084 54.7069 183.902 52.7864 183.874 50.7982Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape7&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.0305953125001 9.32554685349047)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.0064 0.0100006L9.3364 6.11826e-07C9.61064 -0.000292647 9.87453 0.104847 10.0721 0.293135C10.2697 0.481423 10.3861 0.738544 10.3964 1.01C11.3097 24.8167 12.6431 48.6333 14.3964 72.46C14.4564 73.2867 14.0697 73.7 13.2364 73.7L4.1864 73.7C2.9664 53.56 1.62973 33.49 0.1764 13.49C0.0364 11.5567 -0.0202667 7.06333 0.0064 0.0100006Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape8&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1631696428572 9.32765624999999)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M10.891 0L14.581 73.56L5.85095 73.67C5.70139 73.6731 5.55452 73.6294 5.43088 73.5452C5.30724 73.461 5.21287 73.3403 5.16095 73.2C4.86095 72.3733 4.66095 71.5033 4.56095 70.59C2.05429 47.6433 0.534286 24.6667 0.000952381 1.66C-0.0257143 0.566667 0.507619 0.02 1.60095 0.02Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape9&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.5362571970961 9.55219950584632)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.6165 8.41299C23.0565 14.743 19.7165 20.843 13.2865 21.823C10.7665 22.203 8.2998 21.7963 5.88646 20.603C1.4598 18.4097 -0.470205 14.2963 0.0964619 8.26299C2.85646 1.22966 7.66313 -1.31367 14.5165 0.632992C16.5565 1.21299 18.2265 2.11966 19.5265 3.35299C21.0465 4.79299 22.0765 6.47966 22.6165 8.41299Z&quot;&gt;&lt;/path&gt; &lt;circle id=&quot;shape10&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.0115625 10.18828125)&quot; r=&quot;11.89&quot; cx=&quot;11.89&quot; cy=&quot;11.89&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape11&quot; transform=&quot;matrix(0.0351425431068875 0.000981620111375468 -0.000981620111375468 0.0351425431068875 14.2130771675543 10.2015061448131)&quot; rx=&quot;12.12&quot; ry=&quot;11.76&quot; cx=&quot;12.12&quot; cy=&quot;11.76&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape12&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 20.1057469902912 10.4364122450525)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M16.9732 2.43205C21.3465 7.29205 21.5565 12.1821 17.6032 17.1021C4.5132 27.8821 -7.7468 7.16205 6.1132 0.862052C9.48653 -0.677948 13.1065 -0.154615 16.9732 2.43205Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape13&quot; transform=&quot;matrix(0.0351528231097021 -0.000490857902548076 0.000490857902548076 0.0351528231097021 18.2800569526222 10.8531762234766)&quot; rx=&quot;8.01&quot; ry=&quot;7.5&quot; cx=&quot;8.01&quot; cy=&quot;7.5&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape14&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.47390625 12.828515625)&quot; fill=&quot;rgb(124,69,45)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0 300.33C1.52 298.69 3.53 298.057 6.03 298.43C6.10297 298.443 6.17377 298.447 6.24 298.44C6.65333 298.413 6.88667 298.26 6.94 297.98C7 297.66 7.19333 297.493 7.52 297.48L10.29 297.39C10.4233 297.383 10.5567 297.367 10.69 297.34C11.0167 297.267 11.1733 297.127 11.16 296.92C11.1467 296.7 11.2467 296.563 11.46 296.51C12.1467 296.337 12.7433 295.997 13.25 295.49C13.49 295.257 13.58 294.973 13.52 294.64C13.1333 292.653 12.8767 290.647 12.75 288.62C12.69 287.79 12.27 287.35 11.7 286.83C11.4533 286.603 11.3933 286.337 11.52 286.03C11.8533 285.197 11.6767 284.573 10.99 284.16C10.7367 284 10.46 283.923 10.16 283.93L6.56 284.02C15.1 281.92 21.0833 280.04 24.51 278.38C27.5033 276.927 30.4033 275.357 33.21 273.67C33.319 273.603 33.3974 273.495 33.4282 273.371C33.4589 273.246 33.4397 273.115 33.3746 273.004C33.3096 272.894 33.2037 272.813 33.08 272.78C32.5067 272.62 31.9433 272.67 31.39 272.93C63.5767 260.003 88.4967 238.95 106.15 209.77C109.223 204.703 112.093 199 114.76 192.66C118.06 184.807 120.343 178.587 121.61 174C123.097 168.613 124.457 162.397 125.69 155.35C126.657 149.857 126.873 144.25 126.34 138.53C127.853 138.57 128.907 138.097 129.5 137.11C131.56 133.67 131.433 130.473 129.12 127.52C128.24 126.39 127.07 126.39 125.77 126.38C120.017 126.347 114.427 126.37 109 126.45C108.613 125.77 108.27 125.09 107.97 124.41C107.69 123.77 107.527 123.037 107.48 122.21C106.953 112.977 106.213 103.723 105.26 94.45C110.127 94.5633 114.617 94.5833 118.73 94.51C121.27 94.47 123.93 94.86 126 93.31C128.053 91.77 128.717 89.61 127.99 86.83C127.23 83.89 124.98 82.2967 121.24 82.05L120.9 72.32C124.973 70.3667 126.23 67.5767 124.67 63.95C123.697 61.6833 121.82 60.52 119.04 60.46C117.273 58.24 116.223 56.5633 115.89 55.43C113.43 47.1033 110.547 38.9133 107.24 30.86C106.947 30.1467 107 29.0333 107.4 27.52C109.087 27.4933 110.883 27.5267 112.79 27.62C115.45 27.7533 117.403 26.9667 118.65 25.26C121.02 22.01 120.02 17.98 116.55 16.23C115.597 15.75 114.193 15.5133 112.34 15.52C107.533 15.54 102.823 15.4767 98.21 15.33C97.6033 13.9433 96.9433 12.6033 96.23 11.31C94.38 7.96 93.99 4.82 92.56 1.46C92.4467 1.18667 92.5067 0.963333 92.74 0.79L93.19 0.46C93.4567 0.273333 93.4267 0.176667 93.1 0.17L55.31 0L131.2 0.2C131.371 0.200762 131.536 0.26037 131.671 0.369176C131.805 0.477981 131.9 0.629779 131.94 0.8C133.38 7.23333 134.593 14.0833 135.58 21.35C139.67 51.61 143.36 78.87 145.72 107.57C147.27 126.44 146.89 145.44 143.29 163.8C138.28 189.4 127.86 214.54 111.86 234.74C90.34 261.87 61.85 283.26 28.89 293.96C20.1567 296.793 10.5267 298.917 0 300.33Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape15&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.2758764491296 12.828515625)&quot; fill=&quot;rgb(178,96,51)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M231.61 0L269.4 0.17C269.726 0.176667 269.756 0.273333 269.49 0.46L269.04 0.79C268.806 0.963333 268.746 1.18667 268.86 1.46C270.29 4.82 270.68 7.96 272.53 11.31C273.243 12.6033 273.903 13.9433 274.51 15.33C268.76 17.07 269.07 27.78 275.82 27.53C278.38 27.43 281.006 27.4267 283.7 27.52C283.3 29.0333 283.246 30.1467 283.54 30.86C286.846 38.9133 289.73 47.1033 292.19 55.43C292.523 56.5633 293.573 58.24 295.34 60.46C290.98 60.76 286.806 61.0267 282.82 61.26C277.7 61.56 274.45 67.2 278.08 71.26C278.86 72.1333 280.413 72.6 282.74 72.66C287.386 72.7733 292.206 72.66 297.2 72.32L297.54 82.05C293.013 81.9567 288.443 81.9633 283.83 82.07C281.84 82.11 280.61 82.75 279.5 84.26C276.44 88.44 277.126 91.8367 281.56 94.45C282.513 103.723 283.253 112.977 283.78 122.21C283.826 123.037 283.99 123.77 284.27 124.41C284.57 125.09 284.913 125.77 285.3 126.45C282.193 127.497 280.633 129.463 280.62 132.35C280.613 134.79 281.763 136.753 284.07 138.24C281.93 156.593 277.493 173.123 270.76 187.83C261.606 207.817 247.22 225.063 227.6 239.57C218.546 246.263 208.406 252.023 197.18 256.85C191.52 259.28 187.21 264.45 191.61 270.42C195.03 275.03 202.58 274.56 207.69 272.93C208.243 272.67 208.806 272.62 209.38 272.78C209.503 272.813 209.609 272.894 209.674 273.004C209.739 273.115 209.758 273.246 209.728 273.371C209.697 273.495 209.619 273.603 209.51 273.67C206.703 275.357 203.803 276.927 200.81 278.38C197.383 280.04 191.4 281.92 182.86 284.02C165.386 287.427 148.786 288.113 133.06 286.08C116.433 283.94 99.2895 279.17 81.6295 271.77C75.1162 269.043 68.6828 266.14 62.3295 263.06C54.3762 259.2 46.8962 254.463 39.8895 248.85C40.5695 248.377 41.3595 247.947 42.2595 247.56C44.5695 246.55 46.3695 244.3 44.1695 241.99C29.1962 226.303 18.1928 209.247 11.1595 190.82C1.95285 166.687 -1.55715 141.62 0.629514 115.62C2.01618 99.0867 3.45618 82.5733 4.94951 66.08C5.49618 59.9533 6.20618 53.32 7.07951 46.18C8.95285 30.8733 10.7762 15.5733 12.5495 0.28ZM230.747 11.7302C228.758 9.7412 226.058 8.62261 223.245 8.62261C220.432 8.62261 217.731 9.7412 215.742 11.7302L213.89 13.5829C211.901 15.5719 210.782 18.2724 210.782 21.0853C210.782 23.8982 211.901 26.5987 213.89 28.5877L215.092 29.7898C217.081 31.7788 219.781 32.8974 222.594 32.8974C225.407 32.8974 228.108 31.7788 230.097 29.7898L231.949 27.9371C233.938 25.9481 235.057 23.2476 235.057 20.4347C235.057 17.6218 233.938 14.9213 231.949 12.9323ZM47.1595 186.78C39.7128 170.84 35.7195 154.833 35.1795 138.76C34.9528 131.94 35.0895 124.72 35.5895 117.1C37.1495 93.44 39.2662 67.4833 41.9395 39.23C42.3395 35.0167 42.6262 30.7267 42.7995 26.36C43.4195 10.9 25.2095 12.45 24.4195 25.69C23.0462 48.79 21.1195 72.2233 18.6395 95.99C17.6595 105.337 16.9995 114.63 16.6595 123.87C16.3328 132.65 16.6595 140.653 17.6395 147.88C19.5062 161.707 22.9728 175.147 28.0395 188.2C29.1795 191.153 30.6662 194.07 32.4995 196.95C35.2995 201.37 41.5395 202.72 45.3395 198.89C48.7328 195.483 49.3395 191.447 47.1595 186.78ZM87.1943 37.8021C86.8236 36.4743 85.902 35.3574 84.6342 34.6994C83.3663 34.0413 81.8534 33.8945 80.4311 34.2916C79.0088 34.6887 77.7908 35.598 77.0472 36.8177C76.3037 38.0374 76.094 39.4701 76.4647 40.7979C76.8355 42.1257 77.757 43.2426 79.0249 43.9006C80.2927 44.5587 81.8056 44.7055 83.2279 44.3084C84.6502 43.9113 85.8682 43.002 86.6118 41.7823C87.3554 40.5626 87.565 39.1299 87.1943 37.8021ZM242.9 63.3691C242.905 60.5116 242.14 57.7024 240.682 55.2252C239.224 52.7479 237.124 50.6888 234.594 49.2556C232.064 47.8225 229.192 47.0651 226.268 47.06C223.344 47.0549 220.469 47.8022 217.934 49.2266C215.399 50.6509 213.292 52.7027 211.826 55.1748C210.359 57.6469 209.585 60.4534 209.58 63.3109C209.575 66.1684 210.34 68.9776 211.797 71.4548C213.255 73.9321 215.355 75.9912 217.885 77.4244C220.415 78.8575 223.287 79.6149 226.211 79.62C229.135 79.6251 232.01 78.8778 234.545 77.4534C237.08 76.0291 239.187 73.9773 240.653 71.5052C242.12 69.0331 242.895 66.2266 242.9 63.3691ZM85.9041 71.8823C88.1531 72.912 90.7367 72.9736 93.0816 72.0534C95.4266 71.1333 97.3455 69.3049 98.4127 66.9739C99.1193 65.4306 99.4215 63.7348 99.2889 62.0574C99.1563 60.38 98.5935 58.7796 97.6572 57.4176C96.721 56.0556 95.4439 54.9794 93.9549 54.2977C91.7059 53.268 89.1223 53.2064 86.7774 54.1266C84.4325 55.0467 82.5135 56.8751 81.4463 59.2061C80.7398 60.7494 80.4375 62.4452 80.5701 64.1226C80.7028 65.8 81.2656 67.4004 82.2018 68.7624C83.1381 70.1244 84.4151 71.2006 85.9041 71.8823ZM60.6086 105.171C63.2448 106.638 66.3725 106.974 69.2978 106.105C72.223 105.236 74.7122 103.231 76.213 100.535C77.7138 97.8381 78.1063 94.6659 77.3035 91.7217C76.5007 88.7775 74.5666 86.2966 71.9304 84.8293C69.2942 83.362 66.1665 83.0257 63.2413 83.8948C60.316 84.7639 57.8268 86.7691 56.326 89.4655C54.8252 92.1619 54.4327 95.3341 55.2355 98.2783C56.0384 101.222 57.9724 103.703 60.6086 105.171ZM187.08 98.11C187.08 96.1959 186.318 94.3582 184.965 93.0047C183.611 91.6512 181.774 90.89 179.86 90.89C177.945 90.89 176.108 91.6512 174.754 93.0047C173.401 94.3582 172.64 96.1959 172.64 98.11C172.64 100.024 173.401 101.862 174.754 103.215C176.108 104.569 177.945 105.33 179.86 105.33C181.127 105.33 182.372 104.996 183.47 104.363C184.567 103.729 185.479 102.817 186.112 101.72C186.746 100.623 187.08 99.3773 187.08 98.11ZM234.564 99.0027C233.705 97.863 232.551 96.9774 231.217 96.4351C229.883 95.8929 228.416 95.7129 226.964 95.9133C225.513 96.1138 224.127 96.6877 222.947 97.5771C221.766 98.4665 220.833 99.6405 220.24 100.981C219.647 102.321 219.416 103.78 219.57 105.212C219.723 106.644 220.256 107.998 221.115 109.137C221.974 110.277 223.128 111.163 224.462 111.705C225.796 112.247 227.263 112.427 228.715 112.227C230.166 112.026 231.552 111.452 232.732 110.563C233.913 109.673 234.846 108.499 235.439 107.159C236.032 105.819 236.263 104.36 236.109 102.928C235.956 101.496 235.423 100.142 234.564 99.0027ZM47.9695 214.56C45.1695 220.83 50.0195 225.32 54.0495 229.45C57.6895 233.19 61.8995 236.09 66.6995 232.86C71.8895 229.38 72.0595 223.24 67.9795 218.66C64.2095 214.41 60.6395 209.6 54.3295 209.99C51.4095 210.17 49.1195 211.99 47.9695 214.56Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape16&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.8026079545455 12.838359375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M26.0114 0C24.238 15.2933 22.4147 30.5933 20.5414 45.9C19.668 53.04 18.958 59.6733 18.4114 65.8C16.918 82.2933 15.478 98.8067 14.0914 115.34C11.9047 141.34 15.4147 166.407 24.6214 190.54C31.6547 208.967 42.658 226.023 57.6314 241.71C59.8314 244.02 58.0314 246.27 55.7214 247.28C54.8214 247.667 54.0314 248.097 53.3514 248.57C51.9014 250.07 52.3314 253.14 52.3514 255.14C31.6214 235.93 17.0114 211.99 8.66137 185.13C2.48804 165.29 -0.385293 145.337 0.0413737 125.27C0.691374 94.91 5.82137 63.64 9.38137 32.5C9.99471 27.1467 10.7014 21.75 11.5014 16.31C12.3214 10.7767 13.5247 5.69667 15.1114 1.07C15.2107 0.778294 15.3987 0.524438 15.6494 0.343583C15.9001 0.162728 16.2013 0.0636261 16.5114 0.06Z&quot;&gt;&lt;/path&gt; &lt;rect id=&quot;shape17&quot; transform=&quot;matrix(0.0248592227760896 -0.0248592227760896 0.0248592227760896 0.0248592227760896 19.531681996495 13.569794617477)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; width=&quot;23.84&quot; height=&quot;22.92&quot; rx=&quot;10.61&quot; ry=&quot;10.61&quot;&gt;&lt;/rect&gt; &lt;path id=&quot;shape18&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.857255859375 13.3649990428515)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M30.6225 171.52C32.8025 176.187 32.1958 180.223 28.8025 183.63C25.0025 187.46 18.7625 186.11 15.9625 181.69C14.1292 178.81 12.6425 175.893 11.5025 172.94C6.43583 159.887 2.96917 146.447 1.1025 132.62C0.1225 125.393 -0.204167 117.39 0.1225 108.61C0.4625 99.37 1.1225 90.0767 2.1025 80.73C4.5825 56.9634 6.50917 33.53 7.8825 10.43C8.6725 -2.80997 26.8825 -4.35997 26.2625 11.1C26.0892 15.4667 25.8025 19.7567 25.4025 23.97C22.7292 52.2234 20.6125 78.18 19.0525 101.84C18.5525 109.46 18.4158 116.68 18.6425 123.5C19.1825 139.573 23.1758 155.58 30.6225 171.52Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape19&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.7841415488515 13.3674609375)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.0522 0C8.66553 0.146667 13.3755 0.21 18.1822 0.19C20.0355 0.183333 21.4389 0.42 22.3922 0.9C25.8622 2.65 26.8622 6.68 24.4922 9.93C23.2455 11.6367 21.2922 12.4233 18.6322 12.29C16.7255 12.1967 14.9289 12.1633 13.2422 12.19C10.5489 12.0967 7.9222 12.1 5.3622 12.2C-1.3878 12.45 -1.6978 1.74 4.0522 0Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape20&quot; transform=&quot;matrix(0.0338611839889802 -0.00945421244350544 0.00945421244350544 0.0338611839889802 14.9149266129752 14.0867380565676)&quot; rx=&quot;5.57&quot; ry=&quot;5.2&quot; cx=&quot;5.57&quot; cy=&quot;5.2&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape21&quot; transform=&quot;matrix(0.0351561964539828 6.13592003636124e-05 -6.13592003636124e-05 0.0351561964539828 19.6449060698586 14.4819473774511)&quot; rx=&quot;16.66&quot; ry=&quot;16.28&quot; cx=&quot;16.66&quot; cy=&quot;16.28&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape22&quot; transform=&quot;matrix(-0.0146348716029047 0.031965331958686 -0.031965331958686 -0.0146348716029047 15.8772166930746 14.8739620295146)&quot; rx=&quot;9.67&quot; ry=&quot;9.33&quot; cx=&quot;9.67&quot; cy=&quot;9.33&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape23&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.997793706651 14.9540625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M18.805 0C21.585 0.06 23.4616 1.22333 24.435 3.49C25.995 7.11667 24.7383 9.90667 20.665 11.86C15.6716 12.2 10.8516 12.3133 6.20498 12.2C3.87831 12.14 2.32498 11.6733 1.54498 10.8C-2.08502 6.74 1.16498 1.1 6.28498 0.8C10.2716 0.566667 14.445 0.3 18.805 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape24&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.0361349190606 15.7107890625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M19.9144 0.0653333C23.6544 0.312 25.9044 1.90533 26.6644 4.84533C27.3911 7.62533 26.7277 9.78533 24.6744 11.3253C22.6044 12.8753 19.9444 12.4853 17.4044 12.5253C13.2911 12.5987 8.80105 12.5787 3.93438 12.4653C-0.498949 9.852 -1.18562 6.45533 1.87438 2.27533C2.98438 0.765333 4.21438 0.125333 6.20438 0.0853333C10.8177 -0.0213333 15.3877 -0.028 19.9144 0.0653333Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape25&quot; transform=&quot;matrix(-0.0170977282180133 0.0307185547160906 -0.0307185547160906 -0.0170977282180133 15.1542587716268 16.0053675452257)&quot; rx=&quot;11.64&quot; ry=&quot;11.38&quot; cx=&quot;11.64&quot; cy=&quot;11.38&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;circle id=&quot;shape26&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.345234375 16.0238671875)&quot; r=&quot;7.22&quot; cx=&quot;7.22&quot; cy=&quot;7.22&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape27&quot; transform=&quot;matrix(0.0280770296501001 -0.0211575594076892 0.0211575594076892 0.0280770296501001 19.8774398273616 16.4371069616574)&quot; rx=&quot;8.42&quot; ry=&quot;8.13&quot; cx=&quot;8.42&quot; cy=&quot;8.13&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape28&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1414052368516 17.2710454963236)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.02 12.1647L3.45003 11.8747C1.14336 10.388 -0.00663785 8.42471 2.88184e-05 5.98471C0.0133622 3.09804 1.57336 1.13137 4.68003 0.0847059C10.1067 0.00470588 15.6967 -0.0186275 21.45 0.0147059C22.75 0.0247059 23.92 0.0247059 24.8 1.15471C27.1134 4.10804 27.24 7.30471 25.18 10.7447C24.5867 11.7314 23.5334 12.2047 22.02 12.1647Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape29&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.9485123620206 17.688515625)&quot; fill=&quot;rgb(152,83,54)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M94.2701 0L112.84 0.29C113.373 6.01 113.157 11.6167 112.19 17.11C110.957 24.1567 109.597 30.3733 108.11 35.76C106.843 40.3467 104.56 46.5667 101.26 54.42C98.5934 60.76 95.7234 66.4633 92.6501 71.53C74.9968 100.71 50.0768 121.763 17.8901 134.69C12.7801 136.32 5.23009 136.79 1.81009 132.18C-2.58991 126.21 1.72009 121.04 7.38009 118.61C18.6068 113.783 28.7468 108.023 37.8001 101.33C57.4201 86.8233 71.8068 69.5767 80.9601 49.59C87.6934 34.8833 92.1301 18.3533 94.2701 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape30&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9331058615201 20.210194296345)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.830544 4.59225C1.98054 2.02225 4.27054 0.202251 7.19054 0.0222511C13.5005 -0.367749 17.0705 4.44225 20.8405 8.69225C24.9205 13.2723 24.7505 19.4123 19.5605 22.8923C14.7605 26.1223 10.5505 23.2223 6.91054 19.4823C2.88054 15.3523 -1.96946 10.8623 0.830544 4.59225Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape31&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.6404577789765 21.5771484375)&quot; fill=&quot;rgb(152,83,54)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.07476 0C8.08142 5.61333 15.5614 10.35 23.5148 14.21C29.8681 17.29 36.3014 20.1933 42.8148 22.92C60.4748 30.32 77.6181 35.09 94.2448 37.23C109.971 39.2633 126.571 38.5767 144.045 35.17L147.645 35.08C147.945 35.0733 148.221 35.15 148.475 35.31C149.161 35.7233 149.338 36.3467 149.005 37.18C148.878 37.4867 148.938 37.7533 149.185 37.98C149.755 38.5 150.175 38.94 150.235 39.77C150.361 41.7967 150.618 43.8033 151.005 45.79C151.065 46.1233 150.975 46.4067 150.735 46.64C150.228 47.1467 149.631 47.4867 148.945 47.66C148.731 47.7133 148.631 47.85 148.645 48.07C148.658 48.2767 148.501 48.4167 148.175 48.49C148.041 48.5167 147.908 48.5333 147.775 48.54L145.005 48.63C144.678 48.6433 144.485 48.81 144.425 49.13C144.371 49.41 144.138 49.5633 143.725 49.59C143.659 49.5967 143.588 49.5933 143.515 49.58C141.015 49.2067 139.005 49.84 137.485 51.48C124.278 53.2267 112.368 53.5833 101.755 52.55C80.2748 50.4633 60.3014 44.84 41.8348 35.68C35.8281 32.7 28.6481 28.54 20.2948 23.2C14.0414 19.2067 7.30142 13.6633 0.0747565 6.57C0.0547565 4.57 -0.375243 1.5 1.07476 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape32&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.548046875 24.3846604970638)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M37.39 126.792L36.84 125.732C36.6867 125.445 36.61 125.139 36.61 124.812L36.29 50.1519C39.97 50.1319 42.74 50.0419 44.93 47.3519C46.0567 45.9652 46.4067 44.4152 45.98 42.7019C44.81 38.0219 40.08 37.5119 35.72 37.6019L35.91 26.2919C40.16 26.9019 44.77 27.8519 48.81 25.9619C52.26 24.3519 53.31 20.2319 50.85 17.2519C48.51 14.4319 45.36 14.2119 41.99 14.2719C35.7567 14.3852 29.3167 14.4052 22.67 14.3319C19.49 14.3019 16.81 15.9619 15.14 18.6319C15.2 16.6619 12.86 15.6819 11.44 14.7519C10.6133 14.2119 9.90667 13.5852 9.32 12.8719C6.57333 9.53188 3.78 6.23188 0.94 2.97188C0.46 2.41855 0.146667 1.62521 0 0.591879C17.1 3.24521 34.28 3.98188 51.54 2.80188C57.06 2.42188 62.3133 1.51855 67.3 0.0918792C68.18 -0.154787 68.3567 0.0952125 67.83 0.841879C58.7633 13.8352 53.49 29.3252 52.01 47.3119C50.37 67.3319 51 88.9819 56.8 107.652C58.81 114.142 62.13 120.072 65.01 126.212C65.0485 126.291 65.0589 126.382 65.0394 126.468C65.02 126.554 64.9718 126.631 64.9029 126.686C64.834 126.741 64.7483 126.772 64.66 126.772Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape33&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.486355851717 24.3923298330305)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.75477 0.373729C1.90143 1.40706 2.21477 2.2004 2.69477 2.75373C5.53477 6.01373 8.3281 9.31373 11.0748 12.6537C11.6614 13.3671 12.3681 13.9937 13.1948 14.5337C14.6148 15.4637 16.9548 16.4437 16.8948 18.4137L16.5848 19.0537C15.9714 19.3604 15.6748 19.8204 15.6948 20.4337C15.8148 23.3437 16.3448 26.1237 18.0248 28.6937C19.9714 31.6737 22.1714 34.5471 24.6248 37.3137C19.6548 39.6737 18.5548 46.9937 24.3448 49.3137C24.1981 53.2071 24.2048 57.1237 24.3648 61.0637C24.5581 65.7371 24.5748 69.6437 24.4148 72.7837C24.2014 77.0371 23.9914 81.3304 23.7848 85.6637C23.1248 99.8304 19.6748 113.244 13.4348 125.904C13.2814 126.21 13.0314 126.384 12.6848 126.424L11.5948 126.534L3.79477 126.534C3.66373 126.534 3.5364 126.49 3.43437 126.408C3.33234 126.325 3.26171 126.21 3.23447 126.082C3.20722 125.954 3.22499 125.82 3.28477 125.704C16.0848 100.784 18.1148 71.0737 14.6948 43.5737C12.8014 28.3737 7.92143 14.0371 0.0547669 0.563729C0.0152725 0.50031 -0.00361813 0.426609 0.000572506 0.352292C0.00476314 0.277975 0.0318434 0.20644 0.0782619 0.147067C0.12468 0.0876949 0.188315 0.0431997 0.26082 0.0194171C0.333326 -0.0043654 0.411387 -0.00634806 0.484767 0.0137292Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape34&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.0617214476865 24.8861307529877)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M21.2988 12.0278C16.7455 11.8878 12.1288 11.8545 7.44881 11.9278C4.74215 11.9678 2.94548 11.7312 2.05881 11.2178C0.238812 10.1645 -0.374521 8.0945 0.218812 5.00784L0.528812 4.36784C2.19881 1.69784 4.87881 0.0378364 8.05881 0.0678364C14.7055 0.14117 21.1455 0.12117 27.3788 0.00783636C30.7488 -0.0521636 33.8988 0.167836 36.2388 2.98784C38.6988 5.96784 37.6488 10.0878 34.1988 11.6978C30.1588 13.5878 25.5488 12.6378 21.2988 12.0278Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape35&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.038091694079 25.0621875000001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.890947 0C0.297614 3.08667 0.910947 5.15667 2.73095 6.21C3.61761 6.72333 5.41428 6.96 8.12095 6.92C12.8009 6.84667 17.4176 6.88 21.9709 7.02L21.7809 18.33L8.93095 18.26C6.47761 15.4933 4.27761 12.62 2.33095 9.64C0.650947 7.07 0.120947 4.29 0.000947368 1.38C-0.0190526 0.766667 0.277614 0.306667 0.890947 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape36&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.2047130847683 25.704140625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.19149 0L17.0415 0.07C21.4015 -0.02 26.1315 0.49 27.3015 5.17C27.7282 6.88333 27.3782 8.43333 26.2515 9.82C24.0615 12.51 21.2915 12.6 17.6115 12.62L3.91149 12C-1.87851 9.68 -0.778506 2.36 4.19149 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape37&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.893984375 26.126015625)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M12.75 0L26.45 0.62L26.77 75.28C26.77 75.6067 26.8467 75.9133 27 76.2L27.55 77.26L0 77.22L1.09 77.11C1.43667 77.07 1.68667 76.8967 1.84 76.59C8.08 63.93 11.53 50.5167 12.19 36.35C12.3967 32.0167 12.6067 27.7233 12.82 23.47C12.98 20.33 12.9633 16.4233 12.77 11.75C12.61 7.81 12.6033 3.89333 12.75 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape38&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.22640625 29.4324536132813)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M29.96 24.0302C30.7067 23.5835 30.1467 23.1702 28.28 22.7902C27.96 22.7235 27.6733 22.5835 27.42 22.3702C24.9333 20.2235 22.8967 18.7069 21.31 17.8202C12.91 13.1069 5.80667 7.21687 0 0.150208L30.09 0.000208333C30.4767 -0.00645833 30.7833 0.146875 31.01 0.460208C37.57 9.69354 45.7567 17.2435 55.57 23.1102C55.9433 23.3302 55.92 23.4969 55.5 23.6102C54.48 23.8769 53.4167 24.0135 52.31 24.0202C44.77 24.0669 37.32 24.0702 29.96 24.0302Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape39&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.2706541442871 29.4394921875)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M38.2747 0C35.2147 4.74667 31.2681 10.0433 26.4347 15.89C23.4547 19.49 20.7014 22.14 18.1747 23.84L0.754727 23.73C-0.17194 23.7233 -0.245273 23.4733 0.534727 22.98C9.87473 17.05 17.3747 9.52 24.9347 0.58C25.0571 0.432797 25.211 0.314351 25.3856 0.233119C25.5601 0.151886 25.7511 0.109846 25.9447 0.11Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape40&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.909609375 29.437734375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M65.9 0C71.7067 7.06667 78.81 12.9567 87.21 17.67C88.7967 18.5567 90.8333 20.0733 93.32 22.22C93.5733 22.4333 93.86 22.5733 94.18 22.64C96.0467 23.02 96.6067 23.4333 95.86 23.88L0 23.89C2.52667 22.19 5.28 19.54 8.26 15.94C13.0933 10.0933 17.04 4.79667 20.1 0.05Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape41&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.6264334548969 30.8390367406574)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M175.558 0.450733C176.245 0.450733 176.568 0.567399 176.528 0.800733C176.494 1.0303 176.388 1.24303 176.226 1.40826C176.065 1.5735 175.855 1.68291 175.628 1.72073C171.935 2.3474 168.581 2.65073 165.568 2.63073C163.998 2.62073 162.798 3.35073 161.188 3.18073C160.808 3.14073 160.445 3.20407 160.098 3.37073L158.488 4.16073C158.195 4.30073 157.958 4.50407 157.778 4.77073C157.045 5.85073 156.111 6.47073 154.978 6.63073C153.258 6.87073 151.491 6.99073 149.678 6.99073C111.858 6.8974 73.5681 6.84073 34.8081 6.82073C28.6781 6.82073 24.4281 9.63073 23.3181 15.9507L0.628115 15.8107C0.50059 15.8104 0.376138 15.7713 0.2713 15.6987C0.166463 15.626 0.0861025 15.5233 0.0409006 15.404C-0.00430136 15.2848 -0.0122487 15.1546 0.0181151 15.0307C2.16812 6.40073 10.0881 -0.0792673 19.0981 0.00073271C53.2181 0.314066 87.8014 0.380733 122.848 0.200733C140.421 0.114066 157.991 0.197399 175.558 0.450733Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape42&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.4462109375 30.8548828125)&quot; fill=&quot;rgb(178,96,51)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M152.24 0L253.08 0.15C253.047 2.17 252.56 3.72667 251.62 4.82C250.867 5.69333 249.93 6.13667 248.81 6.15C221.383 6.39 194.363 6.58667 167.75 6.74C167.283 6.74 167.03 6.97333 166.99 7.44C166.87 8.95333 167.113 10.3433 167.72 11.61C167.847 11.8833 167.89 12.1667 167.85 12.46L167.63 14.18C167.577 14.5867 167.74 14.86 168.12 15C168.573 15.1667 168.867 15.3533 169 15.56L0 15.5C1.11 9.18 5.36 6.37 11.49 6.37C50.25 6.39 88.54 6.44667 126.36 6.54C128.173 6.54 129.94 6.42 131.66 6.18C132.793 6.02 133.727 5.4 134.46 4.32C134.64 4.05333 134.877 3.85 135.17 3.71L136.78 2.92C137.127 2.75333 137.49 2.69 137.87 2.73C139.48 2.9 140.68 2.17 142.25 2.18C145.263 2.2 148.617 1.89667 152.31 1.27C152.537 1.23218 152.746 1.12277 152.908 0.957532C153.07 0.792295 153.175 0.579568 153.21 0.35C153.25 0.116667 152.927 -1.13687e-13 152.24 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape43&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 19.3159081135321 30.86015625)&quot; fill=&quot;rgb(152,83,54)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M86.1197 0C93.6331 3.14 98.2231 7.99667 99.8897 14.57C99.9181 14.684 99.9111 14.804 99.8698 14.914C99.8285 15.024 99.7547 15.1189 99.6583 15.186C99.5618 15.2532 99.4472 15.2894 99.3297 15.29L2.03972 15.41C1.90639 15.2033 1.61306 15.0167 1.15972 14.85C0.779725 14.71 0.616391 14.4367 0.669725 14.03L0.889725 12.31C0.929725 12.0167 0.886391 11.7333 0.759725 11.46C0.153058 10.1933 -0.0902752 8.80333 0.0297248 7.29C0.0697248 6.82333 0.323058 6.59 0.789725 6.59C27.4031 6.43667 54.4231 6.24 81.8497 6C82.9697 5.98667 83.9064 5.54333 84.6597 4.67C85.5997 3.57667 86.0864 2.02 86.1197 0Z&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt;&lt;div class=&quot;w-16 h-16&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;fill-[${rgbColor} w-16 h-16&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 36 36&quot;&gt; &lt;defs&gt;&lt;/defs&gt; &lt;path id=&quot;shape0&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 10.393984646722 3.24851063866497)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M384.119 800.308C389.392 800.401 395.079 800.381 401.179 800.248C405.299 800.161 408.469 800.568 410.689 801.468C415.949 803.598 420.779 810.198 420.289 816.268C419.669 823.858 412.349 829.318 404.999 829.328C277.499 829.355 146.952 829.355 13.3589 829.328C8.63888 829.328 4.09888 825.978 1.87888 822.058C-2.73112 813.888 1.52888 803.918 10.4389 801.028C11.9855 800.528 13.9555 800.285 16.3489 800.298C22.1289 800.338 27.6889 800.265 33.0289 800.078C33.1769 800.076 33.3188 800.017 33.4263 799.913C33.5337 799.809 33.5989 799.668 33.6089 799.518C33.7489 797.391 34.0889 795.351 34.6289 793.398C38.5755 779.138 46.7822 768.285 59.2489 760.838C67.2389 756.068 77.9989 753.418 87.8689 753.798C91.7089 753.938 95.6189 754.578 99.3589 753.338C121.612 745.945 138.126 732.518 148.899 713.058C160.649 691.848 162.149 664.098 156.689 640.298C150.949 615.338 135.539 594.358 113.659 581.418C104.759 576.151 97.1322 571.378 90.7789 567.098C79.8722 559.751 69.4389 550.391 59.4789 539.018C41.7922 518.825 28.7222 496.301 20.2689 471.448C13.2089 450.695 9.41555 429.945 8.88888 409.198C8.39555 389.938 9.51888 370.588 12.2589 351.148C15.7689 326.188 18.7489 301.968 22.2689 277.258C23.1955 270.798 23.9055 264.308 24.3989 257.788C25.2922 245.915 26.1489 234.441 26.9689 223.368C28.2189 206.548 28.2189 189.968 28.2289 172.948C28.229 172.665 28.1641 172.386 28.0392 172.133C27.9143 171.88 27.7328 171.659 27.5089 171.488C4.71888 154.278 -3.35112 123.728 10.2489 97.8679C21.8189 75.8479 44.3589 62.0579 69.5789 63.3579C72.9922 63.5379 76.3389 64.1179 79.6189 65.0979C79.7826 65.1468 79.9567 65.1513 80.1235 65.1109C80.2903 65.0705 80.4439 64.9867 80.5689 64.8679C95.3422 50.8279 113.322 44.9613 134.509 47.2679C134.656 47.2852 134.804 47.2536 134.932 47.1778C135.061 47.102 135.161 46.9862 135.219 46.8479C136.972 42.6213 139.372 38.5079 142.419 34.5079C153.299 20.2379 166.749 9.32792 184.089 3.97792C204.569 -2.34875 224.312 -1.12875 243.319 7.63792C258.599 14.6779 272.559 26.6579 280.469 41.6579C280.596 41.9046 280.792 41.9846 281.059 41.8979C289.839 38.9646 299.389 37.9446 309.709 38.8379C326.729 40.3079 342.309 50.4379 353.989 63.2879C354.516 63.8679 355.166 64.1746 355.939 64.2079C361.419 64.4546 366.656 65.5513 371.649 67.4979C392.199 75.5079 406.519 91.1379 411.669 112.968C413.189 119.421 413.456 125.841 412.469 132.228C409.882 148.975 401.956 162.205 388.689 171.918C387.729 172.628 387.729 173.468 387.719 174.528C387.586 191.895 387.899 207.108 388.659 220.168C389.549 235.238 390.999 253.908 393.189 270.758C396.622 297.205 400.169 324.231 403.829 351.838C404.689 358.351 405.536 366.615 406.369 376.628C407.042 384.655 407.406 391.321 407.459 396.628C407.679 420.268 404.476 443.035 397.849 464.928C386.419 502.718 363.929 536.538 333.029 561.268C324.009 568.498 312.959 575.088 302.869 581.488C297.502 584.888 292.979 588.131 289.299 591.218C265.139 611.508 255.039 640.758 256.429 672.398C258.039 709.018 277.959 738.488 312.639 751.718C317.389 753.528 321.449 754.508 326.659 754.038C338.269 753.008 349.089 755.608 359.129 762.058C371.639 770.088 381.589 784.038 383.299 799.558C383.352 800.045 383.626 800.295 384.119 800.308ZM34.9389 123.938C34.6255 130.038 36.5689 135.461 40.7689 140.208C42.9155 142.635 45.5089 143.855 48.5489 143.868C57.4489 143.895 67.6722 143.898 79.2189 143.878C80.8589 143.878 81.9889 142.308 82.5389 140.958C82.6855 140.585 82.6522 140.231 82.4389 139.898C80.5522 136.978 80.8189 134.321 83.2389 131.928C87.7189 127.508 91.8289 130.808 94.8789 134.678C97.7389 138.308 103.749 143.708 108.819 143.768C117.746 143.855 126.882 143.871 136.229 143.818C142.909 143.768 150.429 136.098 154.769 131.618C156.269 130.068 158.029 129.188 160.259 129.608C164.159 130.328 166.106 132.778 166.099 136.958C166.099 138.248 165.299 139.248 164.549 140.218C164.261 140.59 164.13 141.06 164.184 141.527C164.239 141.994 164.474 142.422 164.839 142.718C166.006 143.678 167.326 144.148 168.799 144.128C196.979 143.828 224.629 143.751 251.749 143.898C253.509 143.905 255.106 143.581 256.539 142.928C256.721 142.847 256.872 142.708 256.969 142.533C257.065 142.358 257.101 142.155 257.073 141.955C257.044 141.756 256.951 141.571 256.809 141.428C253.879 138.498 254.059 132.908 257.859 130.608C262.999 127.498 266.539 130.248 269.939 133.818C274.619 138.718 280.959 143.828 287.779 143.838C296.859 143.865 305.789 143.868 314.569 143.848C321.399 143.828 328.259 136.098 332.759 131.638C335.086 129.338 337.459 128.821 339.879 130.088C343.819 132.161 344.612 135.195 342.259 139.188C342.08 139.495 341.983 139.844 341.98 140.198C341.976 140.552 342.066 140.901 342.239 141.208C343.319 143.118 344.959 144.088 347.179 144.068C354.066 144.001 361.086 143.928 368.239 143.848C370.352 143.821 372.149 143.235 373.629 142.088C379.589 137.488 382.416 131.278 382.109 123.458C381.969 109.928 371.589 99.2079 359.169 95.4779C358.953 95.4151 358.724 95.4137 358.51 95.4738C358.296 95.534 358.105 95.6534 357.959 95.8179C355.212 98.9446 351.706 100.435 347.439 100.288C341.069 100.068 338.009 96.4579 335.789 91.1479C332.202 82.5946 326.232 76.3279 317.879 72.3479C307.626 67.4546 296.802 67.5779 285.409 72.7179C282.069 74.2179 279.519 77.4279 276.309 79.4679C269.159 84.0279 261.339 79.8879 260.179 71.8979C258.606 61.0979 253.279 51.6813 244.199 43.6479C217.109 19.6679 175.399 28.6579 160.839 61.6279C158.766 66.3279 157.699 70.8946 157.639 75.3279C157.559 80.8679 155.339 86.2279 149.929 88.1679C144.262 90.2146 139.372 89.0513 135.259 84.6779C133.749 83.0679 132.859 81.0279 131.499 79.3379C131.286 79.0646 131.012 78.8779 130.679 78.7779C128.472 78.1113 126.346 77.8213 124.299 77.9079C113.326 78.3813 104.429 83.1579 97.6089 92.2379C94.2189 96.7479 94.0089 102.468 90.0089 106.458C86.8589 109.588 81.6689 110.618 77.7089 108.488C73.0155 105.968 70.9422 101.938 71.4889 96.3979C71.5755 95.5313 71.1922 95.0446 70.3389 94.9379C59.7789 93.5446 50.8422 96.5046 43.5289 103.818C38.0555 109.291 35.1922 115.998 34.9389 123.938ZM70.3189 172.868L60.5489 172.868C60.0022 172.868 59.7255 173.141 59.7189 173.688C59.4855 194.395 58.5655 214.878 56.9589 235.138C56.6655 238.818 56.5355 242.431 56.5689 245.978C56.5689 246.378 56.7689 246.578 57.1689 246.578L287.389 246.598L306.739 246.558L315.789 246.558C316.622 246.558 317.009 246.145 316.949 245.318C315.196 221.491 313.862 197.675 312.949 173.868C312.939 173.596 312.822 173.339 312.625 173.151C312.427 172.963 312.163 172.858 311.889 172.858L302.559 172.868L102.799 172.818L85.9489 172.788ZM345.659 172.918L336.369 172.938C335.276 172.938 334.742 173.485 334.769 174.578C335.302 197.585 336.822 220.561 339.329 243.508C339.429 244.421 339.629 245.291 339.929 246.118C339.981 246.258 340.075 246.379 340.199 246.463C340.322 246.547 340.469 246.591 340.619 246.588L349.349 246.478L358.959 246.388C359.056 246.388 359.152 246.362 359.234 246.311C359.317 246.259 359.384 246.186 359.427 246.099C359.47 246.012 359.488 245.915 359.479 245.818C358.169 231.648 357.729 217.678 356.929 203.398C356.396 193.905 356.209 183.971 356.369 173.598C356.371 173.466 356.337 173.335 356.273 173.221C356.208 173.106 356.114 173.011 356.001 172.945C355.888 172.88 355.759 172.846 355.629 172.848ZM285.139 272.498L66.0789 272.778L56.5789 272.838C56.2688 272.842 55.9676 272.941 55.7169 273.122C55.4662 273.302 55.2782 273.556 55.1789 273.848C53.5922 278.475 52.3889 283.555 51.5689 289.088C50.7689 294.528 50.0622 299.925 49.4489 305.278C45.8889 336.418 40.7589 367.688 40.1089 398.048C39.6822 418.115 42.5555 438.068 48.7289 457.908C57.0789 484.768 71.6889 508.708 92.4189 527.918C99.6455 535.011 106.386 540.555 112.639 544.548C120.992 549.888 128.172 554.048 134.179 557.028C152.646 566.188 172.619 571.811 194.099 573.898C204.712 574.931 216.622 574.575 229.829 572.828C240.356 571.415 249.986 569.291 258.719 566.458C291.679 555.758 320.169 534.368 341.689 507.238C357.689 487.038 368.109 461.898 373.119 436.298C376.719 417.938 377.099 398.938 375.549 380.068C373.189 351.368 369.499 324.108 365.409 293.848C364.422 286.581 363.209 279.731 361.769 273.298C361.729 273.128 361.634 272.976 361.499 272.867C361.365 272.758 361.199 272.699 361.029 272.698ZM175.049 601.798L173.779 601.438C173.706 601.418 173.627 601.42 173.555 601.444C173.482 601.467 173.419 601.512 173.372 601.571C173.326 601.631 173.299 601.702 173.295 601.776C173.29 601.851 173.309 601.925 173.349 601.988C181.216 615.461 186.096 629.798 187.989 644.998C191.409 672.498 189.379 702.208 176.579 727.128C176.519 727.245 176.501 727.378 176.529 727.506C176.556 727.635 176.626 727.75 176.728 727.832C176.831 727.914 176.958 727.959 177.089 727.958L184.889 727.958L212.439 727.998L239.709 727.978C239.797 727.978 239.883 727.947 239.952 727.892C240.021 727.837 240.069 727.76 240.088 727.674C240.108 727.588 240.097 727.497 240.059 727.418C237.179 721.278 233.859 715.348 231.849 708.858C226.049 690.188 225.419 668.538 227.059 648.518C228.539 630.531 233.812 615.041 242.879 602.048C243.406 601.301 243.229 601.051 242.349 601.298C237.362 602.725 232.109 603.628 226.589 604.008C209.329 605.188 192.149 604.451 175.049 601.798ZM222.789 744.938L176.989 744.988L164.659 745.098C164.465 745.098 164.274 745.14 164.1 745.221C163.925 745.302 163.771 745.421 163.649 745.568C156.089 754.508 148.589 762.038 139.249 767.968C138.469 768.461 138.542 768.711 139.469 768.718L156.889 768.828L252.749 768.818C260.109 768.858 267.559 768.855 275.099 768.808C276.206 768.801 277.269 768.665 278.289 768.398C278.709 768.285 278.732 768.118 278.359 767.898C268.546 762.031 260.359 754.481 253.799 745.248C253.572 744.935 253.266 744.781 252.879 744.788ZM86.8189 800.748L255.819 800.808L353.109 800.688C353.226 800.687 353.341 800.651 353.437 800.584C353.534 800.517 353.608 800.422 353.649 800.312C353.69 800.202 353.697 800.082 353.669 799.968C352.002 793.395 347.412 788.538 339.899 785.398L239.059 785.248C221.492 784.995 203.922 784.911 186.349 784.998C151.302 785.178 116.719 785.111 82.5989 784.798C73.5889 784.718 65.6689 791.198 63.5189 799.828C63.4885 799.952 63.4965 800.082 63.5417 800.201C63.5869 800.32 63.6672 800.423 63.7721 800.496C63.8769 800.568 64.0014 800.608 64.1289 800.608Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape1&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6223046875 4.3066710451255)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.17 93.3591L341.7 94.8091C341.347 94.9025 341.043 95.0758 340.79 95.3291C334.81 101.209 327.56 101.079 319.06 100.739C316.15 100.619 313.98 99.6891 312.72 96.9491C310.21 91.4791 305.03 84.9891 298.07 88.5091C296.217 89.4491 294.677 90.6225 293.45 92.0291C288.01 98.2791 282.29 103.559 274.1 105.299C270.267 106.112 266.1 106.416 261.6 106.209C253.04 105.819 244.67 101.199 239.15 94.8491C232.37 87.0391 226.88 84.2491 219.24 92.9691C214.89 97.9391 209.89 101.049 202.97 101.219C196.37 101.379 189.917 101.426 183.61 101.359C182.93 101.352 182.43 100.989 182.11 100.269C182.01 100.04 181.975 99.7876 182.008 99.5391C182.042 99.2906 182.143 99.0554 182.3 98.8591C183.04 97.9325 183.813 97.0725 184.62 96.2791C187.09 93.8491 185.64 89.9291 183.51 87.8291C180.65 85.0091 175.91 85.9891 173.39 88.9391C172.23 90.2925 171.17 91.6391 170.21 92.9791C163.5 102.299 152.67 101.929 142.47 100.679C134.9 99.7591 131.64 94.3891 126.62 89.6591C123.633 86.8525 120.593 86.8391 117.5 89.6191C112.63 93.9791 108.24 99.7591 102.47 102.719C88.07 110.129 72.61 106.679 62.57 94.0391C58.62 89.0591 52.95 85.2191 47.21 90.7591C44.54 93.3491 43.94 96.9991 40.53 99.0891C36.59 101.509 29.55 101.139 24.26 101.029C18.64 100.899 13.25 100.999 9.85 97.1991C7.82 94.9191 4 93.8291 2.11 96.9691C1.02333 98.7691 0.446667 98.6225 0.38 96.5291C0.366667 95.9891 0.24 95.0925 0 93.8391C0.253333 85.8991 3.11667 79.1925 8.59 73.7191C15.9033 66.4058 24.84 63.4458 35.4 64.8391C36.2533 64.9458 36.6367 65.4325 36.55 66.2991C36.0033 71.8391 38.0767 75.8691 42.77 78.3891C46.73 80.5191 51.92 79.4891 55.07 76.3591C59.07 72.3691 59.28 66.6491 62.67 62.1391C69.49 53.0591 78.3867 48.2825 89.36 47.8091C91.4067 47.7225 93.5333 48.0125 95.74 48.6791C96.0733 48.7791 96.3467 48.9658 96.56 49.2391C97.92 50.9291 98.81 52.9691 100.32 54.5791C104.433 58.9525 109.323 60.1158 114.99 58.0691C120.4 56.1291 122.62 50.7691 122.7 45.2291C122.76 40.7958 123.827 36.2291 125.9 31.5291C140.46 -1.44087 182.17 -10.4309 209.26 13.5491C218.34 21.5825 223.667 30.9991 225.24 41.7991C226.4 49.7891 234.22 53.9291 241.37 49.3691C244.58 47.3291 247.13 44.1191 250.47 42.6191C261.863 37.4791 272.687 37.3558 282.94 42.2491C291.293 46.2291 297.263 52.4958 300.85 61.0491C303.07 66.3591 306.13 69.9691 312.5 70.1891C316.767 70.3358 320.273 68.8458 323.02 65.7191C323.166 65.5546 323.357 65.4352 323.571 65.3751C323.785 65.3149 324.014 65.3163 324.23 65.3791C336.65 69.1091 347.03 79.8291 347.17 93.3591Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape2&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6211575655465 7.33540715628013)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.203 7.20842C347.509 15.0284 344.683 21.2384 338.723 25.8384C337.243 26.9851 335.446 27.5718 333.333 27.5984C326.179 27.6784 319.159 27.7518 312.273 27.8184C310.053 27.8384 308.413 26.8684 307.333 24.9584C307.159 24.651 307.07 24.3028 307.074 23.9484C307.077 23.594 307.173 23.2458 307.353 22.9384C309.706 18.9451 308.913 15.9118 304.973 13.8384C302.553 12.5718 300.179 13.0884 297.853 15.3884C293.353 19.8484 286.493 27.5784 279.663 27.5984C270.883 27.6184 261.953 27.6151 252.873 27.5884C246.053 27.5784 239.713 22.4684 235.033 17.5684C231.633 13.9984 228.093 11.2484 222.953 14.3584C219.153 16.6584 218.973 22.2484 221.903 25.1784C222.045 25.3214 222.137 25.5067 222.166 25.706C222.195 25.9053 222.159 26.108 222.062 26.2834C221.966 26.4588 221.815 26.5975 221.633 26.6784C220.199 27.3318 218.603 27.6551 216.843 27.6484C189.723 27.5018 162.073 27.5784 133.893 27.8784C132.419 27.8984 131.099 27.4284 129.933 26.4684C129.567 26.1723 129.332 25.7446 129.278 25.2775C129.224 24.8105 129.355 24.3403 129.643 23.9684C130.393 22.9984 131.193 21.9984 131.193 20.7084C131.199 16.5284 129.253 14.0784 125.353 13.3584C123.123 12.9384 121.363 13.8184 119.863 15.3684C115.523 19.8484 108.003 27.5184 101.323 27.5684C91.976 27.6218 82.8393 27.6051 73.9126 27.5184C68.8426 27.4584 62.8326 22.0584 59.9726 18.4284C56.9226 14.5584 52.8126 11.2584 48.3326 15.6784C45.9126 18.0718 45.646 20.7284 47.5326 23.6484C47.746 23.9818 47.7793 24.3351 47.6326 24.7084C47.0826 26.0584 45.9526 27.6284 44.3126 27.6284C32.766 27.6484 22.5426 27.6451 13.6426 27.6184C10.6026 27.6051 8.0093 26.3851 5.86263 23.9584C1.66263 19.2118 -0.280704 13.7884 0.0326292 7.68842C0.272629 8.94175 0.399296 9.83842 0.412629 10.3784C0.479296 12.4718 1.05596 12.6184 2.14263 10.8184C4.03263 7.67842 7.85263 8.76842 9.88263 11.0484C13.2826 14.8484 18.6726 14.7484 24.2926 14.8784C29.5826 14.9884 36.6226 15.3584 40.5626 12.9384C43.9726 10.8484 44.5726 7.19842 47.2426 4.60842C52.9826 -0.931581 58.6526 2.90842 62.6026 7.88842C72.6426 20.5284 88.1026 23.9784 102.503 16.5684C108.273 13.6084 112.663 7.82842 117.533 3.46842C120.626 0.688419 123.666 0.701752 126.653 3.50842C131.673 8.23842 134.933 13.6084 142.503 14.5284C152.703 15.7784 163.533 16.1484 170.243 6.82842C171.203 5.48842 172.263 4.14175 173.423 2.78842C175.943 -0.161581 180.683 -1.14158 183.543 1.67842C185.673 3.77842 187.123 7.69842 184.653 10.1284C183.846 10.9218 183.073 11.7818 182.333 12.7084C182.175 12.9047 182.074 13.1399 182.041 13.3884C182.007 13.6369 182.043 13.8894 182.143 14.1184C182.463 14.8384 182.963 15.2018 183.643 15.2084C189.949 15.2751 196.403 15.2284 203.003 15.0684C209.923 14.8984 214.923 11.7884 219.273 6.81842C226.913 -1.90158 232.403 0.888419 239.183 8.69842C244.703 15.0484 253.073 19.6684 261.633 20.0584C266.133 20.2651 270.299 19.9618 274.133 19.1484C282.323 17.4084 288.043 12.1284 293.483 5.87842C294.709 4.47175 296.249 3.29842 298.103 2.35842C305.063 -1.16158 310.243 5.32842 312.753 10.7984C314.013 13.5384 316.183 14.4684 319.093 14.5884C327.593 14.9284 334.843 15.0584 340.823 9.17842C341.076 8.92509 341.379 8.75175 341.733 8.65842Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape3&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.7941352600339 9.3230859375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M17.6779 0C16.5513 11.84 15.9213 19.36 15.7879 22.56C15.3079 33.9733 14.6346 46.28 13.7679 59.48C13.6013 62.04 13.1046 63.7467 12.2779 64.6C8.55793 68.45 -0.30207 67.53 0.00793038 61.06C1.34793 33.3133 2.02793 12.9867 2.04793 0.08Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape4&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9413128810975 9.32414062500001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M201.657 0.05C201.63 7.10333 201.687 11.5967 201.827 13.53C203.28 33.53 204.617 53.6 205.837 73.74L186.487 73.78L193.557 73.61C193.714 73.6076 193.867 73.5609 193.998 73.4752C194.129 73.3896 194.234 73.2685 194.299 73.126C194.364 72.9835 194.388 72.8254 194.367 72.67C193.367 64.75 192.894 56.7733 192.947 48.74C196.9 43.82 196.69 38.93 192.317 34.07C191.537 32.47 191.137 31.2867 191.117 30.52C190.984 25.7933 191.01 21.2667 191.197 16.94C191.213 16.5684 191.128 16.1993 190.951 15.872C190.773 15.5446 190.51 15.2711 190.189 15.0807C189.868 14.8902 189.501 14.7897 189.127 14.79L153.317 14.9C152.777 12.9667 151.747 11.28 150.227 9.84C148.927 8.60667 147.257 7.7 145.217 7.12C138.364 5.17333 133.557 7.71667 130.797 14.75C116.39 14.8967 101.944 14.9467 87.4571 14.9C61.1271 14.81 34.7871 15.13 8.5371 15.06C6.00377 15.0533 4.15377 14.7633 2.9871 14.19C0.773767 13.11 -0.209566 11.2233 0.0371003 8.53C0.150434 7.29667 0.770434 4.45333 1.8971 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape5&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.5460546875 9.32519283839548)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M3.69 73.6301L0 0.0700704L9.97 7.03745e-05C10.1004 -0.00175254 10.2289 0.031869 10.3421 0.0974247C10.4553 0.16298 10.5492 0.258107 10.6139 0.372872C10.6786 0.487637 10.7118 0.617903 10.71 0.75007C10.55 11.1234 10.7367 21.0567 11.27 30.5501C12.07 44.8301 12.51 58.8001 13.82 72.9701C13.8293 73.0668 13.8114 73.1643 13.7681 73.2514C13.7249 73.3384 13.6581 73.4116 13.5754 73.4627C13.4926 73.5137 13.3972 73.5405 13.3 73.5401Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape6&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.3825550063776 9.3230859375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M13.7551 0.08C13.7351 12.9867 13.0551 33.3133 11.7151 61.06C11.4051 67.53 20.2651 68.45 23.9851 64.6C24.8118 63.7467 25.3084 62.04 25.4751 59.48C26.3418 46.28 27.0151 33.9733 27.4951 22.56C27.6284 19.36 28.2584 11.84 29.3851 0L46.2351 0.03C45.1084 4.48333 44.4884 7.32667 44.3751 8.56C44.1284 11.2533 45.1118 13.14 47.3251 14.22C48.4918 14.7933 50.3418 15.0833 52.8751 15.09C79.1251 15.16 105.465 14.84 131.795 14.93C146.282 14.9767 160.728 14.9267 175.135 14.78C174.568 20.8133 176.498 24.9267 180.925 27.12C183.338 28.3133 185.805 28.72 188.325 28.34C194.755 27.36 198.095 21.26 197.655 14.93L233.465 14.82C233.839 14.8197 234.206 14.9202 234.527 15.1107C234.848 15.3011 235.111 15.5746 235.289 15.902C235.466 16.2293 235.551 16.5984 235.535 16.97C235.348 21.2967 235.322 25.8233 235.455 30.55C235.475 31.3167 235.875 32.5 236.655 34.1C232.788 31.5133 229.168 30.99 225.795 32.53C211.935 38.83 224.195 59.55 237.285 48.77C237.232 56.8033 237.705 64.78 238.705 72.7C238.726 72.8554 238.702 73.0135 238.637 73.156C238.572 73.2985 238.467 73.4196 238.336 73.5052C238.205 73.5909 238.052 73.6376 237.895 73.64L230.825 73.81L0.605102 73.79C0.205102 73.79 0.00510204 73.59 0.00510204 73.19C-0.0282313 69.6433 0.101769 66.03 0.395102 62.35C2.00177 42.09 2.92177 21.6067 3.1551 0.9C3.16177 0.353333 3.43844 0.08 3.9851 0.08ZM127.005 36.5C127.005 34.413 126.456 32.3624 125.412 30.555C124.369 28.7476 122.867 27.2464 121.06 26.203C119.253 25.1595 117.202 24.61 115.115 24.61C111.963 24.61 108.937 25.8635 106.708 28.0925C104.479 30.3215 103.225 33.3478 103.225 36.5C103.225 39.6522 104.479 42.6785 106.708 44.9075C108.937 47.1365 111.963 48.39 115.115 48.39C117.202 48.39 119.253 47.8405 121.06 46.797C122.867 45.7536 124.369 44.2524 125.412 42.445C126.456 40.6376 127.005 38.587 127.005 36.5ZM75.9704 37.4184C76.0574 34.3019 74.8637 31.2741 72.6541 29.007C70.4445 26.7398 67.3954 25.4143 64.1835 25.3246C62.057 25.2652 59.9523 25.7501 58.0818 26.7303C56.2114 27.7105 54.6403 29.152 53.5271 30.9092C52.414 32.6664 51.7974 34.6782 51.7398 36.7416C51.6528 39.8581 52.8465 42.8859 55.0561 45.153C57.2657 47.4202 60.3148 48.7457 63.5267 48.8354C65.6532 48.8948 67.7579 48.4099 69.6284 47.4297C71.4988 46.4495 73.0699 45.008 74.1831 43.2508C75.2962 41.4936 75.9128 39.4818 75.9704 37.4184ZM183.874 50.7982C183.856 49.4819 183.468 48.1937 182.749 47.0635C182.03 45.9334 181.006 45.0007 179.779 44.3595C178.552 43.7184 177.166 43.3911 175.76 43.4107C173.637 43.4404 171.61 44.2595 170.128 45.6863C168.646 47.1131 167.828 49.0336 167.856 51.0218C167.874 52.3381 168.262 53.6263 168.981 54.7565C169.7 55.8866 170.725 56.8193 171.951 57.4605C173.178 58.1016 174.564 58.4289 175.97 58.4093C178.093 58.3796 180.121 57.5605 181.603 56.1337C183.084 54.7069 183.902 52.7864 183.874 50.7982Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape7&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.0305953125001 9.32554685349047)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.0064 0.0100006L9.3364 6.11826e-07C9.61064 -0.000292647 9.87453 0.104847 10.0721 0.293135C10.2697 0.481423 10.3861 0.738544 10.3964 1.01C11.3097 24.8167 12.6431 48.6333 14.3964 72.46C14.4564 73.2867 14.0697 73.7 13.2364 73.7L4.1864 73.7C2.9664 53.56 1.62973 33.49 0.1764 13.49C0.0364 11.5567 -0.0202667 7.06333 0.0064 0.0100006Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape8&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1631696428572 9.32765624999999)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M10.891 0L14.581 73.56L5.85095 73.67C5.70139 73.6731 5.55452 73.6294 5.43088 73.5452C5.30724 73.461 5.21287 73.3403 5.16095 73.2C4.86095 72.3733 4.66095 71.5033 4.56095 70.59C2.05429 47.6433 0.534286 24.6667 0.000952381 1.66C-0.0257143 0.566667 0.507619 0.02 1.60095 0.02Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape9&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.5362571970961 9.55219950584632)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.6165 8.41299C23.0565 14.743 19.7165 20.843 13.2865 21.823C10.7665 22.203 8.2998 21.7963 5.88646 20.603C1.4598 18.4097 -0.470205 14.2963 0.0964619 8.26299C2.85646 1.22966 7.66313 -1.31367 14.5165 0.632992C16.5565 1.21299 18.2265 2.11966 19.5265 3.35299C21.0465 4.79299 22.0765 6.47966 22.6165 8.41299Z&quot;&gt;&lt;/path&gt; &lt;circle id=&quot;shape10&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.0115625 10.18828125)&quot; r=&quot;11.89&quot; cx=&quot;11.89&quot; cy=&quot;11.89&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape11&quot; transform=&quot;matrix(0.0351425431068875 0.000981620111375468 -0.000981620111375468 0.0351425431068875 14.2130771675543 10.2015061448131)&quot; rx=&quot;12.12&quot; ry=&quot;11.76&quot; cx=&quot;12.12&quot; cy=&quot;11.76&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape12&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 20.1057469902912 10.4364122450525)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M16.9732 2.43205C21.3465 7.29205 21.5565 12.1821 17.6032 17.1021C4.5132 27.8821 -7.7468 7.16205 6.1132 0.862052C9.48653 -0.677948 13.1065 -0.154615 16.9732 2.43205Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape13&quot; transform=&quot;matrix(0.0351528231097021 -0.000490857902548076 0.000490857902548076 0.0351528231097021 18.2800569526222 10.8531762234766)&quot; rx=&quot;8.01&quot; ry=&quot;7.5&quot; cx=&quot;8.01&quot; cy=&quot;7.5&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape14&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.47390625 12.828515625)&quot; fill=&quot;rgb(93,52,26)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0 300.33C1.52 298.69 3.53 298.057 6.03 298.43C6.10297 298.443 6.17377 298.447 6.24 298.44C6.65333 298.413 6.88667 298.26 6.94 297.98C7 297.66 7.19333 297.493 7.52 297.48L10.29 297.39C10.4233 297.383 10.5567 297.367 10.69 297.34C11.0167 297.267 11.1733 297.127 11.16 296.92C11.1467 296.7 11.2467 296.563 11.46 296.51C12.1467 296.337 12.7433 295.997 13.25 295.49C13.49 295.257 13.58 294.973 13.52 294.64C13.1333 292.653 12.8767 290.647 12.75 288.62C12.69 287.79 12.27 287.35 11.7 286.83C11.4533 286.603 11.3933 286.337 11.52 286.03C11.8533 285.197 11.6767 284.573 10.99 284.16C10.7367 284 10.46 283.923 10.16 283.93L6.56 284.02C15.1 281.92 21.0833 280.04 24.51 278.38C27.5033 276.927 30.4033 275.357 33.21 273.67C33.319 273.603 33.3974 273.495 33.4282 273.371C33.4589 273.246 33.4397 273.115 33.3746 273.004C33.3096 272.894 33.2037 272.813 33.08 272.78C32.5067 272.62 31.9433 272.67 31.39 272.93C63.5767 260.003 88.4967 238.95 106.15 209.77C109.223 204.703 112.093 199 114.76 192.66C118.06 184.807 120.343 178.587 121.61 174C123.097 168.613 124.457 162.397 125.69 155.35C126.657 149.857 126.873 144.25 126.34 138.53C127.853 138.57 128.907 138.097 129.5 137.11C131.56 133.67 131.433 130.473 129.12 127.52C128.24 126.39 127.07 126.39 125.77 126.38C120.017 126.347 114.427 126.37 109 126.45C108.613 125.77 108.27 125.09 107.97 124.41C107.69 123.77 107.527 123.037 107.48 122.21C106.953 112.977 106.213 103.723 105.26 94.45C110.127 94.5633 114.617 94.5833 118.73 94.51C121.27 94.47 123.93 94.86 126 93.31C128.053 91.77 128.717 89.61 127.99 86.83C127.23 83.89 124.98 82.2967 121.24 82.05L120.9 72.32C124.973 70.3667 126.23 67.5767 124.67 63.95C123.697 61.6833 121.82 60.52 119.04 60.46C117.273 58.24 116.223 56.5633 115.89 55.43C113.43 47.1033 110.547 38.9133 107.24 30.86C106.947 30.1467 107 29.0333 107.4 27.52C109.087 27.4933 110.883 27.5267 112.79 27.62C115.45 27.7533 117.403 26.9667 118.65 25.26C121.02 22.01 120.02 17.98 116.55 16.23C115.597 15.75 114.193 15.5133 112.34 15.52C107.533 15.54 102.823 15.4767 98.21 15.33C97.6033 13.9433 96.9433 12.6033 96.23 11.31C94.38 7.96 93.99 4.82 92.56 1.46C92.4467 1.18667 92.5067 0.963333 92.74 0.79L93.19 0.46C93.4567 0.273333 93.4267 0.176667 93.1 0.17L55.31 0L131.2 0.2C131.371 0.200762 131.536 0.26037 131.671 0.369176C131.805 0.477981 131.9 0.629779 131.94 0.8C133.38 7.23333 134.593 14.0833 135.58 21.35C139.67 51.61 143.36 78.87 145.72 107.57C147.27 126.44 146.89 145.44 143.29 163.8C138.28 189.4 127.86 214.54 111.86 234.74C90.34 261.87 61.85 283.26 28.89 293.96C20.1567 296.793 10.5267 298.917 0 300.33Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape15&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.2758764491296 12.828515625)&quot; fill=&quot;rgb(152,83,54)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M231.61 0L269.4 0.17C269.726 0.176667 269.756 0.273333 269.49 0.46L269.04 0.79C268.806 0.963333 268.746 1.18667 268.86 1.46C270.29 4.82 270.68 7.96 272.53 11.31C273.243 12.6033 273.903 13.9433 274.51 15.33C268.76 17.07 269.07 27.78 275.82 27.53C278.38 27.43 281.006 27.4267 283.7 27.52C283.3 29.0333 283.246 30.1467 283.54 30.86C286.846 38.9133 289.73 47.1033 292.19 55.43C292.523 56.5633 293.573 58.24 295.34 60.46C290.98 60.76 286.806 61.0267 282.82 61.26C277.7 61.56 274.45 67.2 278.08 71.26C278.86 72.1333 280.413 72.6 282.74 72.66C287.386 72.7733 292.206 72.66 297.2 72.32L297.54 82.05C293.013 81.9567 288.443 81.9633 283.83 82.07C281.84 82.11 280.61 82.75 279.5 84.26C276.44 88.44 277.126 91.8367 281.56 94.45C282.513 103.723 283.253 112.977 283.78 122.21C283.826 123.037 283.99 123.77 284.27 124.41C284.57 125.09 284.913 125.77 285.3 126.45C282.193 127.497 280.633 129.463 280.62 132.35C280.613 134.79 281.763 136.753 284.07 138.24C281.93 156.593 277.493 173.123 270.76 187.83C261.606 207.817 247.22 225.063 227.6 239.57C218.546 246.263 208.406 252.023 197.18 256.85C191.52 259.28 187.21 264.45 191.61 270.42C195.03 275.03 202.58 274.56 207.69 272.93C208.243 272.67 208.806 272.62 209.38 272.78C209.503 272.813 209.609 272.894 209.674 273.004C209.739 273.115 209.758 273.246 209.728 273.371C209.697 273.495 209.619 273.603 209.51 273.67C206.703 275.357 203.803 276.927 200.81 278.38C197.383 280.04 191.4 281.92 182.86 284.02C165.386 287.427 148.786 288.113 133.06 286.08C116.433 283.94 99.2895 279.17 81.6295 271.77C75.1162 269.043 68.6828 266.14 62.3295 263.06C54.3762 259.2 46.8962 254.463 39.8895 248.85C40.5695 248.377 41.3595 247.947 42.2595 247.56C44.5695 246.55 46.3695 244.3 44.1695 241.99C29.1962 226.303 18.1928 209.247 11.1595 190.82C1.95285 166.687 -1.55715 141.62 0.629514 115.62C2.01618 99.0867 3.45618 82.5733 4.94951 66.08C5.49618 59.9533 6.20618 53.32 7.07951 46.18C8.95285 30.8733 10.7762 15.5733 12.5495 0.28ZM230.747 11.7302C228.758 9.7412 226.058 8.62261 223.245 8.62261C220.432 8.62261 217.731 9.7412 215.742 11.7302L213.89 13.5829C211.901 15.5719 210.782 18.2724 210.782 21.0853C210.782 23.8982 211.901 26.5987 213.89 28.5877L215.092 29.7898C217.081 31.7788 219.781 32.8974 222.594 32.8974C225.407 32.8974 228.108 31.7788 230.097 29.7898L231.949 27.9371C233.938 25.9481 235.057 23.2476 235.057 20.4347C235.057 17.6218 233.938 14.9213 231.949 12.9323ZM47.1595 186.78C39.7128 170.84 35.7195 154.833 35.1795 138.76C34.9528 131.94 35.0895 124.72 35.5895 117.1C37.1495 93.44 39.2662 67.4833 41.9395 39.23C42.3395 35.0167 42.6262 30.7267 42.7995 26.36C43.4195 10.9 25.2095 12.45 24.4195 25.69C23.0462 48.79 21.1195 72.2233 18.6395 95.99C17.6595 105.337 16.9995 114.63 16.6595 123.87C16.3328 132.65 16.6595 140.653 17.6395 147.88C19.5062 161.707 22.9728 175.147 28.0395 188.2C29.1795 191.153 30.6662 194.07 32.4995 196.95C35.2995 201.37 41.5395 202.72 45.3395 198.89C48.7328 195.483 49.3395 191.447 47.1595 186.78ZM87.1943 37.8021C86.8236 36.4743 85.902 35.3574 84.6342 34.6994C83.3663 34.0413 81.8534 33.8945 80.4311 34.2916C79.0088 34.6887 77.7908 35.598 77.0472 36.8177C76.3037 38.0374 76.094 39.4701 76.4647 40.7979C76.8355 42.1257 77.757 43.2426 79.0249 43.9006C80.2927 44.5587 81.8056 44.7055 83.2279 44.3084C84.6502 43.9113 85.8682 43.002 86.6118 41.7823C87.3554 40.5626 87.565 39.1299 87.1943 37.8021ZM242.9 63.3691C242.905 60.5116 242.14 57.7024 240.682 55.2252C239.224 52.7479 237.124 50.6888 234.594 49.2556C232.064 47.8225 229.192 47.0651 226.268 47.06C223.344 47.0549 220.469 47.8022 217.934 49.2266C215.399 50.6509 213.292 52.7027 211.826 55.1748C210.359 57.6469 209.585 60.4534 209.58 63.3109C209.575 66.1684 210.34 68.9776 211.797 71.4548C213.255 73.9321 215.355 75.9912 217.885 77.4244C220.415 78.8575 223.287 79.6149 226.211 79.62C229.135 79.6251 232.01 78.8778 234.545 77.4534C237.08 76.0291 239.187 73.9773 240.653 71.5052C242.12 69.0331 242.895 66.2266 242.9 63.3691ZM85.9041 71.8823C88.1531 72.912 90.7367 72.9736 93.0816 72.0534C95.4266 71.1333 97.3455 69.3049 98.4127 66.9739C99.1193 65.4306 99.4215 63.7348 99.2889 62.0574C99.1563 60.38 98.5935 58.7796 97.6572 57.4176C96.721 56.0556 95.4439 54.9794 93.9549 54.2977C91.7059 53.268 89.1223 53.2064 86.7774 54.1266C84.4325 55.0467 82.5135 56.8751 81.4463 59.2061C80.7398 60.7494 80.4375 62.4452 80.5701 64.1226C80.7028 65.8 81.2656 67.4004 82.2018 68.7624C83.1381 70.1244 84.4151 71.2006 85.9041 71.8823ZM60.6086 105.171C63.2448 106.638 66.3725 106.974 69.2978 106.105C72.223 105.236 74.7122 103.231 76.213 100.535C77.7138 97.8381 78.1063 94.6659 77.3035 91.7217C76.5007 88.7775 74.5666 86.2966 71.9304 84.8293C69.2942 83.362 66.1665 83.0257 63.2413 83.8948C60.316 84.7639 57.8268 86.7691 56.326 89.4655C54.8252 92.1619 54.4327 95.3341 55.2355 98.2783C56.0384 101.222 57.9724 103.703 60.6086 105.171ZM187.08 98.11C187.08 96.1959 186.318 94.3582 184.965 93.0047C183.611 91.6512 181.774 90.89 179.86 90.89C177.945 90.89 176.108 91.6512 174.754 93.0047C173.401 94.3582 172.64 96.1959 172.64 98.11C172.64 100.024 173.401 101.862 174.754 103.215C176.108 104.569 177.945 105.33 179.86 105.33C181.127 105.33 182.372 104.996 183.47 104.363C184.567 103.729 185.479 102.817 186.112 101.72C186.746 100.623 187.08 99.3773 187.08 98.11ZM234.564 99.0027C233.705 97.863 232.551 96.9774 231.217 96.4351C229.883 95.8929 228.416 95.7129 226.964 95.9133C225.513 96.1138 224.127 96.6877 222.947 97.5771C221.766 98.4665 220.833 99.6405 220.24 100.981C219.647 102.321 219.416 103.78 219.57 105.212C219.723 106.644 220.256 107.998 221.115 109.137C221.974 110.277 223.128 111.163 224.462 111.705C225.796 112.247 227.263 112.427 228.715 112.227C230.166 112.026 231.552 111.452 232.732 110.563C233.913 109.673 234.846 108.499 235.439 107.159C236.032 105.819 236.263 104.36 236.109 102.928C235.956 101.496 235.423 100.142 234.564 99.0027ZM47.9695 214.56C45.1695 220.83 50.0195 225.32 54.0495 229.45C57.6895 233.19 61.8995 236.09 66.6995 232.86C71.8895 229.38 72.0595 223.24 67.9795 218.66C64.2095 214.41 60.6395 209.6 54.3295 209.99C51.4095 210.17 49.1195 211.99 47.9695 214.56Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape16&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.8026079545455 12.838359375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M26.0114 0C24.238 15.2933 22.4147 30.5933 20.5414 45.9C19.668 53.04 18.958 59.6733 18.4114 65.8C16.918 82.2933 15.478 98.8067 14.0914 115.34C11.9047 141.34 15.4147 166.407 24.6214 190.54C31.6547 208.967 42.658 226.023 57.6314 241.71C59.8314 244.02 58.0314 246.27 55.7214 247.28C54.8214 247.667 54.0314 248.097 53.3514 248.57C51.9014 250.07 52.3314 253.14 52.3514 255.14C31.6214 235.93 17.0114 211.99 8.66137 185.13C2.48804 165.29 -0.385293 145.337 0.0413737 125.27C0.691374 94.91 5.82137 63.64 9.38137 32.5C9.99471 27.1467 10.7014 21.75 11.5014 16.31C12.3214 10.7767 13.5247 5.69667 15.1114 1.07C15.2107 0.778294 15.3987 0.524438 15.6494 0.343583C15.9001 0.162728 16.2013 0.0636261 16.5114 0.06Z&quot;&gt;&lt;/path&gt; &lt;rect id=&quot;shape17&quot; transform=&quot;matrix(0.0248592227760896 -0.0248592227760896 0.0248592227760896 0.0248592227760896 19.531681996495 13.569794617477)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; width=&quot;23.84&quot; height=&quot;22.92&quot; rx=&quot;10.61&quot; ry=&quot;10.61&quot;&gt;&lt;/rect&gt; &lt;path id=&quot;shape18&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.857255859375 13.3649990428515)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M30.6225 171.52C32.8025 176.187 32.1958 180.223 28.8025 183.63C25.0025 187.46 18.7625 186.11 15.9625 181.69C14.1292 178.81 12.6425 175.893 11.5025 172.94C6.43583 159.887 2.96917 146.447 1.1025 132.62C0.1225 125.393 -0.204167 117.39 0.1225 108.61C0.4625 99.37 1.1225 90.0767 2.1025 80.73C4.5825 56.9634 6.50917 33.53 7.8825 10.43C8.6725 -2.80997 26.8825 -4.35997 26.2625 11.1C26.0892 15.4667 25.8025 19.7567 25.4025 23.97C22.7292 52.2234 20.6125 78.18 19.0525 101.84C18.5525 109.46 18.4158 116.68 18.6425 123.5C19.1825 139.573 23.1758 155.58 30.6225 171.52Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape19&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.7841415488515 13.3674609375)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.0522 0C8.66553 0.146667 13.3755 0.21 18.1822 0.19C20.0355 0.183333 21.4389 0.42 22.3922 0.9C25.8622 2.65 26.8622 6.68 24.4922 9.93C23.2455 11.6367 21.2922 12.4233 18.6322 12.29C16.7255 12.1967 14.9289 12.1633 13.2422 12.19C10.5489 12.0967 7.9222 12.1 5.3622 12.2C-1.3878 12.45 -1.6978 1.74 4.0522 0Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape20&quot; transform=&quot;matrix(0.0338611839889802 -0.00945421244350544 0.00945421244350544 0.0338611839889802 14.9149266129752 14.0867380565676)&quot; rx=&quot;5.57&quot; ry=&quot;5.2&quot; cx=&quot;5.57&quot; cy=&quot;5.2&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape21&quot; transform=&quot;matrix(0.0351561964539828 6.13592003636124e-05 -6.13592003636124e-05 0.0351561964539828 19.6449060698586 14.4819473774511)&quot; rx=&quot;16.66&quot; ry=&quot;16.28&quot; cx=&quot;16.66&quot; cy=&quot;16.28&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape22&quot; transform=&quot;matrix(-0.0146348716029047 0.031965331958686 -0.031965331958686 -0.0146348716029047 15.8772166930746 14.8739620295146)&quot; rx=&quot;9.67&quot; ry=&quot;9.33&quot; cx=&quot;9.67&quot; cy=&quot;9.33&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape23&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.997793706651 14.9540625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M18.805 0C21.585 0.06 23.4616 1.22333 24.435 3.49C25.995 7.11667 24.7383 9.90667 20.665 11.86C15.6716 12.2 10.8516 12.3133 6.20498 12.2C3.87831 12.14 2.32498 11.6733 1.54498 10.8C-2.08502 6.74 1.16498 1.1 6.28498 0.8C10.2716 0.566667 14.445 0.3 18.805 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape24&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.0361349190606 15.7107890625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M19.9144 0.0653333C23.6544 0.312 25.9044 1.90533 26.6644 4.84533C27.3911 7.62533 26.7277 9.78533 24.6744 11.3253C22.6044 12.8753 19.9444 12.4853 17.4044 12.5253C13.2911 12.5987 8.80105 12.5787 3.93438 12.4653C-0.498949 9.852 -1.18562 6.45533 1.87438 2.27533C2.98438 0.765333 4.21438 0.125333 6.20438 0.0853333C10.8177 -0.0213333 15.3877 -0.028 19.9144 0.0653333Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape25&quot; transform=&quot;matrix(-0.0170977282180133 0.0307185547160906 -0.0307185547160906 -0.0170977282180133 15.1542587716268 16.0053675452257)&quot; rx=&quot;11.64&quot; ry=&quot;11.38&quot; cx=&quot;11.64&quot; cy=&quot;11.38&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;circle id=&quot;shape26&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.345234375 16.0238671875)&quot; r=&quot;7.22&quot; cx=&quot;7.22&quot; cy=&quot;7.22&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape27&quot; transform=&quot;matrix(0.0280770296501001 -0.0211575594076892 0.0211575594076892 0.0280770296501001 19.8774398273616 16.4371069616574)&quot; rx=&quot;8.42&quot; ry=&quot;8.13&quot; cx=&quot;8.42&quot; cy=&quot;8.13&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape28&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1414052368516 17.2710454963236)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.02 12.1647L3.45003 11.8747C1.14336 10.388 -0.00663785 8.42471 2.88184e-05 5.98471C0.0133622 3.09804 1.57336 1.13137 4.68003 0.0847059C10.1067 0.00470588 15.6967 -0.0186275 21.45 0.0147059C22.75 0.0247059 23.92 0.0247059 24.8 1.15471C27.1134 4.10804 27.24 7.30471 25.18 10.7447C24.5867 11.7314 23.5334 12.2047 22.02 12.1647Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape29&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.9485123620206 17.688515625)&quot; fill=&quot;rgb(124,69,45)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M94.2701 0L112.84 0.29C113.373 6.01 113.157 11.6167 112.19 17.11C110.957 24.1567 109.597 30.3733 108.11 35.76C106.843 40.3467 104.56 46.5667 101.26 54.42C98.5934 60.76 95.7234 66.4633 92.6501 71.53C74.9968 100.71 50.0768 121.763 17.8901 134.69C12.7801 136.32 5.23009 136.79 1.81009 132.18C-2.58991 126.21 1.72009 121.04 7.38009 118.61C18.6068 113.783 28.7468 108.023 37.8001 101.33C57.4201 86.8233 71.8068 69.5767 80.9601 49.59C87.6934 34.8833 92.1301 18.3533 94.2701 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape30&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9331058615201 20.210194296345)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.830544 4.59225C1.98054 2.02225 4.27054 0.202251 7.19054 0.0222511C13.5005 -0.367749 17.0705 4.44225 20.8405 8.69225C24.9205 13.2723 24.7505 19.4123 19.5605 22.8923C14.7605 26.1223 10.5505 23.2223 6.91054 19.4823C2.88054 15.3523 -1.96946 10.8623 0.830544 4.59225Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape31&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.6404577789765 21.5771484375)&quot; fill=&quot;rgb(124,69,45)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.07476 0C8.08142 5.61333 15.5614 10.35 23.5148 14.21C29.8681 17.29 36.3014 20.1933 42.8148 22.92C60.4748 30.32 77.6181 35.09 94.2448 37.23C109.971 39.2633 126.571 38.5767 144.045 35.17L147.645 35.08C147.945 35.0733 148.221 35.15 148.475 35.31C149.161 35.7233 149.338 36.3467 149.005 37.18C148.878 37.4867 148.938 37.7533 149.185 37.98C149.755 38.5 150.175 38.94 150.235 39.77C150.361 41.7967 150.618 43.8033 151.005 45.79C151.065 46.1233 150.975 46.4067 150.735 46.64C150.228 47.1467 149.631 47.4867 148.945 47.66C148.731 47.7133 148.631 47.85 148.645 48.07C148.658 48.2767 148.501 48.4167 148.175 48.49C148.041 48.5167 147.908 48.5333 147.775 48.54L145.005 48.63C144.678 48.6433 144.485 48.81 144.425 49.13C144.371 49.41 144.138 49.5633 143.725 49.59C143.659 49.5967 143.588 49.5933 143.515 49.58C141.015 49.2067 139.005 49.84 137.485 51.48C124.278 53.2267 112.368 53.5833 101.755 52.55C80.2748 50.4633 60.3014 44.84 41.8348 35.68C35.8281 32.7 28.6481 28.54 20.2948 23.2C14.0414 19.2067 7.30142 13.6633 0.0747565 6.57C0.0547565 4.57 -0.375243 1.5 1.07476 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape32&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.548046875 24.3846604970638)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M37.39 126.792L36.84 125.732C36.6867 125.445 36.61 125.139 36.61 124.812L36.29 50.1519C39.97 50.1319 42.74 50.0419 44.93 47.3519C46.0567 45.9652 46.4067 44.4152 45.98 42.7019C44.81 38.0219 40.08 37.5119 35.72 37.6019L35.91 26.2919C40.16 26.9019 44.77 27.8519 48.81 25.9619C52.26 24.3519 53.31 20.2319 50.85 17.2519C48.51 14.4319 45.36 14.2119 41.99 14.2719C35.7567 14.3852 29.3167 14.4052 22.67 14.3319C19.49 14.3019 16.81 15.9619 15.14 18.6319C15.2 16.6619 12.86 15.6819 11.44 14.7519C10.6133 14.2119 9.90667 13.5852 9.32 12.8719C6.57333 9.53188 3.78 6.23188 0.94 2.97188C0.46 2.41855 0.146667 1.62521 0 0.591879C17.1 3.24521 34.28 3.98188 51.54 2.80188C57.06 2.42188 62.3133 1.51855 67.3 0.0918792C68.18 -0.154787 68.3567 0.0952125 67.83 0.841879C58.7633 13.8352 53.49 29.3252 52.01 47.3119C50.37 67.3319 51 88.9819 56.8 107.652C58.81 114.142 62.13 120.072 65.01 126.212C65.0485 126.291 65.0589 126.382 65.0394 126.468C65.02 126.554 64.9718 126.631 64.9029 126.686C64.834 126.741 64.7483 126.772 64.66 126.772Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape33&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.486355851717 24.3923298330305)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.75477 0.373729C1.90143 1.40706 2.21477 2.2004 2.69477 2.75373C5.53477 6.01373 8.3281 9.31373 11.0748 12.6537C11.6614 13.3671 12.3681 13.9937 13.1948 14.5337C14.6148 15.4637 16.9548 16.4437 16.8948 18.4137L16.5848 19.0537C15.9714 19.3604 15.6748 19.8204 15.6948 20.4337C15.8148 23.3437 16.3448 26.1237 18.0248 28.6937C19.9714 31.6737 22.1714 34.5471 24.6248 37.3137C19.6548 39.6737 18.5548 46.9937 24.3448 49.3137C24.1981 53.2071 24.2048 57.1237 24.3648 61.0637C24.5581 65.7371 24.5748 69.6437 24.4148 72.7837C24.2014 77.0371 23.9914 81.3304 23.7848 85.6637C23.1248 99.8304 19.6748 113.244 13.4348 125.904C13.2814 126.21 13.0314 126.384 12.6848 126.424L11.5948 126.534L3.79477 126.534C3.66373 126.534 3.5364 126.49 3.43437 126.408C3.33234 126.325 3.26171 126.21 3.23447 126.082C3.20722 125.954 3.22499 125.82 3.28477 125.704C16.0848 100.784 18.1148 71.0737 14.6948 43.5737C12.8014 28.3737 7.92143 14.0371 0.0547669 0.563729C0.0152725 0.50031 -0.00361813 0.426609 0.000572506 0.352292C0.00476314 0.277975 0.0318434 0.20644 0.0782619 0.147067C0.12468 0.0876949 0.188315 0.0431997 0.26082 0.0194171C0.333326 -0.0043654 0.411387 -0.00634806 0.484767 0.0137292Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape34&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.0617214476865 24.8861307529877)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M21.2988 12.0278C16.7455 11.8878 12.1288 11.8545 7.44881 11.9278C4.74215 11.9678 2.94548 11.7312 2.05881 11.2178C0.238812 10.1645 -0.374521 8.0945 0.218812 5.00784L0.528812 4.36784C2.19881 1.69784 4.87881 0.0378364 8.05881 0.0678364C14.7055 0.14117 21.1455 0.12117 27.3788 0.00783636C30.7488 -0.0521636 33.8988 0.167836 36.2388 2.98784C38.6988 5.96784 37.6488 10.0878 34.1988 11.6978C30.1588 13.5878 25.5488 12.6378 21.2988 12.0278Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape35&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.038091694079 25.0621875000001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.890947 0C0.297614 3.08667 0.910947 5.15667 2.73095 6.21C3.61761 6.72333 5.41428 6.96 8.12095 6.92C12.8009 6.84667 17.4176 6.88 21.9709 7.02L21.7809 18.33L8.93095 18.26C6.47761 15.4933 4.27761 12.62 2.33095 9.64C0.650947 7.07 0.120947 4.29 0.000947368 1.38C-0.0190526 0.766667 0.277614 0.306667 0.890947 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape36&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.2047130847683 25.704140625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.19149 0L17.0415 0.07C21.4015 -0.02 26.1315 0.49 27.3015 5.17C27.7282 6.88333 27.3782 8.43333 26.2515 9.82C24.0615 12.51 21.2915 12.6 17.6115 12.62L3.91149 12C-1.87851 9.68 -0.778506 2.36 4.19149 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape37&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.893984375 26.126015625)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M12.75 0L26.45 0.62L26.77 75.28C26.77 75.6067 26.8467 75.9133 27 76.2L27.55 77.26L0 77.22L1.09 77.11C1.43667 77.07 1.68667 76.8967 1.84 76.59C8.08 63.93 11.53 50.5167 12.19 36.35C12.3967 32.0167 12.6067 27.7233 12.82 23.47C12.98 20.33 12.9633 16.4233 12.77 11.75C12.61 7.81 12.6033 3.89333 12.75 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape38&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.22640625 29.4324536132813)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M29.96 24.0302C30.7067 23.5835 30.1467 23.1702 28.28 22.7902C27.96 22.7235 27.6733 22.5835 27.42 22.3702C24.9333 20.2235 22.8967 18.7069 21.31 17.8202C12.91 13.1069 5.80667 7.21687 0 0.150208L30.09 0.000208333C30.4767 -0.00645833 30.7833 0.146875 31.01 0.460208C37.57 9.69354 45.7567 17.2435 55.57 23.1102C55.9433 23.3302 55.92 23.4969 55.5 23.6102C54.48 23.8769 53.4167 24.0135 52.31 24.0202C44.77 24.0669 37.32 24.0702 29.96 24.0302Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape39&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.2706541442871 29.4394921875)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M38.2747 0C35.2147 4.74667 31.2681 10.0433 26.4347 15.89C23.4547 19.49 20.7014 22.14 18.1747 23.84L0.754727 23.73C-0.17194 23.7233 -0.245273 23.4733 0.534727 22.98C9.87473 17.05 17.3747 9.52 24.9347 0.58C25.0571 0.432797 25.211 0.314351 25.3856 0.233119C25.5601 0.151886 25.7511 0.109846 25.9447 0.11Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape40&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.909609375 29.437734375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M65.9 0C71.7067 7.06667 78.81 12.9567 87.21 17.67C88.7967 18.5567 90.8333 20.0733 93.32 22.22C93.5733 22.4333 93.86 22.5733 94.18 22.64C96.0467 23.02 96.6067 23.4333 95.86 23.88L0 23.89C2.52667 22.19 5.28 19.54 8.26 15.94C13.0933 10.0933 17.04 4.79667 20.1 0.05Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape41&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.6264334548969 30.8390367406574)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M175.558 0.450733C176.245 0.450733 176.568 0.567399 176.528 0.800733C176.494 1.0303 176.388 1.24303 176.226 1.40826C176.065 1.5735 175.855 1.68291 175.628 1.72073C171.935 2.3474 168.581 2.65073 165.568 2.63073C163.998 2.62073 162.798 3.35073 161.188 3.18073C160.808 3.14073 160.445 3.20407 160.098 3.37073L158.488 4.16073C158.195 4.30073 157.958 4.50407 157.778 4.77073C157.045 5.85073 156.111 6.47073 154.978 6.63073C153.258 6.87073 151.491 6.99073 149.678 6.99073C111.858 6.8974 73.5681 6.84073 34.8081 6.82073C28.6781 6.82073 24.4281 9.63073 23.3181 15.9507L0.628115 15.8107C0.50059 15.8104 0.376138 15.7713 0.2713 15.6987C0.166463 15.626 0.0861025 15.5233 0.0409006 15.404C-0.00430136 15.2848 -0.0122487 15.1546 0.0181151 15.0307C2.16812 6.40073 10.0881 -0.0792673 19.0981 0.00073271C53.2181 0.314066 87.8014 0.380733 122.848 0.200733C140.421 0.114066 157.991 0.197399 175.558 0.450733Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape42&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.4462109375 30.8548828125)&quot; fill=&quot;rgb(152,83,54)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M152.24 0L253.08 0.15C253.047 2.17 252.56 3.72667 251.62 4.82C250.867 5.69333 249.93 6.13667 248.81 6.15C221.383 6.39 194.363 6.58667 167.75 6.74C167.283 6.74 167.03 6.97333 166.99 7.44C166.87 8.95333 167.113 10.3433 167.72 11.61C167.847 11.8833 167.89 12.1667 167.85 12.46L167.63 14.18C167.577 14.5867 167.74 14.86 168.12 15C168.573 15.1667 168.867 15.3533 169 15.56L0 15.5C1.11 9.18 5.36 6.37 11.49 6.37C50.25 6.39 88.54 6.44667 126.36 6.54C128.173 6.54 129.94 6.42 131.66 6.18C132.793 6.02 133.727 5.4 134.46 4.32C134.64 4.05333 134.877 3.85 135.17 3.71L136.78 2.92C137.127 2.75333 137.49 2.69 137.87 2.73C139.48 2.9 140.68 2.17 142.25 2.18C145.263 2.2 148.617 1.89667 152.31 1.27C152.537 1.23218 152.746 1.12277 152.908 0.957532C153.07 0.792295 153.175 0.579568 153.21 0.35C153.25 0.116667 152.927 -1.13687e-13 152.24 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape43&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 19.3159081135321 30.86015625)&quot; fill=&quot;rgb(124,69,45)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M86.1197 0C93.6331 3.14 98.2231 7.99667 99.8897 14.57C99.9181 14.684 99.9111 14.804 99.8698 14.914C99.8285 15.024 99.7547 15.1189 99.6583 15.186C99.5618 15.2532 99.4472 15.2894 99.3297 15.29L2.03972 15.41C1.90639 15.2033 1.61306 15.0167 1.15972 14.85C0.779725 14.71 0.616391 14.4367 0.669725 14.03L0.889725 12.31C0.929725 12.0167 0.886391 11.7333 0.759725 11.46C0.153058 10.1933 -0.0902752 8.80333 0.0297248 7.29C0.0697248 6.82333 0.323058 6.59 0.789725 6.59C27.4031 6.43667 54.4231 6.24 81.8497 6C82.9697 5.98667 83.9064 5.54333 84.6597 4.67C85.5997 3.57667 86.0864 2.02 86.1197 0Z&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt;&lt;div class=&quot;w-16 h-16&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;fill-[${rgbColor} w-16 h-16&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 36 36&quot;&gt; &lt;defs&gt;&lt;/defs&gt; &lt;path id=&quot;shape0&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 10.393984646722 3.24851063866497)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M384.119 800.308C389.392 800.401 395.079 800.381 401.179 800.248C405.299 800.161 408.469 800.568 410.689 801.468C415.949 803.598 420.779 810.198 420.289 816.268C419.669 823.858 412.349 829.318 404.999 829.328C277.499 829.355 146.952 829.355 13.3589 829.328C8.63888 829.328 4.09888 825.978 1.87888 822.058C-2.73112 813.888 1.52888 803.918 10.4389 801.028C11.9855 800.528 13.9555 800.285 16.3489 800.298C22.1289 800.338 27.6889 800.265 33.0289 800.078C33.1769 800.076 33.3188 800.017 33.4263 799.913C33.5337 799.809 33.5989 799.668 33.6089 799.518C33.7489 797.391 34.0889 795.351 34.6289 793.398C38.5755 779.138 46.7822 768.285 59.2489 760.838C67.2389 756.068 77.9989 753.418 87.8689 753.798C91.7089 753.938 95.6189 754.578 99.3589 753.338C121.612 745.945 138.126 732.518 148.899 713.058C160.649 691.848 162.149 664.098 156.689 640.298C150.949 615.338 135.539 594.358 113.659 581.418C104.759 576.151 97.1322 571.378 90.7789 567.098C79.8722 559.751 69.4389 550.391 59.4789 539.018C41.7922 518.825 28.7222 496.301 20.2689 471.448C13.2089 450.695 9.41555 429.945 8.88888 409.198C8.39555 389.938 9.51888 370.588 12.2589 351.148C15.7689 326.188 18.7489 301.968 22.2689 277.258C23.1955 270.798 23.9055 264.308 24.3989 257.788C25.2922 245.915 26.1489 234.441 26.9689 223.368C28.2189 206.548 28.2189 189.968 28.2289 172.948C28.229 172.665 28.1641 172.386 28.0392 172.133C27.9143 171.88 27.7328 171.659 27.5089 171.488C4.71888 154.278 -3.35112 123.728 10.2489 97.8679C21.8189 75.8479 44.3589 62.0579 69.5789 63.3579C72.9922 63.5379 76.3389 64.1179 79.6189 65.0979C79.7826 65.1468 79.9567 65.1513 80.1235 65.1109C80.2903 65.0705 80.4439 64.9867 80.5689 64.8679C95.3422 50.8279 113.322 44.9613 134.509 47.2679C134.656 47.2852 134.804 47.2536 134.932 47.1778C135.061 47.102 135.161 46.9862 135.219 46.8479C136.972 42.6213 139.372 38.5079 142.419 34.5079C153.299 20.2379 166.749 9.32792 184.089 3.97792C204.569 -2.34875 224.312 -1.12875 243.319 7.63792C258.599 14.6779 272.559 26.6579 280.469 41.6579C280.596 41.9046 280.792 41.9846 281.059 41.8979C289.839 38.9646 299.389 37.9446 309.709 38.8379C326.729 40.3079 342.309 50.4379 353.989 63.2879C354.516 63.8679 355.166 64.1746 355.939 64.2079C361.419 64.4546 366.656 65.5513 371.649 67.4979C392.199 75.5079 406.519 91.1379 411.669 112.968C413.189 119.421 413.456 125.841 412.469 132.228C409.882 148.975 401.956 162.205 388.689 171.918C387.729 172.628 387.729 173.468 387.719 174.528C387.586 191.895 387.899 207.108 388.659 220.168C389.549 235.238 390.999 253.908 393.189 270.758C396.622 297.205 400.169 324.231 403.829 351.838C404.689 358.351 405.536 366.615 406.369 376.628C407.042 384.655 407.406 391.321 407.459 396.628C407.679 420.268 404.476 443.035 397.849 464.928C386.419 502.718 363.929 536.538 333.029 561.268C324.009 568.498 312.959 575.088 302.869 581.488C297.502 584.888 292.979 588.131 289.299 591.218C265.139 611.508 255.039 640.758 256.429 672.398C258.039 709.018 277.959 738.488 312.639 751.718C317.389 753.528 321.449 754.508 326.659 754.038C338.269 753.008 349.089 755.608 359.129 762.058C371.639 770.088 381.589 784.038 383.299 799.558C383.352 800.045 383.626 800.295 384.119 800.308ZM34.9389 123.938C34.6255 130.038 36.5689 135.461 40.7689 140.208C42.9155 142.635 45.5089 143.855 48.5489 143.868C57.4489 143.895 67.6722 143.898 79.2189 143.878C80.8589 143.878 81.9889 142.308 82.5389 140.958C82.6855 140.585 82.6522 140.231 82.4389 139.898C80.5522 136.978 80.8189 134.321 83.2389 131.928C87.7189 127.508 91.8289 130.808 94.8789 134.678C97.7389 138.308 103.749 143.708 108.819 143.768C117.746 143.855 126.882 143.871 136.229 143.818C142.909 143.768 150.429 136.098 154.769 131.618C156.269 130.068 158.029 129.188 160.259 129.608C164.159 130.328 166.106 132.778 166.099 136.958C166.099 138.248 165.299 139.248 164.549 140.218C164.261 140.59 164.13 141.06 164.184 141.527C164.239 141.994 164.474 142.422 164.839 142.718C166.006 143.678 167.326 144.148 168.799 144.128C196.979 143.828 224.629 143.751 251.749 143.898C253.509 143.905 255.106 143.581 256.539 142.928C256.721 142.847 256.872 142.708 256.969 142.533C257.065 142.358 257.101 142.155 257.073 141.955C257.044 141.756 256.951 141.571 256.809 141.428C253.879 138.498 254.059 132.908 257.859 130.608C262.999 127.498 266.539 130.248 269.939 133.818C274.619 138.718 280.959 143.828 287.779 143.838C296.859 143.865 305.789 143.868 314.569 143.848C321.399 143.828 328.259 136.098 332.759 131.638C335.086 129.338 337.459 128.821 339.879 130.088C343.819 132.161 344.612 135.195 342.259 139.188C342.08 139.495 341.983 139.844 341.98 140.198C341.976 140.552 342.066 140.901 342.239 141.208C343.319 143.118 344.959 144.088 347.179 144.068C354.066 144.001 361.086 143.928 368.239 143.848C370.352 143.821 372.149 143.235 373.629 142.088C379.589 137.488 382.416 131.278 382.109 123.458C381.969 109.928 371.589 99.2079 359.169 95.4779C358.953 95.4151 358.724 95.4137 358.51 95.4738C358.296 95.534 358.105 95.6534 357.959 95.8179C355.212 98.9446 351.706 100.435 347.439 100.288C341.069 100.068 338.009 96.4579 335.789 91.1479C332.202 82.5946 326.232 76.3279 317.879 72.3479C307.626 67.4546 296.802 67.5779 285.409 72.7179C282.069 74.2179 279.519 77.4279 276.309 79.4679C269.159 84.0279 261.339 79.8879 260.179 71.8979C258.606 61.0979 253.279 51.6813 244.199 43.6479C217.109 19.6679 175.399 28.6579 160.839 61.6279C158.766 66.3279 157.699 70.8946 157.639 75.3279C157.559 80.8679 155.339 86.2279 149.929 88.1679C144.262 90.2146 139.372 89.0513 135.259 84.6779C133.749 83.0679 132.859 81.0279 131.499 79.3379C131.286 79.0646 131.012 78.8779 130.679 78.7779C128.472 78.1113 126.346 77.8213 124.299 77.9079C113.326 78.3813 104.429 83.1579 97.6089 92.2379C94.2189 96.7479 94.0089 102.468 90.0089 106.458C86.8589 109.588 81.6689 110.618 77.7089 108.488C73.0155 105.968 70.9422 101.938 71.4889 96.3979C71.5755 95.5313 71.1922 95.0446 70.3389 94.9379C59.7789 93.5446 50.8422 96.5046 43.5289 103.818C38.0555 109.291 35.1922 115.998 34.9389 123.938ZM70.3189 172.868L60.5489 172.868C60.0022 172.868 59.7255 173.141 59.7189 173.688C59.4855 194.395 58.5655 214.878 56.9589 235.138C56.6655 238.818 56.5355 242.431 56.5689 245.978C56.5689 246.378 56.7689 246.578 57.1689 246.578L287.389 246.598L306.739 246.558L315.789 246.558C316.622 246.558 317.009 246.145 316.949 245.318C315.196 221.491 313.862 197.675 312.949 173.868C312.939 173.596 312.822 173.339 312.625 173.151C312.427 172.963 312.163 172.858 311.889 172.858L302.559 172.868L102.799 172.818L85.9489 172.788ZM345.659 172.918L336.369 172.938C335.276 172.938 334.742 173.485 334.769 174.578C335.302 197.585 336.822 220.561 339.329 243.508C339.429 244.421 339.629 245.291 339.929 246.118C339.981 246.258 340.075 246.379 340.199 246.463C340.322 246.547 340.469 246.591 340.619 246.588L349.349 246.478L358.959 246.388C359.056 246.388 359.152 246.362 359.234 246.311C359.317 246.259 359.384 246.186 359.427 246.099C359.47 246.012 359.488 245.915 359.479 245.818C358.169 231.648 357.729 217.678 356.929 203.398C356.396 193.905 356.209 183.971 356.369 173.598C356.371 173.466 356.337 173.335 356.273 173.221C356.208 173.106 356.114 173.011 356.001 172.945C355.888 172.88 355.759 172.846 355.629 172.848ZM285.139 272.498L66.0789 272.778L56.5789 272.838C56.2688 272.842 55.9676 272.941 55.7169 273.122C55.4662 273.302 55.2782 273.556 55.1789 273.848C53.5922 278.475 52.3889 283.555 51.5689 289.088C50.7689 294.528 50.0622 299.925 49.4489 305.278C45.8889 336.418 40.7589 367.688 40.1089 398.048C39.6822 418.115 42.5555 438.068 48.7289 457.908C57.0789 484.768 71.6889 508.708 92.4189 527.918C99.6455 535.011 106.386 540.555 112.639 544.548C120.992 549.888 128.172 554.048 134.179 557.028C152.646 566.188 172.619 571.811 194.099 573.898C204.712 574.931 216.622 574.575 229.829 572.828C240.356 571.415 249.986 569.291 258.719 566.458C291.679 555.758 320.169 534.368 341.689 507.238C357.689 487.038 368.109 461.898 373.119 436.298C376.719 417.938 377.099 398.938 375.549 380.068C373.189 351.368 369.499 324.108 365.409 293.848C364.422 286.581 363.209 279.731 361.769 273.298C361.729 273.128 361.634 272.976 361.499 272.867C361.365 272.758 361.199 272.699 361.029 272.698ZM175.049 601.798L173.779 601.438C173.706 601.418 173.627 601.42 173.555 601.444C173.482 601.467 173.419 601.512 173.372 601.571C173.326 601.631 173.299 601.702 173.295 601.776C173.29 601.851 173.309 601.925 173.349 601.988C181.216 615.461 186.096 629.798 187.989 644.998C191.409 672.498 189.379 702.208 176.579 727.128C176.519 727.245 176.501 727.378 176.529 727.506C176.556 727.635 176.626 727.75 176.728 727.832C176.831 727.914 176.958 727.959 177.089 727.958L184.889 727.958L212.439 727.998L239.709 727.978C239.797 727.978 239.883 727.947 239.952 727.892C240.021 727.837 240.069 727.76 240.088 727.674C240.108 727.588 240.097 727.497 240.059 727.418C237.179 721.278 233.859 715.348 231.849 708.858C226.049 690.188 225.419 668.538 227.059 648.518C228.539 630.531 233.812 615.041 242.879 602.048C243.406 601.301 243.229 601.051 242.349 601.298C237.362 602.725 232.109 603.628 226.589 604.008C209.329 605.188 192.149 604.451 175.049 601.798ZM222.789 744.938L176.989 744.988L164.659 745.098C164.465 745.098 164.274 745.14 164.1 745.221C163.925 745.302 163.771 745.421 163.649 745.568C156.089 754.508 148.589 762.038 139.249 767.968C138.469 768.461 138.542 768.711 139.469 768.718L156.889 768.828L252.749 768.818C260.109 768.858 267.559 768.855 275.099 768.808C276.206 768.801 277.269 768.665 278.289 768.398C278.709 768.285 278.732 768.118 278.359 767.898C268.546 762.031 260.359 754.481 253.799 745.248C253.572 744.935 253.266 744.781 252.879 744.788ZM86.8189 800.748L255.819 800.808L353.109 800.688C353.226 800.687 353.341 800.651 353.437 800.584C353.534 800.517 353.608 800.422 353.649 800.312C353.69 800.202 353.697 800.082 353.669 799.968C352.002 793.395 347.412 788.538 339.899 785.398L239.059 785.248C221.492 784.995 203.922 784.911 186.349 784.998C151.302 785.178 116.719 785.111 82.5989 784.798C73.5889 784.718 65.6689 791.198 63.5189 799.828C63.4885 799.952 63.4965 800.082 63.5417 800.201C63.5869 800.32 63.6672 800.423 63.7721 800.496C63.8769 800.568 64.0014 800.608 64.1289 800.608Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape1&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6223046875 4.3066710451255)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.17 93.3591L341.7 94.8091C341.347 94.9025 341.043 95.0758 340.79 95.3291C334.81 101.209 327.56 101.079 319.06 100.739C316.15 100.619 313.98 99.6891 312.72 96.9491C310.21 91.4791 305.03 84.9891 298.07 88.5091C296.217 89.4491 294.677 90.6225 293.45 92.0291C288.01 98.2791 282.29 103.559 274.1 105.299C270.267 106.112 266.1 106.416 261.6 106.209C253.04 105.819 244.67 101.199 239.15 94.8491C232.37 87.0391 226.88 84.2491 219.24 92.9691C214.89 97.9391 209.89 101.049 202.97 101.219C196.37 101.379 189.917 101.426 183.61 101.359C182.93 101.352 182.43 100.989 182.11 100.269C182.01 100.04 181.975 99.7876 182.008 99.5391C182.042 99.2906 182.143 99.0554 182.3 98.8591C183.04 97.9325 183.813 97.0725 184.62 96.2791C187.09 93.8491 185.64 89.9291 183.51 87.8291C180.65 85.0091 175.91 85.9891 173.39 88.9391C172.23 90.2925 171.17 91.6391 170.21 92.9791C163.5 102.299 152.67 101.929 142.47 100.679C134.9 99.7591 131.64 94.3891 126.62 89.6591C123.633 86.8525 120.593 86.8391 117.5 89.6191C112.63 93.9791 108.24 99.7591 102.47 102.719C88.07 110.129 72.61 106.679 62.57 94.0391C58.62 89.0591 52.95 85.2191 47.21 90.7591C44.54 93.3491 43.94 96.9991 40.53 99.0891C36.59 101.509 29.55 101.139 24.26 101.029C18.64 100.899 13.25 100.999 9.85 97.1991C7.82 94.9191 4 93.8291 2.11 96.9691C1.02333 98.7691 0.446667 98.6225 0.38 96.5291C0.366667 95.9891 0.24 95.0925 0 93.8391C0.253333 85.8991 3.11667 79.1925 8.59 73.7191C15.9033 66.4058 24.84 63.4458 35.4 64.8391C36.2533 64.9458 36.6367 65.4325 36.55 66.2991C36.0033 71.8391 38.0767 75.8691 42.77 78.3891C46.73 80.5191 51.92 79.4891 55.07 76.3591C59.07 72.3691 59.28 66.6491 62.67 62.1391C69.49 53.0591 78.3867 48.2825 89.36 47.8091C91.4067 47.7225 93.5333 48.0125 95.74 48.6791C96.0733 48.7791 96.3467 48.9658 96.56 49.2391C97.92 50.9291 98.81 52.9691 100.32 54.5791C104.433 58.9525 109.323 60.1158 114.99 58.0691C120.4 56.1291 122.62 50.7691 122.7 45.2291C122.76 40.7958 123.827 36.2291 125.9 31.5291C140.46 -1.44087 182.17 -10.4309 209.26 13.5491C218.34 21.5825 223.667 30.9991 225.24 41.7991C226.4 49.7891 234.22 53.9291 241.37 49.3691C244.58 47.3291 247.13 44.1191 250.47 42.6191C261.863 37.4791 272.687 37.3558 282.94 42.2491C291.293 46.2291 297.263 52.4958 300.85 61.0491C303.07 66.3591 306.13 69.9691 312.5 70.1891C316.767 70.3358 320.273 68.8458 323.02 65.7191C323.166 65.5546 323.357 65.4352 323.571 65.3751C323.785 65.3149 324.014 65.3163 324.23 65.3791C336.65 69.1091 347.03 79.8291 347.17 93.3591Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape2&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6211575655465 7.33540715628013)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.203 7.20842C347.509 15.0284 344.683 21.2384 338.723 25.8384C337.243 26.9851 335.446 27.5718 333.333 27.5984C326.179 27.6784 319.159 27.7518 312.273 27.8184C310.053 27.8384 308.413 26.8684 307.333 24.9584C307.159 24.651 307.07 24.3028 307.074 23.9484C307.077 23.594 307.173 23.2458 307.353 22.9384C309.706 18.9451 308.913 15.9118 304.973 13.8384C302.553 12.5718 300.179 13.0884 297.853 15.3884C293.353 19.8484 286.493 27.5784 279.663 27.5984C270.883 27.6184 261.953 27.6151 252.873 27.5884C246.053 27.5784 239.713 22.4684 235.033 17.5684C231.633 13.9984 228.093 11.2484 222.953 14.3584C219.153 16.6584 218.973 22.2484 221.903 25.1784C222.045 25.3214 222.137 25.5067 222.166 25.706C222.195 25.9053 222.159 26.108 222.062 26.2834C221.966 26.4588 221.815 26.5975 221.633 26.6784C220.199 27.3318 218.603 27.6551 216.843 27.6484C189.723 27.5018 162.073 27.5784 133.893 27.8784C132.419 27.8984 131.099 27.4284 129.933 26.4684C129.567 26.1723 129.332 25.7446 129.278 25.2775C129.224 24.8105 129.355 24.3403 129.643 23.9684C130.393 22.9984 131.193 21.9984 131.193 20.7084C131.199 16.5284 129.253 14.0784 125.353 13.3584C123.123 12.9384 121.363 13.8184 119.863 15.3684C115.523 19.8484 108.003 27.5184 101.323 27.5684C91.976 27.6218 82.8393 27.6051 73.9126 27.5184C68.8426 27.4584 62.8326 22.0584 59.9726 18.4284C56.9226 14.5584 52.8126 11.2584 48.3326 15.6784C45.9126 18.0718 45.646 20.7284 47.5326 23.6484C47.746 23.9818 47.7793 24.3351 47.6326 24.7084C47.0826 26.0584 45.9526 27.6284 44.3126 27.6284C32.766 27.6484 22.5426 27.6451 13.6426 27.6184C10.6026 27.6051 8.0093 26.3851 5.86263 23.9584C1.66263 19.2118 -0.280704 13.7884 0.0326292 7.68842C0.272629 8.94175 0.399296 9.83842 0.412629 10.3784C0.479296 12.4718 1.05596 12.6184 2.14263 10.8184C4.03263 7.67842 7.85263 8.76842 9.88263 11.0484C13.2826 14.8484 18.6726 14.7484 24.2926 14.8784C29.5826 14.9884 36.6226 15.3584 40.5626 12.9384C43.9726 10.8484 44.5726 7.19842 47.2426 4.60842C52.9826 -0.931581 58.6526 2.90842 62.6026 7.88842C72.6426 20.5284 88.1026 23.9784 102.503 16.5684C108.273 13.6084 112.663 7.82842 117.533 3.46842C120.626 0.688419 123.666 0.701752 126.653 3.50842C131.673 8.23842 134.933 13.6084 142.503 14.5284C152.703 15.7784 163.533 16.1484 170.243 6.82842C171.203 5.48842 172.263 4.14175 173.423 2.78842C175.943 -0.161581 180.683 -1.14158 183.543 1.67842C185.673 3.77842 187.123 7.69842 184.653 10.1284C183.846 10.9218 183.073 11.7818 182.333 12.7084C182.175 12.9047 182.074 13.1399 182.041 13.3884C182.007 13.6369 182.043 13.8894 182.143 14.1184C182.463 14.8384 182.963 15.2018 183.643 15.2084C189.949 15.2751 196.403 15.2284 203.003 15.0684C209.923 14.8984 214.923 11.7884 219.273 6.81842C226.913 -1.90158 232.403 0.888419 239.183 8.69842C244.703 15.0484 253.073 19.6684 261.633 20.0584C266.133 20.2651 270.299 19.9618 274.133 19.1484C282.323 17.4084 288.043 12.1284 293.483 5.87842C294.709 4.47175 296.249 3.29842 298.103 2.35842C305.063 -1.16158 310.243 5.32842 312.753 10.7984C314.013 13.5384 316.183 14.4684 319.093 14.5884C327.593 14.9284 334.843 15.0584 340.823 9.17842C341.076 8.92509 341.379 8.75175 341.733 8.65842Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape3&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.7941352600339 9.3230859375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M17.6779 0C16.5513 11.84 15.9213 19.36 15.7879 22.56C15.3079 33.9733 14.6346 46.28 13.7679 59.48C13.6013 62.04 13.1046 63.7467 12.2779 64.6C8.55793 68.45 -0.30207 67.53 0.00793038 61.06C1.34793 33.3133 2.02793 12.9867 2.04793 0.08Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape4&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9413128810975 9.32414062500001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M201.657 0.05C201.63 7.10333 201.687 11.5967 201.827 13.53C203.28 33.53 204.617 53.6 205.837 73.74L186.487 73.78L193.557 73.61C193.714 73.6076 193.867 73.5609 193.998 73.4752C194.129 73.3896 194.234 73.2685 194.299 73.126C194.364 72.9835 194.388 72.8254 194.367 72.67C193.367 64.75 192.894 56.7733 192.947 48.74C196.9 43.82 196.69 38.93 192.317 34.07C191.537 32.47 191.137 31.2867 191.117 30.52C190.984 25.7933 191.01 21.2667 191.197 16.94C191.213 16.5684 191.128 16.1993 190.951 15.872C190.773 15.5446 190.51 15.2711 190.189 15.0807C189.868 14.8902 189.501 14.7897 189.127 14.79L153.317 14.9C152.777 12.9667 151.747 11.28 150.227 9.84C148.927 8.60667 147.257 7.7 145.217 7.12C138.364 5.17333 133.557 7.71667 130.797 14.75C116.39 14.8967 101.944 14.9467 87.4571 14.9C61.1271 14.81 34.7871 15.13 8.5371 15.06C6.00377 15.0533 4.15377 14.7633 2.9871 14.19C0.773767 13.11 -0.209566 11.2233 0.0371003 8.53C0.150434 7.29667 0.770434 4.45333 1.8971 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape5&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.5460546875 9.32519283839548)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M3.69 73.6301L0 0.0700704L9.97 7.03745e-05C10.1004 -0.00175254 10.2289 0.031869 10.3421 0.0974247C10.4553 0.16298 10.5492 0.258107 10.6139 0.372872C10.6786 0.487637 10.7118 0.617903 10.71 0.75007C10.55 11.1234 10.7367 21.0567 11.27 30.5501C12.07 44.8301 12.51 58.8001 13.82 72.9701C13.8293 73.0668 13.8114 73.1643 13.7681 73.2514C13.7249 73.3384 13.6581 73.4116 13.5754 73.4627C13.4926 73.5137 13.3972 73.5405 13.3 73.5401Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape6&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.3825550063776 9.3230859375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M13.7551 0.08C13.7351 12.9867 13.0551 33.3133 11.7151 61.06C11.4051 67.53 20.2651 68.45 23.9851 64.6C24.8118 63.7467 25.3084 62.04 25.4751 59.48C26.3418 46.28 27.0151 33.9733 27.4951 22.56C27.6284 19.36 28.2584 11.84 29.3851 0L46.2351 0.03C45.1084 4.48333 44.4884 7.32667 44.3751 8.56C44.1284 11.2533 45.1118 13.14 47.3251 14.22C48.4918 14.7933 50.3418 15.0833 52.8751 15.09C79.1251 15.16 105.465 14.84 131.795 14.93C146.282 14.9767 160.728 14.9267 175.135 14.78C174.568 20.8133 176.498 24.9267 180.925 27.12C183.338 28.3133 185.805 28.72 188.325 28.34C194.755 27.36 198.095 21.26 197.655 14.93L233.465 14.82C233.839 14.8197 234.206 14.9202 234.527 15.1107C234.848 15.3011 235.111 15.5746 235.289 15.902C235.466 16.2293 235.551 16.5984 235.535 16.97C235.348 21.2967 235.322 25.8233 235.455 30.55C235.475 31.3167 235.875 32.5 236.655 34.1C232.788 31.5133 229.168 30.99 225.795 32.53C211.935 38.83 224.195 59.55 237.285 48.77C237.232 56.8033 237.705 64.78 238.705 72.7C238.726 72.8554 238.702 73.0135 238.637 73.156C238.572 73.2985 238.467 73.4196 238.336 73.5052C238.205 73.5909 238.052 73.6376 237.895 73.64L230.825 73.81L0.605102 73.79C0.205102 73.79 0.00510204 73.59 0.00510204 73.19C-0.0282313 69.6433 0.101769 66.03 0.395102 62.35C2.00177 42.09 2.92177 21.6067 3.1551 0.9C3.16177 0.353333 3.43844 0.08 3.9851 0.08ZM127.005 36.5C127.005 34.413 126.456 32.3624 125.412 30.555C124.369 28.7476 122.867 27.2464 121.06 26.203C119.253 25.1595 117.202 24.61 115.115 24.61C111.963 24.61 108.937 25.8635 106.708 28.0925C104.479 30.3215 103.225 33.3478 103.225 36.5C103.225 39.6522 104.479 42.6785 106.708 44.9075C108.937 47.1365 111.963 48.39 115.115 48.39C117.202 48.39 119.253 47.8405 121.06 46.797C122.867 45.7536 124.369 44.2524 125.412 42.445C126.456 40.6376 127.005 38.587 127.005 36.5ZM75.9704 37.4184C76.0574 34.3019 74.8637 31.2741 72.6541 29.007C70.4445 26.7398 67.3954 25.4143 64.1835 25.3246C62.057 25.2652 59.9523 25.7501 58.0818 26.7303C56.2114 27.7105 54.6403 29.152 53.5271 30.9092C52.414 32.6664 51.7974 34.6782 51.7398 36.7416C51.6528 39.8581 52.8465 42.8859 55.0561 45.153C57.2657 47.4202 60.3148 48.7457 63.5267 48.8354C65.6532 48.8948 67.7579 48.4099 69.6284 47.4297C71.4988 46.4495 73.0699 45.008 74.1831 43.2508C75.2962 41.4936 75.9128 39.4818 75.9704 37.4184ZM183.874 50.7982C183.856 49.4819 183.468 48.1937 182.749 47.0635C182.03 45.9334 181.006 45.0007 179.779 44.3595C178.552 43.7184 177.166 43.3911 175.76 43.4107C173.637 43.4404 171.61 44.2595 170.128 45.6863C168.646 47.1131 167.828 49.0336 167.856 51.0218C167.874 52.3381 168.262 53.6263 168.981 54.7565C169.7 55.8866 170.725 56.8193 171.951 57.4605C173.178 58.1016 174.564 58.4289 175.97 58.4093C178.093 58.3796 180.121 57.5605 181.603 56.1337C183.084 54.7069 183.902 52.7864 183.874 50.7982Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape7&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.0305953125001 9.32554685349047)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.0064 0.0100006L9.3364 6.11826e-07C9.61064 -0.000292647 9.87453 0.104847 10.0721 0.293135C10.2697 0.481423 10.3861 0.738544 10.3964 1.01C11.3097 24.8167 12.6431 48.6333 14.3964 72.46C14.4564 73.2867 14.0697 73.7 13.2364 73.7L4.1864 73.7C2.9664 53.56 1.62973 33.49 0.1764 13.49C0.0364 11.5567 -0.0202667 7.06333 0.0064 0.0100006Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape8&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1631696428572 9.32765624999999)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M10.891 0L14.581 73.56L5.85095 73.67C5.70139 73.6731 5.55452 73.6294 5.43088 73.5452C5.30724 73.461 5.21287 73.3403 5.16095 73.2C4.86095 72.3733 4.66095 71.5033 4.56095 70.59C2.05429 47.6433 0.534286 24.6667 0.000952381 1.66C-0.0257143 0.566667 0.507619 0.02 1.60095 0.02Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape9&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.5362571970961 9.55219950584632)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.6165 8.41299C23.0565 14.743 19.7165 20.843 13.2865 21.823C10.7665 22.203 8.2998 21.7963 5.88646 20.603C1.4598 18.4097 -0.470205 14.2963 0.0964619 8.26299C2.85646 1.22966 7.66313 -1.31367 14.5165 0.632992C16.5565 1.21299 18.2265 2.11966 19.5265 3.35299C21.0465 4.79299 22.0765 6.47966 22.6165 8.41299Z&quot;&gt;&lt;/path&gt; &lt;circle id=&quot;shape10&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.0115625 10.18828125)&quot; r=&quot;11.89&quot; cx=&quot;11.89&quot; cy=&quot;11.89&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape11&quot; transform=&quot;matrix(0.0351425431068875 0.000981620111375468 -0.000981620111375468 0.0351425431068875 14.2130771675543 10.2015061448131)&quot; rx=&quot;12.12&quot; ry=&quot;11.76&quot; cx=&quot;12.12&quot; cy=&quot;11.76&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape12&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 20.1057469902912 10.4364122450525)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M16.9732 2.43205C21.3465 7.29205 21.5565 12.1821 17.6032 17.1021C4.5132 27.8821 -7.7468 7.16205 6.1132 0.862052C9.48653 -0.677948 13.1065 -0.154615 16.9732 2.43205Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape13&quot; transform=&quot;matrix(0.0351528231097021 -0.000490857902548076 0.000490857902548076 0.0351528231097021 18.2800569526222 10.8531762234766)&quot; rx=&quot;8.01&quot; ry=&quot;7.5&quot; cx=&quot;8.01&quot; cy=&quot;7.5&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape14&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.47390625 12.828515625)&quot; fill=&quot;rgb(74,39,39)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0 300.33C1.52 298.69 3.53 298.057 6.03 298.43C6.10297 298.443 6.17377 298.447 6.24 298.44C6.65333 298.413 6.88667 298.26 6.94 297.98C7 297.66 7.19333 297.493 7.52 297.48L10.29 297.39C10.4233 297.383 10.5567 297.367 10.69 297.34C11.0167 297.267 11.1733 297.127 11.16 296.92C11.1467 296.7 11.2467 296.563 11.46 296.51C12.1467 296.337 12.7433 295.997 13.25 295.49C13.49 295.257 13.58 294.973 13.52 294.64C13.1333 292.653 12.8767 290.647 12.75 288.62C12.69 287.79 12.27 287.35 11.7 286.83C11.4533 286.603 11.3933 286.337 11.52 286.03C11.8533 285.197 11.6767 284.573 10.99 284.16C10.7367 284 10.46 283.923 10.16 283.93L6.56 284.02C15.1 281.92 21.0833 280.04 24.51 278.38C27.5033 276.927 30.4033 275.357 33.21 273.67C33.319 273.603 33.3974 273.495 33.4282 273.371C33.4589 273.246 33.4397 273.115 33.3746 273.004C33.3096 272.894 33.2037 272.813 33.08 272.78C32.5067 272.62 31.9433 272.67 31.39 272.93C63.5767 260.003 88.4967 238.95 106.15 209.77C109.223 204.703 112.093 199 114.76 192.66C118.06 184.807 120.343 178.587 121.61 174C123.097 168.613 124.457 162.397 125.69 155.35C126.657 149.857 126.873 144.25 126.34 138.53C127.853 138.57 128.907 138.097 129.5 137.11C131.56 133.67 131.433 130.473 129.12 127.52C128.24 126.39 127.07 126.39 125.77 126.38C120.017 126.347 114.427 126.37 109 126.45C108.613 125.77 108.27 125.09 107.97 124.41C107.69 123.77 107.527 123.037 107.48 122.21C106.953 112.977 106.213 103.723 105.26 94.45C110.127 94.5633 114.617 94.5833 118.73 94.51C121.27 94.47 123.93 94.86 126 93.31C128.053 91.77 128.717 89.61 127.99 86.83C127.23 83.89 124.98 82.2967 121.24 82.05L120.9 72.32C124.973 70.3667 126.23 67.5767 124.67 63.95C123.697 61.6833 121.82 60.52 119.04 60.46C117.273 58.24 116.223 56.5633 115.89 55.43C113.43 47.1033 110.547 38.9133 107.24 30.86C106.947 30.1467 107 29.0333 107.4 27.52C109.087 27.4933 110.883 27.5267 112.79 27.62C115.45 27.7533 117.403 26.9667 118.65 25.26C121.02 22.01 120.02 17.98 116.55 16.23C115.597 15.75 114.193 15.5133 112.34 15.52C107.533 15.54 102.823 15.4767 98.21 15.33C97.6033 13.9433 96.9433 12.6033 96.23 11.31C94.38 7.96 93.99 4.82 92.56 1.46C92.4467 1.18667 92.5067 0.963333 92.74 0.79L93.19 0.46C93.4567 0.273333 93.4267 0.176667 93.1 0.17L55.31 0L131.2 0.2C131.371 0.200762 131.536 0.26037 131.671 0.369176C131.805 0.477981 131.9 0.629779 131.94 0.8C133.38 7.23333 134.593 14.0833 135.58 21.35C139.67 51.61 143.36 78.87 145.72 107.57C147.27 126.44 146.89 145.44 143.29 163.8C138.28 189.4 127.86 214.54 111.86 234.74C90.34 261.87 61.85 283.26 28.89 293.96C20.1567 296.793 10.5267 298.917 0 300.33Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape15&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.2758764491296 12.828515625)&quot; fill=&quot;rgb(124,69,45)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M231.61 0L269.4 0.17C269.726 0.176667 269.756 0.273333 269.49 0.46L269.04 0.79C268.806 0.963333 268.746 1.18667 268.86 1.46C270.29 4.82 270.68 7.96 272.53 11.31C273.243 12.6033 273.903 13.9433 274.51 15.33C268.76 17.07 269.07 27.78 275.82 27.53C278.38 27.43 281.006 27.4267 283.7 27.52C283.3 29.0333 283.246 30.1467 283.54 30.86C286.846 38.9133 289.73 47.1033 292.19 55.43C292.523 56.5633 293.573 58.24 295.34 60.46C290.98 60.76 286.806 61.0267 282.82 61.26C277.7 61.56 274.45 67.2 278.08 71.26C278.86 72.1333 280.413 72.6 282.74 72.66C287.386 72.7733 292.206 72.66 297.2 72.32L297.54 82.05C293.013 81.9567 288.443 81.9633 283.83 82.07C281.84 82.11 280.61 82.75 279.5 84.26C276.44 88.44 277.126 91.8367 281.56 94.45C282.513 103.723 283.253 112.977 283.78 122.21C283.826 123.037 283.99 123.77 284.27 124.41C284.57 125.09 284.913 125.77 285.3 126.45C282.193 127.497 280.633 129.463 280.62 132.35C280.613 134.79 281.763 136.753 284.07 138.24C281.93 156.593 277.493 173.123 270.76 187.83C261.606 207.817 247.22 225.063 227.6 239.57C218.546 246.263 208.406 252.023 197.18 256.85C191.52 259.28 187.21 264.45 191.61 270.42C195.03 275.03 202.58 274.56 207.69 272.93C208.243 272.67 208.806 272.62 209.38 272.78C209.503 272.813 209.609 272.894 209.674 273.004C209.739 273.115 209.758 273.246 209.728 273.371C209.697 273.495 209.619 273.603 209.51 273.67C206.703 275.357 203.803 276.927 200.81 278.38C197.383 280.04 191.4 281.92 182.86 284.02C165.386 287.427 148.786 288.113 133.06 286.08C116.433 283.94 99.2895 279.17 81.6295 271.77C75.1162 269.043 68.6828 266.14 62.3295 263.06C54.3762 259.2 46.8962 254.463 39.8895 248.85C40.5695 248.377 41.3595 247.947 42.2595 247.56C44.5695 246.55 46.3695 244.3 44.1695 241.99C29.1962 226.303 18.1928 209.247 11.1595 190.82C1.95285 166.687 -1.55715 141.62 0.629514 115.62C2.01618 99.0867 3.45618 82.5733 4.94951 66.08C5.49618 59.9533 6.20618 53.32 7.07951 46.18C8.95285 30.8733 10.7762 15.5733 12.5495 0.28ZM230.747 11.7302C228.758 9.7412 226.058 8.62261 223.245 8.62261C220.432 8.62261 217.731 9.7412 215.742 11.7302L213.89 13.5829C211.901 15.5719 210.782 18.2724 210.782 21.0853C210.782 23.8982 211.901 26.5987 213.89 28.5877L215.092 29.7898C217.081 31.7788 219.781 32.8974 222.594 32.8974C225.407 32.8974 228.108 31.7788 230.097 29.7898L231.949 27.9371C233.938 25.9481 235.057 23.2476 235.057 20.4347C235.057 17.6218 233.938 14.9213 231.949 12.9323ZM47.1595 186.78C39.7128 170.84 35.7195 154.833 35.1795 138.76C34.9528 131.94 35.0895 124.72 35.5895 117.1C37.1495 93.44 39.2662 67.4833 41.9395 39.23C42.3395 35.0167 42.6262 30.7267 42.7995 26.36C43.4195 10.9 25.2095 12.45 24.4195 25.69C23.0462 48.79 21.1195 72.2233 18.6395 95.99C17.6595 105.337 16.9995 114.63 16.6595 123.87C16.3328 132.65 16.6595 140.653 17.6395 147.88C19.5062 161.707 22.9728 175.147 28.0395 188.2C29.1795 191.153 30.6662 194.07 32.4995 196.95C35.2995 201.37 41.5395 202.72 45.3395 198.89C48.7328 195.483 49.3395 191.447 47.1595 186.78ZM87.1943 37.8021C86.8236 36.4743 85.902 35.3574 84.6342 34.6994C83.3663 34.0413 81.8534 33.8945 80.4311 34.2916C79.0088 34.6887 77.7908 35.598 77.0472 36.8177C76.3037 38.0374 76.094 39.4701 76.4647 40.7979C76.8355 42.1257 77.757 43.2426 79.0249 43.9006C80.2927 44.5587 81.8056 44.7055 83.2279 44.3084C84.6502 43.9113 85.8682 43.002 86.6118 41.7823C87.3554 40.5626 87.565 39.1299 87.1943 37.8021ZM242.9 63.3691C242.905 60.5116 242.14 57.7024 240.682 55.2252C239.224 52.7479 237.124 50.6888 234.594 49.2556C232.064 47.8225 229.192 47.0651 226.268 47.06C223.344 47.0549 220.469 47.8022 217.934 49.2266C215.399 50.6509 213.292 52.7027 211.826 55.1748C210.359 57.6469 209.585 60.4534 209.58 63.3109C209.575 66.1684 210.34 68.9776 211.797 71.4548C213.255 73.9321 215.355 75.9912 217.885 77.4244C220.415 78.8575 223.287 79.6149 226.211 79.62C229.135 79.6251 232.01 78.8778 234.545 77.4534C237.08 76.0291 239.187 73.9773 240.653 71.5052C242.12 69.0331 242.895 66.2266 242.9 63.3691ZM85.9041 71.8823C88.1531 72.912 90.7367 72.9736 93.0816 72.0534C95.4266 71.1333 97.3455 69.3049 98.4127 66.9739C99.1193 65.4306 99.4215 63.7348 99.2889 62.0574C99.1563 60.38 98.5935 58.7796 97.6572 57.4176C96.721 56.0556 95.4439 54.9794 93.9549 54.2977C91.7059 53.268 89.1223 53.2064 86.7774 54.1266C84.4325 55.0467 82.5135 56.8751 81.4463 59.2061C80.7398 60.7494 80.4375 62.4452 80.5701 64.1226C80.7028 65.8 81.2656 67.4004 82.2018 68.7624C83.1381 70.1244 84.4151 71.2006 85.9041 71.8823ZM60.6086 105.171C63.2448 106.638 66.3725 106.974 69.2978 106.105C72.223 105.236 74.7122 103.231 76.213 100.535C77.7138 97.8381 78.1063 94.6659 77.3035 91.7217C76.5007 88.7775 74.5666 86.2966 71.9304 84.8293C69.2942 83.362 66.1665 83.0257 63.2413 83.8948C60.316 84.7639 57.8268 86.7691 56.326 89.4655C54.8252 92.1619 54.4327 95.3341 55.2355 98.2783C56.0384 101.222 57.9724 103.703 60.6086 105.171ZM187.08 98.11C187.08 96.1959 186.318 94.3582 184.965 93.0047C183.611 91.6512 181.774 90.89 179.86 90.89C177.945 90.89 176.108 91.6512 174.754 93.0047C173.401 94.3582 172.64 96.1959 172.64 98.11C172.64 100.024 173.401 101.862 174.754 103.215C176.108 104.569 177.945 105.33 179.86 105.33C181.127 105.33 182.372 104.996 183.47 104.363C184.567 103.729 185.479 102.817 186.112 101.72C186.746 100.623 187.08 99.3773 187.08 98.11ZM234.564 99.0027C233.705 97.863 232.551 96.9774 231.217 96.4351C229.883 95.8929 228.416 95.7129 226.964 95.9133C225.513 96.1138 224.127 96.6877 222.947 97.5771C221.766 98.4665 220.833 99.6405 220.24 100.981C219.647 102.321 219.416 103.78 219.57 105.212C219.723 106.644 220.256 107.998 221.115 109.137C221.974 110.277 223.128 111.163 224.462 111.705C225.796 112.247 227.263 112.427 228.715 112.227C230.166 112.026 231.552 111.452 232.732 110.563C233.913 109.673 234.846 108.499 235.439 107.159C236.032 105.819 236.263 104.36 236.109 102.928C235.956 101.496 235.423 100.142 234.564 99.0027ZM47.9695 214.56C45.1695 220.83 50.0195 225.32 54.0495 229.45C57.6895 233.19 61.8995 236.09 66.6995 232.86C71.8895 229.38 72.0595 223.24 67.9795 218.66C64.2095 214.41 60.6395 209.6 54.3295 209.99C51.4095 210.17 49.1195 211.99 47.9695 214.56Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape16&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.8026079545455 12.838359375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M26.0114 0C24.238 15.2933 22.4147 30.5933 20.5414 45.9C19.668 53.04 18.958 59.6733 18.4114 65.8C16.918 82.2933 15.478 98.8067 14.0914 115.34C11.9047 141.34 15.4147 166.407 24.6214 190.54C31.6547 208.967 42.658 226.023 57.6314 241.71C59.8314 244.02 58.0314 246.27 55.7214 247.28C54.8214 247.667 54.0314 248.097 53.3514 248.57C51.9014 250.07 52.3314 253.14 52.3514 255.14C31.6214 235.93 17.0114 211.99 8.66137 185.13C2.48804 165.29 -0.385293 145.337 0.0413737 125.27C0.691374 94.91 5.82137 63.64 9.38137 32.5C9.99471 27.1467 10.7014 21.75 11.5014 16.31C12.3214 10.7767 13.5247 5.69667 15.1114 1.07C15.2107 0.778294 15.3987 0.524438 15.6494 0.343583C15.9001 0.162728 16.2013 0.0636261 16.5114 0.06Z&quot;&gt;&lt;/path&gt; &lt;rect id=&quot;shape17&quot; transform=&quot;matrix(0.0248592227760896 -0.0248592227760896 0.0248592227760896 0.0248592227760896 19.531681996495 13.569794617477)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; width=&quot;23.84&quot; height=&quot;22.92&quot; rx=&quot;10.61&quot; ry=&quot;10.61&quot;&gt;&lt;/rect&gt; &lt;path id=&quot;shape18&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.857255859375 13.3649990428515)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M30.6225 171.52C32.8025 176.187 32.1958 180.223 28.8025 183.63C25.0025 187.46 18.7625 186.11 15.9625 181.69C14.1292 178.81 12.6425 175.893 11.5025 172.94C6.43583 159.887 2.96917 146.447 1.1025 132.62C0.1225 125.393 -0.204167 117.39 0.1225 108.61C0.4625 99.37 1.1225 90.0767 2.1025 80.73C4.5825 56.9634 6.50917 33.53 7.8825 10.43C8.6725 -2.80997 26.8825 -4.35997 26.2625 11.1C26.0892 15.4667 25.8025 19.7567 25.4025 23.97C22.7292 52.2234 20.6125 78.18 19.0525 101.84C18.5525 109.46 18.4158 116.68 18.6425 123.5C19.1825 139.573 23.1758 155.58 30.6225 171.52Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape19&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.7841415488515 13.3674609375)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.0522 0C8.66553 0.146667 13.3755 0.21 18.1822 0.19C20.0355 0.183333 21.4389 0.42 22.3922 0.9C25.8622 2.65 26.8622 6.68 24.4922 9.93C23.2455 11.6367 21.2922 12.4233 18.6322 12.29C16.7255 12.1967 14.9289 12.1633 13.2422 12.19C10.5489 12.0967 7.9222 12.1 5.3622 12.2C-1.3878 12.45 -1.6978 1.74 4.0522 0Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape20&quot; transform=&quot;matrix(0.0338611839889802 -0.00945421244350544 0.00945421244350544 0.0338611839889802 14.9149266129752 14.0867380565676)&quot; rx=&quot;5.57&quot; ry=&quot;5.2&quot; cx=&quot;5.57&quot; cy=&quot;5.2&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape21&quot; transform=&quot;matrix(0.0351561964539828 6.13592003636124e-05 -6.13592003636124e-05 0.0351561964539828 19.6449060698586 14.4819473774511)&quot; rx=&quot;16.66&quot; ry=&quot;16.28&quot; cx=&quot;16.66&quot; cy=&quot;16.28&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape22&quot; transform=&quot;matrix(-0.0146348716029047 0.031965331958686 -0.031965331958686 -0.0146348716029047 15.8772166930746 14.8739620295146)&quot; rx=&quot;9.67&quot; ry=&quot;9.33&quot; cx=&quot;9.67&quot; cy=&quot;9.33&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape23&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.997793706651 14.9540625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M18.805 0C21.585 0.06 23.4616 1.22333 24.435 3.49C25.995 7.11667 24.7383 9.90667 20.665 11.86C15.6716 12.2 10.8516 12.3133 6.20498 12.2C3.87831 12.14 2.32498 11.6733 1.54498 10.8C-2.08502 6.74 1.16498 1.1 6.28498 0.8C10.2716 0.566667 14.445 0.3 18.805 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape24&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.0361349190606 15.7107890625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M19.9144 0.0653333C23.6544 0.312 25.9044 1.90533 26.6644 4.84533C27.3911 7.62533 26.7277 9.78533 24.6744 11.3253C22.6044 12.8753 19.9444 12.4853 17.4044 12.5253C13.2911 12.5987 8.80105 12.5787 3.93438 12.4653C-0.498949 9.852 -1.18562 6.45533 1.87438 2.27533C2.98438 0.765333 4.21438 0.125333 6.20438 0.0853333C10.8177 -0.0213333 15.3877 -0.028 19.9144 0.0653333Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape25&quot; transform=&quot;matrix(-0.0170977282180133 0.0307185547160906 -0.0307185547160906 -0.0170977282180133 15.1542587716268 16.0053675452257)&quot; rx=&quot;11.64&quot; ry=&quot;11.38&quot; cx=&quot;11.64&quot; cy=&quot;11.38&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;circle id=&quot;shape26&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.345234375 16.0238671875)&quot; r=&quot;7.22&quot; cx=&quot;7.22&quot; cy=&quot;7.22&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape27&quot; transform=&quot;matrix(0.0280770296501001 -0.0211575594076892 0.0211575594076892 0.0280770296501001 19.8774398273616 16.4371069616574)&quot; rx=&quot;8.42&quot; ry=&quot;8.13&quot; cx=&quot;8.42&quot; cy=&quot;8.13&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape28&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1414052368516 17.2710454963236)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.02 12.1647L3.45003 11.8747C1.14336 10.388 -0.00663785 8.42471 2.88184e-05 5.98471C0.0133622 3.09804 1.57336 1.13137 4.68003 0.0847059C10.1067 0.00470588 15.6967 -0.0186275 21.45 0.0147059C22.75 0.0247059 23.92 0.0247059 24.8 1.15471C27.1134 4.10804 27.24 7.30471 25.18 10.7447C24.5867 11.7314 23.5334 12.2047 22.02 12.1647Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape29&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.9485123620206 17.688515625)&quot; fill=&quot;rgb(93,52,26)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M94.2701 0L112.84 0.29C113.373 6.01 113.157 11.6167 112.19 17.11C110.957 24.1567 109.597 30.3733 108.11 35.76C106.843 40.3467 104.56 46.5667 101.26 54.42C98.5934 60.76 95.7234 66.4633 92.6501 71.53C74.9968 100.71 50.0768 121.763 17.8901 134.69C12.7801 136.32 5.23009 136.79 1.81009 132.18C-2.58991 126.21 1.72009 121.04 7.38009 118.61C18.6068 113.783 28.7468 108.023 37.8001 101.33C57.4201 86.8233 71.8068 69.5767 80.9601 49.59C87.6934 34.8833 92.1301 18.3533 94.2701 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape30&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9331058615201 20.210194296345)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.830544 4.59225C1.98054 2.02225 4.27054 0.202251 7.19054 0.0222511C13.5005 -0.367749 17.0705 4.44225 20.8405 8.69225C24.9205 13.2723 24.7505 19.4123 19.5605 22.8923C14.7605 26.1223 10.5505 23.2223 6.91054 19.4823C2.88054 15.3523 -1.96946 10.8623 0.830544 4.59225Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape31&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.6404577789765 21.5771484375)&quot; fill=&quot;rgb(93,52,26)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.07476 0C8.08142 5.61333 15.5614 10.35 23.5148 14.21C29.8681 17.29 36.3014 20.1933 42.8148 22.92C60.4748 30.32 77.6181 35.09 94.2448 37.23C109.971 39.2633 126.571 38.5767 144.045 35.17L147.645 35.08C147.945 35.0733 148.221 35.15 148.475 35.31C149.161 35.7233 149.338 36.3467 149.005 37.18C148.878 37.4867 148.938 37.7533 149.185 37.98C149.755 38.5 150.175 38.94 150.235 39.77C150.361 41.7967 150.618 43.8033 151.005 45.79C151.065 46.1233 150.975 46.4067 150.735 46.64C150.228 47.1467 149.631 47.4867 148.945 47.66C148.731 47.7133 148.631 47.85 148.645 48.07C148.658 48.2767 148.501 48.4167 148.175 48.49C148.041 48.5167 147.908 48.5333 147.775 48.54L145.005 48.63C144.678 48.6433 144.485 48.81 144.425 49.13C144.371 49.41 144.138 49.5633 143.725 49.59C143.659 49.5967 143.588 49.5933 143.515 49.58C141.015 49.2067 139.005 49.84 137.485 51.48C124.278 53.2267 112.368 53.5833 101.755 52.55C80.2748 50.4633 60.3014 44.84 41.8348 35.68C35.8281 32.7 28.6481 28.54 20.2948 23.2C14.0414 19.2067 7.30142 13.6633 0.0747565 6.57C0.0547565 4.57 -0.375243 1.5 1.07476 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape32&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.548046875 24.3846604970638)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M37.39 126.792L36.84 125.732C36.6867 125.445 36.61 125.139 36.61 124.812L36.29 50.1519C39.97 50.1319 42.74 50.0419 44.93 47.3519C46.0567 45.9652 46.4067 44.4152 45.98 42.7019C44.81 38.0219 40.08 37.5119 35.72 37.6019L35.91 26.2919C40.16 26.9019 44.77 27.8519 48.81 25.9619C52.26 24.3519 53.31 20.2319 50.85 17.2519C48.51 14.4319 45.36 14.2119 41.99 14.2719C35.7567 14.3852 29.3167 14.4052 22.67 14.3319C19.49 14.3019 16.81 15.9619 15.14 18.6319C15.2 16.6619 12.86 15.6819 11.44 14.7519C10.6133 14.2119 9.90667 13.5852 9.32 12.8719C6.57333 9.53188 3.78 6.23188 0.94 2.97188C0.46 2.41855 0.146667 1.62521 0 0.591879C17.1 3.24521 34.28 3.98188 51.54 2.80188C57.06 2.42188 62.3133 1.51855 67.3 0.0918792C68.18 -0.154787 68.3567 0.0952125 67.83 0.841879C58.7633 13.8352 53.49 29.3252 52.01 47.3119C50.37 67.3319 51 88.9819 56.8 107.652C58.81 114.142 62.13 120.072 65.01 126.212C65.0485 126.291 65.0589 126.382 65.0394 126.468C65.02 126.554 64.9718 126.631 64.9029 126.686C64.834 126.741 64.7483 126.772 64.66 126.772Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape33&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.486355851717 24.3923298330305)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.75477 0.373729C1.90143 1.40706 2.21477 2.2004 2.69477 2.75373C5.53477 6.01373 8.3281 9.31373 11.0748 12.6537C11.6614 13.3671 12.3681 13.9937 13.1948 14.5337C14.6148 15.4637 16.9548 16.4437 16.8948 18.4137L16.5848 19.0537C15.9714 19.3604 15.6748 19.8204 15.6948 20.4337C15.8148 23.3437 16.3448 26.1237 18.0248 28.6937C19.9714 31.6737 22.1714 34.5471 24.6248 37.3137C19.6548 39.6737 18.5548 46.9937 24.3448 49.3137C24.1981 53.2071 24.2048 57.1237 24.3648 61.0637C24.5581 65.7371 24.5748 69.6437 24.4148 72.7837C24.2014 77.0371 23.9914 81.3304 23.7848 85.6637C23.1248 99.8304 19.6748 113.244 13.4348 125.904C13.2814 126.21 13.0314 126.384 12.6848 126.424L11.5948 126.534L3.79477 126.534C3.66373 126.534 3.5364 126.49 3.43437 126.408C3.33234 126.325 3.26171 126.21 3.23447 126.082C3.20722 125.954 3.22499 125.82 3.28477 125.704C16.0848 100.784 18.1148 71.0737 14.6948 43.5737C12.8014 28.3737 7.92143 14.0371 0.0547669 0.563729C0.0152725 0.50031 -0.00361813 0.426609 0.000572506 0.352292C0.00476314 0.277975 0.0318434 0.20644 0.0782619 0.147067C0.12468 0.0876949 0.188315 0.0431997 0.26082 0.0194171C0.333326 -0.0043654 0.411387 -0.00634806 0.484767 0.0137292Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape34&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.0617214476865 24.8861307529877)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M21.2988 12.0278C16.7455 11.8878 12.1288 11.8545 7.44881 11.9278C4.74215 11.9678 2.94548 11.7312 2.05881 11.2178C0.238812 10.1645 -0.374521 8.0945 0.218812 5.00784L0.528812 4.36784C2.19881 1.69784 4.87881 0.0378364 8.05881 0.0678364C14.7055 0.14117 21.1455 0.12117 27.3788 0.00783636C30.7488 -0.0521636 33.8988 0.167836 36.2388 2.98784C38.6988 5.96784 37.6488 10.0878 34.1988 11.6978C30.1588 13.5878 25.5488 12.6378 21.2988 12.0278Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape35&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.038091694079 25.0621875000001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.890947 0C0.297614 3.08667 0.910947 5.15667 2.73095 6.21C3.61761 6.72333 5.41428 6.96 8.12095 6.92C12.8009 6.84667 17.4176 6.88 21.9709 7.02L21.7809 18.33L8.93095 18.26C6.47761 15.4933 4.27761 12.62 2.33095 9.64C0.650947 7.07 0.120947 4.29 0.000947368 1.38C-0.0190526 0.766667 0.277614 0.306667 0.890947 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape36&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.2047130847683 25.704140625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.19149 0L17.0415 0.07C21.4015 -0.02 26.1315 0.49 27.3015 5.17C27.7282 6.88333 27.3782 8.43333 26.2515 9.82C24.0615 12.51 21.2915 12.6 17.6115 12.62L3.91149 12C-1.87851 9.68 -0.778506 2.36 4.19149 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape37&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.893984375 26.126015625)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M12.75 0L26.45 0.62L26.77 75.28C26.77 75.6067 26.8467 75.9133 27 76.2L27.55 77.26L0 77.22L1.09 77.11C1.43667 77.07 1.68667 76.8967 1.84 76.59C8.08 63.93 11.53 50.5167 12.19 36.35C12.3967 32.0167 12.6067 27.7233 12.82 23.47C12.98 20.33 12.9633 16.4233 12.77 11.75C12.61 7.81 12.6033 3.89333 12.75 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape38&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.22640625 29.4324536132813)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M29.96 24.0302C30.7067 23.5835 30.1467 23.1702 28.28 22.7902C27.96 22.7235 27.6733 22.5835 27.42 22.3702C24.9333 20.2235 22.8967 18.7069 21.31 17.8202C12.91 13.1069 5.80667 7.21687 0 0.150208L30.09 0.000208333C30.4767 -0.00645833 30.7833 0.146875 31.01 0.460208C37.57 9.69354 45.7567 17.2435 55.57 23.1102C55.9433 23.3302 55.92 23.4969 55.5 23.6102C54.48 23.8769 53.4167 24.0135 52.31 24.0202C44.77 24.0669 37.32 24.0702 29.96 24.0302Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape39&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.2706541442871 29.4394921875)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M38.2747 0C35.2147 4.74667 31.2681 10.0433 26.4347 15.89C23.4547 19.49 20.7014 22.14 18.1747 23.84L0.754727 23.73C-0.17194 23.7233 -0.245273 23.4733 0.534727 22.98C9.87473 17.05 17.3747 9.52 24.9347 0.58C25.0571 0.432797 25.211 0.314351 25.3856 0.233119C25.5601 0.151886 25.7511 0.109846 25.9447 0.11Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape40&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.909609375 29.437734375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M65.9 0C71.7067 7.06667 78.81 12.9567 87.21 17.67C88.7967 18.5567 90.8333 20.0733 93.32 22.22C93.5733 22.4333 93.86 22.5733 94.18 22.64C96.0467 23.02 96.6067 23.4333 95.86 23.88L0 23.89C2.52667 22.19 5.28 19.54 8.26 15.94C13.0933 10.0933 17.04 4.79667 20.1 0.05Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape41&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.6264334548969 30.8390367406574)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M175.558 0.450733C176.245 0.450733 176.568 0.567399 176.528 0.800733C176.494 1.0303 176.388 1.24303 176.226 1.40826C176.065 1.5735 175.855 1.68291 175.628 1.72073C171.935 2.3474 168.581 2.65073 165.568 2.63073C163.998 2.62073 162.798 3.35073 161.188 3.18073C160.808 3.14073 160.445 3.20407 160.098 3.37073L158.488 4.16073C158.195 4.30073 157.958 4.50407 157.778 4.77073C157.045 5.85073 156.111 6.47073 154.978 6.63073C153.258 6.87073 151.491 6.99073 149.678 6.99073C111.858 6.8974 73.5681 6.84073 34.8081 6.82073C28.6781 6.82073 24.4281 9.63073 23.3181 15.9507L0.628115 15.8107C0.50059 15.8104 0.376138 15.7713 0.2713 15.6987C0.166463 15.626 0.0861025 15.5233 0.0409006 15.404C-0.00430136 15.2848 -0.0122487 15.1546 0.0181151 15.0307C2.16812 6.40073 10.0881 -0.0792673 19.0981 0.00073271C53.2181 0.314066 87.8014 0.380733 122.848 0.200733C140.421 0.114066 157.991 0.197399 175.558 0.450733Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape42&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.4462109375 30.8548828125)&quot; fill=&quot;rgb(124,69,45)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M152.24 0L253.08 0.15C253.047 2.17 252.56 3.72667 251.62 4.82C250.867 5.69333 249.93 6.13667 248.81 6.15C221.383 6.39 194.363 6.58667 167.75 6.74C167.283 6.74 167.03 6.97333 166.99 7.44C166.87 8.95333 167.113 10.3433 167.72 11.61C167.847 11.8833 167.89 12.1667 167.85 12.46L167.63 14.18C167.577 14.5867 167.74 14.86 168.12 15C168.573 15.1667 168.867 15.3533 169 15.56L0 15.5C1.11 9.18 5.36 6.37 11.49 6.37C50.25 6.39 88.54 6.44667 126.36 6.54C128.173 6.54 129.94 6.42 131.66 6.18C132.793 6.02 133.727 5.4 134.46 4.32C134.64 4.05333 134.877 3.85 135.17 3.71L136.78 2.92C137.127 2.75333 137.49 2.69 137.87 2.73C139.48 2.9 140.68 2.17 142.25 2.18C145.263 2.2 148.617 1.89667 152.31 1.27C152.537 1.23218 152.746 1.12277 152.908 0.957532C153.07 0.792295 153.175 0.579568 153.21 0.35C153.25 0.116667 152.927 -1.13687e-13 152.24 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape43&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 19.3159081135321 30.86015625)&quot; fill=&quot;rgb(93,52,26)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M86.1197 0C93.6331 3.14 98.2231 7.99667 99.8897 14.57C99.9181 14.684 99.9111 14.804 99.8698 14.914C99.8285 15.024 99.7547 15.1189 99.6583 15.186C99.5618 15.2532 99.4472 15.2894 99.3297 15.29L2.03972 15.41C1.90639 15.2033 1.61306 15.0167 1.15972 14.85C0.779725 14.71 0.616391 14.4367 0.669725 14.03L0.889725 12.31C0.929725 12.0167 0.886391 11.7333 0.759725 11.46C0.153058 10.1933 -0.0902752 8.80333 0.0297248 7.29C0.0697248 6.82333 0.323058 6.59 0.789725 6.59C27.4031 6.43667 54.4231 6.24 81.8497 6C82.9697 5.98667 83.9064 5.54333 84.6597 4.67C85.5997 3.57667 86.0864 2.02 86.1197 0Z&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt;&lt;div class=&quot;w-16 h-16&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;fill-[${rgbColor} w-16 h-16&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 36 36&quot;&gt; &lt;defs&gt;&lt;/defs&gt; &lt;path id=&quot;shape0&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 10.393984646722 3.24851063866497)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M384.119 800.308C389.392 800.401 395.079 800.381 401.179 800.248C405.299 800.161 408.469 800.568 410.689 801.468C415.949 803.598 420.779 810.198 420.289 816.268C419.669 823.858 412.349 829.318 404.999 829.328C277.499 829.355 146.952 829.355 13.3589 829.328C8.63888 829.328 4.09888 825.978 1.87888 822.058C-2.73112 813.888 1.52888 803.918 10.4389 801.028C11.9855 800.528 13.9555 800.285 16.3489 800.298C22.1289 800.338 27.6889 800.265 33.0289 800.078C33.1769 800.076 33.3188 800.017 33.4263 799.913C33.5337 799.809 33.5989 799.668 33.6089 799.518C33.7489 797.391 34.0889 795.351 34.6289 793.398C38.5755 779.138 46.7822 768.285 59.2489 760.838C67.2389 756.068 77.9989 753.418 87.8689 753.798C91.7089 753.938 95.6189 754.578 99.3589 753.338C121.612 745.945 138.126 732.518 148.899 713.058C160.649 691.848 162.149 664.098 156.689 640.298C150.949 615.338 135.539 594.358 113.659 581.418C104.759 576.151 97.1322 571.378 90.7789 567.098C79.8722 559.751 69.4389 550.391 59.4789 539.018C41.7922 518.825 28.7222 496.301 20.2689 471.448C13.2089 450.695 9.41555 429.945 8.88888 409.198C8.39555 389.938 9.51888 370.588 12.2589 351.148C15.7689 326.188 18.7489 301.968 22.2689 277.258C23.1955 270.798 23.9055 264.308 24.3989 257.788C25.2922 245.915 26.1489 234.441 26.9689 223.368C28.2189 206.548 28.2189 189.968 28.2289 172.948C28.229 172.665 28.1641 172.386 28.0392 172.133C27.9143 171.88 27.7328 171.659 27.5089 171.488C4.71888 154.278 -3.35112 123.728 10.2489 97.8679C21.8189 75.8479 44.3589 62.0579 69.5789 63.3579C72.9922 63.5379 76.3389 64.1179 79.6189 65.0979C79.7826 65.1468 79.9567 65.1513 80.1235 65.1109C80.2903 65.0705 80.4439 64.9867 80.5689 64.8679C95.3422 50.8279 113.322 44.9613 134.509 47.2679C134.656 47.2852 134.804 47.2536 134.932 47.1778C135.061 47.102 135.161 46.9862 135.219 46.8479C136.972 42.6213 139.372 38.5079 142.419 34.5079C153.299 20.2379 166.749 9.32792 184.089 3.97792C204.569 -2.34875 224.312 -1.12875 243.319 7.63792C258.599 14.6779 272.559 26.6579 280.469 41.6579C280.596 41.9046 280.792 41.9846 281.059 41.8979C289.839 38.9646 299.389 37.9446 309.709 38.8379C326.729 40.3079 342.309 50.4379 353.989 63.2879C354.516 63.8679 355.166 64.1746 355.939 64.2079C361.419 64.4546 366.656 65.5513 371.649 67.4979C392.199 75.5079 406.519 91.1379 411.669 112.968C413.189 119.421 413.456 125.841 412.469 132.228C409.882 148.975 401.956 162.205 388.689 171.918C387.729 172.628 387.729 173.468 387.719 174.528C387.586 191.895 387.899 207.108 388.659 220.168C389.549 235.238 390.999 253.908 393.189 270.758C396.622 297.205 400.169 324.231 403.829 351.838C404.689 358.351 405.536 366.615 406.369 376.628C407.042 384.655 407.406 391.321 407.459 396.628C407.679 420.268 404.476 443.035 397.849 464.928C386.419 502.718 363.929 536.538 333.029 561.268C324.009 568.498 312.959 575.088 302.869 581.488C297.502 584.888 292.979 588.131 289.299 591.218C265.139 611.508 255.039 640.758 256.429 672.398C258.039 709.018 277.959 738.488 312.639 751.718C317.389 753.528 321.449 754.508 326.659 754.038C338.269 753.008 349.089 755.608 359.129 762.058C371.639 770.088 381.589 784.038 383.299 799.558C383.352 800.045 383.626 800.295 384.119 800.308ZM34.9389 123.938C34.6255 130.038 36.5689 135.461 40.7689 140.208C42.9155 142.635 45.5089 143.855 48.5489 143.868C57.4489 143.895 67.6722 143.898 79.2189 143.878C80.8589 143.878 81.9889 142.308 82.5389 140.958C82.6855 140.585 82.6522 140.231 82.4389 139.898C80.5522 136.978 80.8189 134.321 83.2389 131.928C87.7189 127.508 91.8289 130.808 94.8789 134.678C97.7389 138.308 103.749 143.708 108.819 143.768C117.746 143.855 126.882 143.871 136.229 143.818C142.909 143.768 150.429 136.098 154.769 131.618C156.269 130.068 158.029 129.188 160.259 129.608C164.159 130.328 166.106 132.778 166.099 136.958C166.099 138.248 165.299 139.248 164.549 140.218C164.261 140.59 164.13 141.06 164.184 141.527C164.239 141.994 164.474 142.422 164.839 142.718C166.006 143.678 167.326 144.148 168.799 144.128C196.979 143.828 224.629 143.751 251.749 143.898C253.509 143.905 255.106 143.581 256.539 142.928C256.721 142.847 256.872 142.708 256.969 142.533C257.065 142.358 257.101 142.155 257.073 141.955C257.044 141.756 256.951 141.571 256.809 141.428C253.879 138.498 254.059 132.908 257.859 130.608C262.999 127.498 266.539 130.248 269.939 133.818C274.619 138.718 280.959 143.828 287.779 143.838C296.859 143.865 305.789 143.868 314.569 143.848C321.399 143.828 328.259 136.098 332.759 131.638C335.086 129.338 337.459 128.821 339.879 130.088C343.819 132.161 344.612 135.195 342.259 139.188C342.08 139.495 341.983 139.844 341.98 140.198C341.976 140.552 342.066 140.901 342.239 141.208C343.319 143.118 344.959 144.088 347.179 144.068C354.066 144.001 361.086 143.928 368.239 143.848C370.352 143.821 372.149 143.235 373.629 142.088C379.589 137.488 382.416 131.278 382.109 123.458C381.969 109.928 371.589 99.2079 359.169 95.4779C358.953 95.4151 358.724 95.4137 358.51 95.4738C358.296 95.534 358.105 95.6534 357.959 95.8179C355.212 98.9446 351.706 100.435 347.439 100.288C341.069 100.068 338.009 96.4579 335.789 91.1479C332.202 82.5946 326.232 76.3279 317.879 72.3479C307.626 67.4546 296.802 67.5779 285.409 72.7179C282.069 74.2179 279.519 77.4279 276.309 79.4679C269.159 84.0279 261.339 79.8879 260.179 71.8979C258.606 61.0979 253.279 51.6813 244.199 43.6479C217.109 19.6679 175.399 28.6579 160.839 61.6279C158.766 66.3279 157.699 70.8946 157.639 75.3279C157.559 80.8679 155.339 86.2279 149.929 88.1679C144.262 90.2146 139.372 89.0513 135.259 84.6779C133.749 83.0679 132.859 81.0279 131.499 79.3379C131.286 79.0646 131.012 78.8779 130.679 78.7779C128.472 78.1113 126.346 77.8213 124.299 77.9079C113.326 78.3813 104.429 83.1579 97.6089 92.2379C94.2189 96.7479 94.0089 102.468 90.0089 106.458C86.8589 109.588 81.6689 110.618 77.7089 108.488C73.0155 105.968 70.9422 101.938 71.4889 96.3979C71.5755 95.5313 71.1922 95.0446 70.3389 94.9379C59.7789 93.5446 50.8422 96.5046 43.5289 103.818C38.0555 109.291 35.1922 115.998 34.9389 123.938ZM70.3189 172.868L60.5489 172.868C60.0022 172.868 59.7255 173.141 59.7189 173.688C59.4855 194.395 58.5655 214.878 56.9589 235.138C56.6655 238.818 56.5355 242.431 56.5689 245.978C56.5689 246.378 56.7689 246.578 57.1689 246.578L287.389 246.598L306.739 246.558L315.789 246.558C316.622 246.558 317.009 246.145 316.949 245.318C315.196 221.491 313.862 197.675 312.949 173.868C312.939 173.596 312.822 173.339 312.625 173.151C312.427 172.963 312.163 172.858 311.889 172.858L302.559 172.868L102.799 172.818L85.9489 172.788ZM345.659 172.918L336.369 172.938C335.276 172.938 334.742 173.485 334.769 174.578C335.302 197.585 336.822 220.561 339.329 243.508C339.429 244.421 339.629 245.291 339.929 246.118C339.981 246.258 340.075 246.379 340.199 246.463C340.322 246.547 340.469 246.591 340.619 246.588L349.349 246.478L358.959 246.388C359.056 246.388 359.152 246.362 359.234 246.311C359.317 246.259 359.384 246.186 359.427 246.099C359.47 246.012 359.488 245.915 359.479 245.818C358.169 231.648 357.729 217.678 356.929 203.398C356.396 193.905 356.209 183.971 356.369 173.598C356.371 173.466 356.337 173.335 356.273 173.221C356.208 173.106 356.114 173.011 356.001 172.945C355.888 172.88 355.759 172.846 355.629 172.848ZM285.139 272.498L66.0789 272.778L56.5789 272.838C56.2688 272.842 55.9676 272.941 55.7169 273.122C55.4662 273.302 55.2782 273.556 55.1789 273.848C53.5922 278.475 52.3889 283.555 51.5689 289.088C50.7689 294.528 50.0622 299.925 49.4489 305.278C45.8889 336.418 40.7589 367.688 40.1089 398.048C39.6822 418.115 42.5555 438.068 48.7289 457.908C57.0789 484.768 71.6889 508.708 92.4189 527.918C99.6455 535.011 106.386 540.555 112.639 544.548C120.992 549.888 128.172 554.048 134.179 557.028C152.646 566.188 172.619 571.811 194.099 573.898C204.712 574.931 216.622 574.575 229.829 572.828C240.356 571.415 249.986 569.291 258.719 566.458C291.679 555.758 320.169 534.368 341.689 507.238C357.689 487.038 368.109 461.898 373.119 436.298C376.719 417.938 377.099 398.938 375.549 380.068C373.189 351.368 369.499 324.108 365.409 293.848C364.422 286.581 363.209 279.731 361.769 273.298C361.729 273.128 361.634 272.976 361.499 272.867C361.365 272.758 361.199 272.699 361.029 272.698ZM175.049 601.798L173.779 601.438C173.706 601.418 173.627 601.42 173.555 601.444C173.482 601.467 173.419 601.512 173.372 601.571C173.326 601.631 173.299 601.702 173.295 601.776C173.29 601.851 173.309 601.925 173.349 601.988C181.216 615.461 186.096 629.798 187.989 644.998C191.409 672.498 189.379 702.208 176.579 727.128C176.519 727.245 176.501 727.378 176.529 727.506C176.556 727.635 176.626 727.75 176.728 727.832C176.831 727.914 176.958 727.959 177.089 727.958L184.889 727.958L212.439 727.998L239.709 727.978C239.797 727.978 239.883 727.947 239.952 727.892C240.021 727.837 240.069 727.76 240.088 727.674C240.108 727.588 240.097 727.497 240.059 727.418C237.179 721.278 233.859 715.348 231.849 708.858C226.049 690.188 225.419 668.538 227.059 648.518C228.539 630.531 233.812 615.041 242.879 602.048C243.406 601.301 243.229 601.051 242.349 601.298C237.362 602.725 232.109 603.628 226.589 604.008C209.329 605.188 192.149 604.451 175.049 601.798ZM222.789 744.938L176.989 744.988L164.659 745.098C164.465 745.098 164.274 745.14 164.1 745.221C163.925 745.302 163.771 745.421 163.649 745.568C156.089 754.508 148.589 762.038 139.249 767.968C138.469 768.461 138.542 768.711 139.469 768.718L156.889 768.828L252.749 768.818C260.109 768.858 267.559 768.855 275.099 768.808C276.206 768.801 277.269 768.665 278.289 768.398C278.709 768.285 278.732 768.118 278.359 767.898C268.546 762.031 260.359 754.481 253.799 745.248C253.572 744.935 253.266 744.781 252.879 744.788ZM86.8189 800.748L255.819 800.808L353.109 800.688C353.226 800.687 353.341 800.651 353.437 800.584C353.534 800.517 353.608 800.422 353.649 800.312C353.69 800.202 353.697 800.082 353.669 799.968C352.002 793.395 347.412 788.538 339.899 785.398L239.059 785.248C221.492 784.995 203.922 784.911 186.349 784.998C151.302 785.178 116.719 785.111 82.5989 784.798C73.5889 784.718 65.6689 791.198 63.5189 799.828C63.4885 799.952 63.4965 800.082 63.5417 800.201C63.5869 800.32 63.6672 800.423 63.7721 800.496C63.8769 800.568 64.0014 800.608 64.1289 800.608Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape1&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6223046875 4.3066710451255)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.17 93.3591L341.7 94.8091C341.347 94.9025 341.043 95.0758 340.79 95.3291C334.81 101.209 327.56 101.079 319.06 100.739C316.15 100.619 313.98 99.6891 312.72 96.9491C310.21 91.4791 305.03 84.9891 298.07 88.5091C296.217 89.4491 294.677 90.6225 293.45 92.0291C288.01 98.2791 282.29 103.559 274.1 105.299C270.267 106.112 266.1 106.416 261.6 106.209C253.04 105.819 244.67 101.199 239.15 94.8491C232.37 87.0391 226.88 84.2491 219.24 92.9691C214.89 97.9391 209.89 101.049 202.97 101.219C196.37 101.379 189.917 101.426 183.61 101.359C182.93 101.352 182.43 100.989 182.11 100.269C182.01 100.04 181.975 99.7876 182.008 99.5391C182.042 99.2906 182.143 99.0554 182.3 98.8591C183.04 97.9325 183.813 97.0725 184.62 96.2791C187.09 93.8491 185.64 89.9291 183.51 87.8291C180.65 85.0091 175.91 85.9891 173.39 88.9391C172.23 90.2925 171.17 91.6391 170.21 92.9791C163.5 102.299 152.67 101.929 142.47 100.679C134.9 99.7591 131.64 94.3891 126.62 89.6591C123.633 86.8525 120.593 86.8391 117.5 89.6191C112.63 93.9791 108.24 99.7591 102.47 102.719C88.07 110.129 72.61 106.679 62.57 94.0391C58.62 89.0591 52.95 85.2191 47.21 90.7591C44.54 93.3491 43.94 96.9991 40.53 99.0891C36.59 101.509 29.55 101.139 24.26 101.029C18.64 100.899 13.25 100.999 9.85 97.1991C7.82 94.9191 4 93.8291 2.11 96.9691C1.02333 98.7691 0.446667 98.6225 0.38 96.5291C0.366667 95.9891 0.24 95.0925 0 93.8391C0.253333 85.8991 3.11667 79.1925 8.59 73.7191C15.9033 66.4058 24.84 63.4458 35.4 64.8391C36.2533 64.9458 36.6367 65.4325 36.55 66.2991C36.0033 71.8391 38.0767 75.8691 42.77 78.3891C46.73 80.5191 51.92 79.4891 55.07 76.3591C59.07 72.3691 59.28 66.6491 62.67 62.1391C69.49 53.0591 78.3867 48.2825 89.36 47.8091C91.4067 47.7225 93.5333 48.0125 95.74 48.6791C96.0733 48.7791 96.3467 48.9658 96.56 49.2391C97.92 50.9291 98.81 52.9691 100.32 54.5791C104.433 58.9525 109.323 60.1158 114.99 58.0691C120.4 56.1291 122.62 50.7691 122.7 45.2291C122.76 40.7958 123.827 36.2291 125.9 31.5291C140.46 -1.44087 182.17 -10.4309 209.26 13.5491C218.34 21.5825 223.667 30.9991 225.24 41.7991C226.4 49.7891 234.22 53.9291 241.37 49.3691C244.58 47.3291 247.13 44.1191 250.47 42.6191C261.863 37.4791 272.687 37.3558 282.94 42.2491C291.293 46.2291 297.263 52.4958 300.85 61.0491C303.07 66.3591 306.13 69.9691 312.5 70.1891C316.767 70.3358 320.273 68.8458 323.02 65.7191C323.166 65.5546 323.357 65.4352 323.571 65.3751C323.785 65.3149 324.014 65.3163 324.23 65.3791C336.65 69.1091 347.03 79.8291 347.17 93.3591Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape2&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6211575655465 7.33540715628013)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.203 7.20842C347.509 15.0284 344.683 21.2384 338.723 25.8384C337.243 26.9851 335.446 27.5718 333.333 27.5984C326.179 27.6784 319.159 27.7518 312.273 27.8184C310.053 27.8384 308.413 26.8684 307.333 24.9584C307.159 24.651 307.07 24.3028 307.074 23.9484C307.077 23.594 307.173 23.2458 307.353 22.9384C309.706 18.9451 308.913 15.9118 304.973 13.8384C302.553 12.5718 300.179 13.0884 297.853 15.3884C293.353 19.8484 286.493 27.5784 279.663 27.5984C270.883 27.6184 261.953 27.6151 252.873 27.5884C246.053 27.5784 239.713 22.4684 235.033 17.5684C231.633 13.9984 228.093 11.2484 222.953 14.3584C219.153 16.6584 218.973 22.2484 221.903 25.1784C222.045 25.3214 222.137 25.5067 222.166 25.706C222.195 25.9053 222.159 26.108 222.062 26.2834C221.966 26.4588 221.815 26.5975 221.633 26.6784C220.199 27.3318 218.603 27.6551 216.843 27.6484C189.723 27.5018 162.073 27.5784 133.893 27.8784C132.419 27.8984 131.099 27.4284 129.933 26.4684C129.567 26.1723 129.332 25.7446 129.278 25.2775C129.224 24.8105 129.355 24.3403 129.643 23.9684C130.393 22.9984 131.193 21.9984 131.193 20.7084C131.199 16.5284 129.253 14.0784 125.353 13.3584C123.123 12.9384 121.363 13.8184 119.863 15.3684C115.523 19.8484 108.003 27.5184 101.323 27.5684C91.976 27.6218 82.8393 27.6051 73.9126 27.5184C68.8426 27.4584 62.8326 22.0584 59.9726 18.4284C56.9226 14.5584 52.8126 11.2584 48.3326 15.6784C45.9126 18.0718 45.646 20.7284 47.5326 23.6484C47.746 23.9818 47.7793 24.3351 47.6326 24.7084C47.0826 26.0584 45.9526 27.6284 44.3126 27.6284C32.766 27.6484 22.5426 27.6451 13.6426 27.6184C10.6026 27.6051 8.0093 26.3851 5.86263 23.9584C1.66263 19.2118 -0.280704 13.7884 0.0326292 7.68842C0.272629 8.94175 0.399296 9.83842 0.412629 10.3784C0.479296 12.4718 1.05596 12.6184 2.14263 10.8184C4.03263 7.67842 7.85263 8.76842 9.88263 11.0484C13.2826 14.8484 18.6726 14.7484 24.2926 14.8784C29.5826 14.9884 36.6226 15.3584 40.5626 12.9384C43.9726 10.8484 44.5726 7.19842 47.2426 4.60842C52.9826 -0.931581 58.6526 2.90842 62.6026 7.88842C72.6426 20.5284 88.1026 23.9784 102.503 16.5684C108.273 13.6084 112.663 7.82842 117.533 3.46842C120.626 0.688419 123.666 0.701752 126.653 3.50842C131.673 8.23842 134.933 13.6084 142.503 14.5284C152.703 15.7784 163.533 16.1484 170.243 6.82842C171.203 5.48842 172.263 4.14175 173.423 2.78842C175.943 -0.161581 180.683 -1.14158 183.543 1.67842C185.673 3.77842 187.123 7.69842 184.653 10.1284C183.846 10.9218 183.073 11.7818 182.333 12.7084C182.175 12.9047 182.074 13.1399 182.041 13.3884C182.007 13.6369 182.043 13.8894 182.143 14.1184C182.463 14.8384 182.963 15.2018 183.643 15.2084C189.949 15.2751 196.403 15.2284 203.003 15.0684C209.923 14.8984 214.923 11.7884 219.273 6.81842C226.913 -1.90158 232.403 0.888419 239.183 8.69842C244.703 15.0484 253.073 19.6684 261.633 20.0584C266.133 20.2651 270.299 19.9618 274.133 19.1484C282.323 17.4084 288.043 12.1284 293.483 5.87842C294.709 4.47175 296.249 3.29842 298.103 2.35842C305.063 -1.16158 310.243 5.32842 312.753 10.7984C314.013 13.5384 316.183 14.4684 319.093 14.5884C327.593 14.9284 334.843 15.0584 340.823 9.17842C341.076 8.92509 341.379 8.75175 341.733 8.65842Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape3&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.7941352600339 9.3230859375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M17.6779 0C16.5513 11.84 15.9213 19.36 15.7879 22.56C15.3079 33.9733 14.6346 46.28 13.7679 59.48C13.6013 62.04 13.1046 63.7467 12.2779 64.6C8.55793 68.45 -0.30207 67.53 0.00793038 61.06C1.34793 33.3133 2.02793 12.9867 2.04793 0.08Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape4&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9413128810975 9.32414062500001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M201.657 0.05C201.63 7.10333 201.687 11.5967 201.827 13.53C203.28 33.53 204.617 53.6 205.837 73.74L186.487 73.78L193.557 73.61C193.714 73.6076 193.867 73.5609 193.998 73.4752C194.129 73.3896 194.234 73.2685 194.299 73.126C194.364 72.9835 194.388 72.8254 194.367 72.67C193.367 64.75 192.894 56.7733 192.947 48.74C196.9 43.82 196.69 38.93 192.317 34.07C191.537 32.47 191.137 31.2867 191.117 30.52C190.984 25.7933 191.01 21.2667 191.197 16.94C191.213 16.5684 191.128 16.1993 190.951 15.872C190.773 15.5446 190.51 15.2711 190.189 15.0807C189.868 14.8902 189.501 14.7897 189.127 14.79L153.317 14.9C152.777 12.9667 151.747 11.28 150.227 9.84C148.927 8.60667 147.257 7.7 145.217 7.12C138.364 5.17333 133.557 7.71667 130.797 14.75C116.39 14.8967 101.944 14.9467 87.4571 14.9C61.1271 14.81 34.7871 15.13 8.5371 15.06C6.00377 15.0533 4.15377 14.7633 2.9871 14.19C0.773767 13.11 -0.209566 11.2233 0.0371003 8.53C0.150434 7.29667 0.770434 4.45333 1.8971 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape5&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.5460546875 9.32519283839548)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M3.69 73.6301L0 0.0700704L9.97 7.03745e-05C10.1004 -0.00175254 10.2289 0.031869 10.3421 0.0974247C10.4553 0.16298 10.5492 0.258107 10.6139 0.372872C10.6786 0.487637 10.7118 0.617903 10.71 0.75007C10.55 11.1234 10.7367 21.0567 11.27 30.5501C12.07 44.8301 12.51 58.8001 13.82 72.9701C13.8293 73.0668 13.8114 73.1643 13.7681 73.2514C13.7249 73.3384 13.6581 73.4116 13.5754 73.4627C13.4926 73.5137 13.3972 73.5405 13.3 73.5401Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape6&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.3825550063776 9.3230859375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M13.7551 0.08C13.7351 12.9867 13.0551 33.3133 11.7151 61.06C11.4051 67.53 20.2651 68.45 23.9851 64.6C24.8118 63.7467 25.3084 62.04 25.4751 59.48C26.3418 46.28 27.0151 33.9733 27.4951 22.56C27.6284 19.36 28.2584 11.84 29.3851 0L46.2351 0.03C45.1084 4.48333 44.4884 7.32667 44.3751 8.56C44.1284 11.2533 45.1118 13.14 47.3251 14.22C48.4918 14.7933 50.3418 15.0833 52.8751 15.09C79.1251 15.16 105.465 14.84 131.795 14.93C146.282 14.9767 160.728 14.9267 175.135 14.78C174.568 20.8133 176.498 24.9267 180.925 27.12C183.338 28.3133 185.805 28.72 188.325 28.34C194.755 27.36 198.095 21.26 197.655 14.93L233.465 14.82C233.839 14.8197 234.206 14.9202 234.527 15.1107C234.848 15.3011 235.111 15.5746 235.289 15.902C235.466 16.2293 235.551 16.5984 235.535 16.97C235.348 21.2967 235.322 25.8233 235.455 30.55C235.475 31.3167 235.875 32.5 236.655 34.1C232.788 31.5133 229.168 30.99 225.795 32.53C211.935 38.83 224.195 59.55 237.285 48.77C237.232 56.8033 237.705 64.78 238.705 72.7C238.726 72.8554 238.702 73.0135 238.637 73.156C238.572 73.2985 238.467 73.4196 238.336 73.5052C238.205 73.5909 238.052 73.6376 237.895 73.64L230.825 73.81L0.605102 73.79C0.205102 73.79 0.00510204 73.59 0.00510204 73.19C-0.0282313 69.6433 0.101769 66.03 0.395102 62.35C2.00177 42.09 2.92177 21.6067 3.1551 0.9C3.16177 0.353333 3.43844 0.08 3.9851 0.08ZM127.005 36.5C127.005 34.413 126.456 32.3624 125.412 30.555C124.369 28.7476 122.867 27.2464 121.06 26.203C119.253 25.1595 117.202 24.61 115.115 24.61C111.963 24.61 108.937 25.8635 106.708 28.0925C104.479 30.3215 103.225 33.3478 103.225 36.5C103.225 39.6522 104.479 42.6785 106.708 44.9075C108.937 47.1365 111.963 48.39 115.115 48.39C117.202 48.39 119.253 47.8405 121.06 46.797C122.867 45.7536 124.369 44.2524 125.412 42.445C126.456 40.6376 127.005 38.587 127.005 36.5ZM75.9704 37.4184C76.0574 34.3019 74.8637 31.2741 72.6541 29.007C70.4445 26.7398 67.3954 25.4143 64.1835 25.3246C62.057 25.2652 59.9523 25.7501 58.0818 26.7303C56.2114 27.7105 54.6403 29.152 53.5271 30.9092C52.414 32.6664 51.7974 34.6782 51.7398 36.7416C51.6528 39.8581 52.8465 42.8859 55.0561 45.153C57.2657 47.4202 60.3148 48.7457 63.5267 48.8354C65.6532 48.8948 67.7579 48.4099 69.6284 47.4297C71.4988 46.4495 73.0699 45.008 74.1831 43.2508C75.2962 41.4936 75.9128 39.4818 75.9704 37.4184ZM183.874 50.7982C183.856 49.4819 183.468 48.1937 182.749 47.0635C182.03 45.9334 181.006 45.0007 179.779 44.3595C178.552 43.7184 177.166 43.3911 175.76 43.4107C173.637 43.4404 171.61 44.2595 170.128 45.6863C168.646 47.1131 167.828 49.0336 167.856 51.0218C167.874 52.3381 168.262 53.6263 168.981 54.7565C169.7 55.8866 170.725 56.8193 171.951 57.4605C173.178 58.1016 174.564 58.4289 175.97 58.4093C178.093 58.3796 180.121 57.5605 181.603 56.1337C183.084 54.7069 183.902 52.7864 183.874 50.7982Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape7&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.0305953125001 9.32554685349047)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.0064 0.0100006L9.3364 6.11826e-07C9.61064 -0.000292647 9.87453 0.104847 10.0721 0.293135C10.2697 0.481423 10.3861 0.738544 10.3964 1.01C11.3097 24.8167 12.6431 48.6333 14.3964 72.46C14.4564 73.2867 14.0697 73.7 13.2364 73.7L4.1864 73.7C2.9664 53.56 1.62973 33.49 0.1764 13.49C0.0364 11.5567 -0.0202667 7.06333 0.0064 0.0100006Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape8&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1631696428572 9.32765624999999)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M10.891 0L14.581 73.56L5.85095 73.67C5.70139 73.6731 5.55452 73.6294 5.43088 73.5452C5.30724 73.461 5.21287 73.3403 5.16095 73.2C4.86095 72.3733 4.66095 71.5033 4.56095 70.59C2.05429 47.6433 0.534286 24.6667 0.000952381 1.66C-0.0257143 0.566667 0.507619 0.02 1.60095 0.02Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape9&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.5362571970961 9.55219950584632)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.6165 8.41299C23.0565 14.743 19.7165 20.843 13.2865 21.823C10.7665 22.203 8.2998 21.7963 5.88646 20.603C1.4598 18.4097 -0.470205 14.2963 0.0964619 8.26299C2.85646 1.22966 7.66313 -1.31367 14.5165 0.632992C16.5565 1.21299 18.2265 2.11966 19.5265 3.35299C21.0465 4.79299 22.0765 6.47966 22.6165 8.41299Z&quot;&gt;&lt;/path&gt; &lt;circle id=&quot;shape10&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.0115625 10.18828125)&quot; r=&quot;11.89&quot; cx=&quot;11.89&quot; cy=&quot;11.89&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape11&quot; transform=&quot;matrix(0.0351425431068875 0.000981620111375468 -0.000981620111375468 0.0351425431068875 14.2130771675543 10.2015061448131)&quot; rx=&quot;12.12&quot; ry=&quot;11.76&quot; cx=&quot;12.12&quot; cy=&quot;11.76&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape12&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 20.1057469902912 10.4364122450525)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M16.9732 2.43205C21.3465 7.29205 21.5565 12.1821 17.6032 17.1021C4.5132 27.8821 -7.7468 7.16205 6.1132 0.862052C9.48653 -0.677948 13.1065 -0.154615 16.9732 2.43205Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape13&quot; transform=&quot;matrix(0.0351528231097021 -0.000490857902548076 0.000490857902548076 0.0351528231097021 18.2800569526222 10.8531762234766)&quot; rx=&quot;8.01&quot; ry=&quot;7.5&quot; cx=&quot;8.01&quot; cy=&quot;7.5&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape14&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.47390625 12.828515625)&quot; fill=&quot;rgb(38,23,22)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0 300.33C1.52 298.69 3.53 298.057 6.03 298.43C6.10297 298.443 6.17377 298.447 6.24 298.44C6.65333 298.413 6.88667 298.26 6.94 297.98C7 297.66 7.19333 297.493 7.52 297.48L10.29 297.39C10.4233 297.383 10.5567 297.367 10.69 297.34C11.0167 297.267 11.1733 297.127 11.16 296.92C11.1467 296.7 11.2467 296.563 11.46 296.51C12.1467 296.337 12.7433 295.997 13.25 295.49C13.49 295.257 13.58 294.973 13.52 294.64C13.1333 292.653 12.8767 290.647 12.75 288.62C12.69 287.79 12.27 287.35 11.7 286.83C11.4533 286.603 11.3933 286.337 11.52 286.03C11.8533 285.197 11.6767 284.573 10.99 284.16C10.7367 284 10.46 283.923 10.16 283.93L6.56 284.02C15.1 281.92 21.0833 280.04 24.51 278.38C27.5033 276.927 30.4033 275.357 33.21 273.67C33.319 273.603 33.3974 273.495 33.4282 273.371C33.4589 273.246 33.4397 273.115 33.3746 273.004C33.3096 272.894 33.2037 272.813 33.08 272.78C32.5067 272.62 31.9433 272.67 31.39 272.93C63.5767 260.003 88.4967 238.95 106.15 209.77C109.223 204.703 112.093 199 114.76 192.66C118.06 184.807 120.343 178.587 121.61 174C123.097 168.613 124.457 162.397 125.69 155.35C126.657 149.857 126.873 144.25 126.34 138.53C127.853 138.57 128.907 138.097 129.5 137.11C131.56 133.67 131.433 130.473 129.12 127.52C128.24 126.39 127.07 126.39 125.77 126.38C120.017 126.347 114.427 126.37 109 126.45C108.613 125.77 108.27 125.09 107.97 124.41C107.69 123.77 107.527 123.037 107.48 122.21C106.953 112.977 106.213 103.723 105.26 94.45C110.127 94.5633 114.617 94.5833 118.73 94.51C121.27 94.47 123.93 94.86 126 93.31C128.053 91.77 128.717 89.61 127.99 86.83C127.23 83.89 124.98 82.2967 121.24 82.05L120.9 72.32C124.973 70.3667 126.23 67.5767 124.67 63.95C123.697 61.6833 121.82 60.52 119.04 60.46C117.273 58.24 116.223 56.5633 115.89 55.43C113.43 47.1033 110.547 38.9133 107.24 30.86C106.947 30.1467 107 29.0333 107.4 27.52C109.087 27.4933 110.883 27.5267 112.79 27.62C115.45 27.7533 117.403 26.9667 118.65 25.26C121.02 22.01 120.02 17.98 116.55 16.23C115.597 15.75 114.193 15.5133 112.34 15.52C107.533 15.54 102.823 15.4767 98.21 15.33C97.6033 13.9433 96.9433 12.6033 96.23 11.31C94.38 7.96 93.99 4.82 92.56 1.46C92.4467 1.18667 92.5067 0.963333 92.74 0.79L93.19 0.46C93.4567 0.273333 93.4267 0.176667 93.1 0.17L55.31 0L131.2 0.2C131.371 0.200762 131.536 0.26037 131.671 0.369176C131.805 0.477981 131.9 0.629779 131.94 0.8C133.38 7.23333 134.593 14.0833 135.58 21.35C139.67 51.61 143.36 78.87 145.72 107.57C147.27 126.44 146.89 145.44 143.29 163.8C138.28 189.4 127.86 214.54 111.86 234.74C90.34 261.87 61.85 283.26 28.89 293.96C20.1567 296.793 10.5267 298.917 0 300.33Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape15&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.2758764491296 12.828515625)&quot; fill=&quot;rgb(93,52,26)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M231.61 0L269.4 0.17C269.726 0.176667 269.756 0.273333 269.49 0.46L269.04 0.79C268.806 0.963333 268.746 1.18667 268.86 1.46C270.29 4.82 270.68 7.96 272.53 11.31C273.243 12.6033 273.903 13.9433 274.51 15.33C268.76 17.07 269.07 27.78 275.82 27.53C278.38 27.43 281.006 27.4267 283.7 27.52C283.3 29.0333 283.246 30.1467 283.54 30.86C286.846 38.9133 289.73 47.1033 292.19 55.43C292.523 56.5633 293.573 58.24 295.34 60.46C290.98 60.76 286.806 61.0267 282.82 61.26C277.7 61.56 274.45 67.2 278.08 71.26C278.86 72.1333 280.413 72.6 282.74 72.66C287.386 72.7733 292.206 72.66 297.2 72.32L297.54 82.05C293.013 81.9567 288.443 81.9633 283.83 82.07C281.84 82.11 280.61 82.75 279.5 84.26C276.44 88.44 277.126 91.8367 281.56 94.45C282.513 103.723 283.253 112.977 283.78 122.21C283.826 123.037 283.99 123.77 284.27 124.41C284.57 125.09 284.913 125.77 285.3 126.45C282.193 127.497 280.633 129.463 280.62 132.35C280.613 134.79 281.763 136.753 284.07 138.24C281.93 156.593 277.493 173.123 270.76 187.83C261.606 207.817 247.22 225.063 227.6 239.57C218.546 246.263 208.406 252.023 197.18 256.85C191.52 259.28 187.21 264.45 191.61 270.42C195.03 275.03 202.58 274.56 207.69 272.93C208.243 272.67 208.806 272.62 209.38 272.78C209.503 272.813 209.609 272.894 209.674 273.004C209.739 273.115 209.758 273.246 209.728 273.371C209.697 273.495 209.619 273.603 209.51 273.67C206.703 275.357 203.803 276.927 200.81 278.38C197.383 280.04 191.4 281.92 182.86 284.02C165.386 287.427 148.786 288.113 133.06 286.08C116.433 283.94 99.2895 279.17 81.6295 271.77C75.1162 269.043 68.6828 266.14 62.3295 263.06C54.3762 259.2 46.8962 254.463 39.8895 248.85C40.5695 248.377 41.3595 247.947 42.2595 247.56C44.5695 246.55 46.3695 244.3 44.1695 241.99C29.1962 226.303 18.1928 209.247 11.1595 190.82C1.95285 166.687 -1.55715 141.62 0.629514 115.62C2.01618 99.0867 3.45618 82.5733 4.94951 66.08C5.49618 59.9533 6.20618 53.32 7.07951 46.18C8.95285 30.8733 10.7762 15.5733 12.5495 0.28ZM230.747 11.7302C228.758 9.7412 226.058 8.62261 223.245 8.62261C220.432 8.62261 217.731 9.7412 215.742 11.7302L213.89 13.5829C211.901 15.5719 210.782 18.2724 210.782 21.0853C210.782 23.8982 211.901 26.5987 213.89 28.5877L215.092 29.7898C217.081 31.7788 219.781 32.8974 222.594 32.8974C225.407 32.8974 228.108 31.7788 230.097 29.7898L231.949 27.9371C233.938 25.9481 235.057 23.2476 235.057 20.4347C235.057 17.6218 233.938 14.9213 231.949 12.9323ZM47.1595 186.78C39.7128 170.84 35.7195 154.833 35.1795 138.76C34.9528 131.94 35.0895 124.72 35.5895 117.1C37.1495 93.44 39.2662 67.4833 41.9395 39.23C42.3395 35.0167 42.6262 30.7267 42.7995 26.36C43.4195 10.9 25.2095 12.45 24.4195 25.69C23.0462 48.79 21.1195 72.2233 18.6395 95.99C17.6595 105.337 16.9995 114.63 16.6595 123.87C16.3328 132.65 16.6595 140.653 17.6395 147.88C19.5062 161.707 22.9728 175.147 28.0395 188.2C29.1795 191.153 30.6662 194.07 32.4995 196.95C35.2995 201.37 41.5395 202.72 45.3395 198.89C48.7328 195.483 49.3395 191.447 47.1595 186.78ZM87.1943 37.8021C86.8236 36.4743 85.902 35.3574 84.6342 34.6994C83.3663 34.0413 81.8534 33.8945 80.4311 34.2916C79.0088 34.6887 77.7908 35.598 77.0472 36.8177C76.3037 38.0374 76.094 39.4701 76.4647 40.7979C76.8355 42.1257 77.757 43.2426 79.0249 43.9006C80.2927 44.5587 81.8056 44.7055 83.2279 44.3084C84.6502 43.9113 85.8682 43.002 86.6118 41.7823C87.3554 40.5626 87.565 39.1299 87.1943 37.8021ZM242.9 63.3691C242.905 60.5116 242.14 57.7024 240.682 55.2252C239.224 52.7479 237.124 50.6888 234.594 49.2556C232.064 47.8225 229.192 47.0651 226.268 47.06C223.344 47.0549 220.469 47.8022 217.934 49.2266C215.399 50.6509 213.292 52.7027 211.826 55.1748C210.359 57.6469 209.585 60.4534 209.58 63.3109C209.575 66.1684 210.34 68.9776 211.797 71.4548C213.255 73.9321 215.355 75.9912 217.885 77.4244C220.415 78.8575 223.287 79.6149 226.211 79.62C229.135 79.6251 232.01 78.8778 234.545 77.4534C237.08 76.0291 239.187 73.9773 240.653 71.5052C242.12 69.0331 242.895 66.2266 242.9 63.3691ZM85.9041 71.8823C88.1531 72.912 90.7367 72.9736 93.0816 72.0534C95.4266 71.1333 97.3455 69.3049 98.4127 66.9739C99.1193 65.4306 99.4215 63.7348 99.2889 62.0574C99.1563 60.38 98.5935 58.7796 97.6572 57.4176C96.721 56.0556 95.4439 54.9794 93.9549 54.2977C91.7059 53.268 89.1223 53.2064 86.7774 54.1266C84.4325 55.0467 82.5135 56.8751 81.4463 59.2061C80.7398 60.7494 80.4375 62.4452 80.5701 64.1226C80.7028 65.8 81.2656 67.4004 82.2018 68.7624C83.1381 70.1244 84.4151 71.2006 85.9041 71.8823ZM60.6086 105.171C63.2448 106.638 66.3725 106.974 69.2978 106.105C72.223 105.236 74.7122 103.231 76.213 100.535C77.7138 97.8381 78.1063 94.6659 77.3035 91.7217C76.5007 88.7775 74.5666 86.2966 71.9304 84.8293C69.2942 83.362 66.1665 83.0257 63.2413 83.8948C60.316 84.7639 57.8268 86.7691 56.326 89.4655C54.8252 92.1619 54.4327 95.3341 55.2355 98.2783C56.0384 101.222 57.9724 103.703 60.6086 105.171ZM187.08 98.11C187.08 96.1959 186.318 94.3582 184.965 93.0047C183.611 91.6512 181.774 90.89 179.86 90.89C177.945 90.89 176.108 91.6512 174.754 93.0047C173.401 94.3582 172.64 96.1959 172.64 98.11C172.64 100.024 173.401 101.862 174.754 103.215C176.108 104.569 177.945 105.33 179.86 105.33C181.127 105.33 182.372 104.996 183.47 104.363C184.567 103.729 185.479 102.817 186.112 101.72C186.746 100.623 187.08 99.3773 187.08 98.11ZM234.564 99.0027C233.705 97.863 232.551 96.9774 231.217 96.4351C229.883 95.8929 228.416 95.7129 226.964 95.9133C225.513 96.1138 224.127 96.6877 222.947 97.5771C221.766 98.4665 220.833 99.6405 220.24 100.981C219.647 102.321 219.416 103.78 219.57 105.212C219.723 106.644 220.256 107.998 221.115 109.137C221.974 110.277 223.128 111.163 224.462 111.705C225.796 112.247 227.263 112.427 228.715 112.227C230.166 112.026 231.552 111.452 232.732 110.563C233.913 109.673 234.846 108.499 235.439 107.159C236.032 105.819 236.263 104.36 236.109 102.928C235.956 101.496 235.423 100.142 234.564 99.0027ZM47.9695 214.56C45.1695 220.83 50.0195 225.32 54.0495 229.45C57.6895 233.19 61.8995 236.09 66.6995 232.86C71.8895 229.38 72.0595 223.24 67.9795 218.66C64.2095 214.41 60.6395 209.6 54.3295 209.99C51.4095 210.17 49.1195 211.99 47.9695 214.56Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape16&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.8026079545455 12.838359375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M26.0114 0C24.238 15.2933 22.4147 30.5933 20.5414 45.9C19.668 53.04 18.958 59.6733 18.4114 65.8C16.918 82.2933 15.478 98.8067 14.0914 115.34C11.9047 141.34 15.4147 166.407 24.6214 190.54C31.6547 208.967 42.658 226.023 57.6314 241.71C59.8314 244.02 58.0314 246.27 55.7214 247.28C54.8214 247.667 54.0314 248.097 53.3514 248.57C51.9014 250.07 52.3314 253.14 52.3514 255.14C31.6214 235.93 17.0114 211.99 8.66137 185.13C2.48804 165.29 -0.385293 145.337 0.0413737 125.27C0.691374 94.91 5.82137 63.64 9.38137 32.5C9.99471 27.1467 10.7014 21.75 11.5014 16.31C12.3214 10.7767 13.5247 5.69667 15.1114 1.07C15.2107 0.778294 15.3987 0.524438 15.6494 0.343583C15.9001 0.162728 16.2013 0.0636261 16.5114 0.06Z&quot;&gt;&lt;/path&gt; &lt;rect id=&quot;shape17&quot; transform=&quot;matrix(0.0248592227760896 -0.0248592227760896 0.0248592227760896 0.0248592227760896 19.531681996495 13.569794617477)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; width=&quot;23.84&quot; height=&quot;22.92&quot; rx=&quot;10.61&quot; ry=&quot;10.61&quot;&gt;&lt;/rect&gt; &lt;path id=&quot;shape18&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.857255859375 13.3649990428515)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M30.6225 171.52C32.8025 176.187 32.1958 180.223 28.8025 183.63C25.0025 187.46 18.7625 186.11 15.9625 181.69C14.1292 178.81 12.6425 175.893 11.5025 172.94C6.43583 159.887 2.96917 146.447 1.1025 132.62C0.1225 125.393 -0.204167 117.39 0.1225 108.61C0.4625 99.37 1.1225 90.0767 2.1025 80.73C4.5825 56.9634 6.50917 33.53 7.8825 10.43C8.6725 -2.80997 26.8825 -4.35997 26.2625 11.1C26.0892 15.4667 25.8025 19.7567 25.4025 23.97C22.7292 52.2234 20.6125 78.18 19.0525 101.84C18.5525 109.46 18.4158 116.68 18.6425 123.5C19.1825 139.573 23.1758 155.58 30.6225 171.52Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape19&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.7841415488515 13.3674609375)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.0522 0C8.66553 0.146667 13.3755 0.21 18.1822 0.19C20.0355 0.183333 21.4389 0.42 22.3922 0.9C25.8622 2.65 26.8622 6.68 24.4922 9.93C23.2455 11.6367 21.2922 12.4233 18.6322 12.29C16.7255 12.1967 14.9289 12.1633 13.2422 12.19C10.5489 12.0967 7.9222 12.1 5.3622 12.2C-1.3878 12.45 -1.6978 1.74 4.0522 0Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape20&quot; transform=&quot;matrix(0.0338611839889802 -0.00945421244350544 0.00945421244350544 0.0338611839889802 14.9149266129752 14.0867380565676)&quot; rx=&quot;5.57&quot; ry=&quot;5.2&quot; cx=&quot;5.57&quot; cy=&quot;5.2&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape21&quot; transform=&quot;matrix(0.0351561964539828 6.13592003636124e-05 -6.13592003636124e-05 0.0351561964539828 19.6449060698586 14.4819473774511)&quot; rx=&quot;16.66&quot; ry=&quot;16.28&quot; cx=&quot;16.66&quot; cy=&quot;16.28&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape22&quot; transform=&quot;matrix(-0.0146348716029047 0.031965331958686 -0.031965331958686 -0.0146348716029047 15.8772166930746 14.8739620295146)&quot; rx=&quot;9.67&quot; ry=&quot;9.33&quot; cx=&quot;9.67&quot; cy=&quot;9.33&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape23&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.997793706651 14.9540625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M18.805 0C21.585 0.06 23.4616 1.22333 24.435 3.49C25.995 7.11667 24.7383 9.90667 20.665 11.86C15.6716 12.2 10.8516 12.3133 6.20498 12.2C3.87831 12.14 2.32498 11.6733 1.54498 10.8C-2.08502 6.74 1.16498 1.1 6.28498 0.8C10.2716 0.566667 14.445 0.3 18.805 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape24&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.0361349190606 15.7107890625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M19.9144 0.0653333C23.6544 0.312 25.9044 1.90533 26.6644 4.84533C27.3911 7.62533 26.7277 9.78533 24.6744 11.3253C22.6044 12.8753 19.9444 12.4853 17.4044 12.5253C13.2911 12.5987 8.80105 12.5787 3.93438 12.4653C-0.498949 9.852 -1.18562 6.45533 1.87438 2.27533C2.98438 0.765333 4.21438 0.125333 6.20438 0.0853333C10.8177 -0.0213333 15.3877 -0.028 19.9144 0.0653333Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape25&quot; transform=&quot;matrix(-0.0170977282180133 0.0307185547160906 -0.0307185547160906 -0.0170977282180133 15.1542587716268 16.0053675452257)&quot; rx=&quot;11.64&quot; ry=&quot;11.38&quot; cx=&quot;11.64&quot; cy=&quot;11.38&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;circle id=&quot;shape26&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.345234375 16.0238671875)&quot; r=&quot;7.22&quot; cx=&quot;7.22&quot; cy=&quot;7.22&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape27&quot; transform=&quot;matrix(0.0280770296501001 -0.0211575594076892 0.0211575594076892 0.0280770296501001 19.8774398273616 16.4371069616574)&quot; rx=&quot;8.42&quot; ry=&quot;8.13&quot; cx=&quot;8.42&quot; cy=&quot;8.13&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape28&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1414052368516 17.2710454963236)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.02 12.1647L3.45003 11.8747C1.14336 10.388 -0.00663785 8.42471 2.88184e-05 5.98471C0.0133622 3.09804 1.57336 1.13137 4.68003 0.0847059C10.1067 0.00470588 15.6967 -0.0186275 21.45 0.0147059C22.75 0.0247059 23.92 0.0247059 24.8 1.15471C27.1134 4.10804 27.24 7.30471 25.18 10.7447C24.5867 11.7314 23.5334 12.2047 22.02 12.1647Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape29&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.9485123620206 17.688515625)&quot; fill=&quot;rgb(74,39,39)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M94.2701 0L112.84 0.29C113.373 6.01 113.157 11.6167 112.19 17.11C110.957 24.1567 109.597 30.3733 108.11 35.76C106.843 40.3467 104.56 46.5667 101.26 54.42C98.5934 60.76 95.7234 66.4633 92.6501 71.53C74.9968 100.71 50.0768 121.763 17.8901 134.69C12.7801 136.32 5.23009 136.79 1.81009 132.18C-2.58991 126.21 1.72009 121.04 7.38009 118.61C18.6068 113.783 28.7468 108.023 37.8001 101.33C57.4201 86.8233 71.8068 69.5767 80.9601 49.59C87.6934 34.8833 92.1301 18.3533 94.2701 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape30&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9331058615201 20.210194296345)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.830544 4.59225C1.98054 2.02225 4.27054 0.202251 7.19054 0.0222511C13.5005 -0.367749 17.0705 4.44225 20.8405 8.69225C24.9205 13.2723 24.7505 19.4123 19.5605 22.8923C14.7605 26.1223 10.5505 23.2223 6.91054 19.4823C2.88054 15.3523 -1.96946 10.8623 0.830544 4.59225Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape31&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.6404577789765 21.5771484375)&quot; fill=&quot;rgb(74,39,39)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.07476 0C8.08142 5.61333 15.5614 10.35 23.5148 14.21C29.8681 17.29 36.3014 20.1933 42.8148 22.92C60.4748 30.32 77.6181 35.09 94.2448 37.23C109.971 39.2633 126.571 38.5767 144.045 35.17L147.645 35.08C147.945 35.0733 148.221 35.15 148.475 35.31C149.161 35.7233 149.338 36.3467 149.005 37.18C148.878 37.4867 148.938 37.7533 149.185 37.98C149.755 38.5 150.175 38.94 150.235 39.77C150.361 41.7967 150.618 43.8033 151.005 45.79C151.065 46.1233 150.975 46.4067 150.735 46.64C150.228 47.1467 149.631 47.4867 148.945 47.66C148.731 47.7133 148.631 47.85 148.645 48.07C148.658 48.2767 148.501 48.4167 148.175 48.49C148.041 48.5167 147.908 48.5333 147.775 48.54L145.005 48.63C144.678 48.6433 144.485 48.81 144.425 49.13C144.371 49.41 144.138 49.5633 143.725 49.59C143.659 49.5967 143.588 49.5933 143.515 49.58C141.015 49.2067 139.005 49.84 137.485 51.48C124.278 53.2267 112.368 53.5833 101.755 52.55C80.2748 50.4633 60.3014 44.84 41.8348 35.68C35.8281 32.7 28.6481 28.54 20.2948 23.2C14.0414 19.2067 7.30142 13.6633 0.0747565 6.57C0.0547565 4.57 -0.375243 1.5 1.07476 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape32&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.548046875 24.3846604970638)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M37.39 126.792L36.84 125.732C36.6867 125.445 36.61 125.139 36.61 124.812L36.29 50.1519C39.97 50.1319 42.74 50.0419 44.93 47.3519C46.0567 45.9652 46.4067 44.4152 45.98 42.7019C44.81 38.0219 40.08 37.5119 35.72 37.6019L35.91 26.2919C40.16 26.9019 44.77 27.8519 48.81 25.9619C52.26 24.3519 53.31 20.2319 50.85 17.2519C48.51 14.4319 45.36 14.2119 41.99 14.2719C35.7567 14.3852 29.3167 14.4052 22.67 14.3319C19.49 14.3019 16.81 15.9619 15.14 18.6319C15.2 16.6619 12.86 15.6819 11.44 14.7519C10.6133 14.2119 9.90667 13.5852 9.32 12.8719C6.57333 9.53188 3.78 6.23188 0.94 2.97188C0.46 2.41855 0.146667 1.62521 0 0.591879C17.1 3.24521 34.28 3.98188 51.54 2.80188C57.06 2.42188 62.3133 1.51855 67.3 0.0918792C68.18 -0.154787 68.3567 0.0952125 67.83 0.841879C58.7633 13.8352 53.49 29.3252 52.01 47.3119C50.37 67.3319 51 88.9819 56.8 107.652C58.81 114.142 62.13 120.072 65.01 126.212C65.0485 126.291 65.0589 126.382 65.0394 126.468C65.02 126.554 64.9718 126.631 64.9029 126.686C64.834 126.741 64.7483 126.772 64.66 126.772Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape33&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.486355851717 24.3923298330305)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.75477 0.373729C1.90143 1.40706 2.21477 2.2004 2.69477 2.75373C5.53477 6.01373 8.3281 9.31373 11.0748 12.6537C11.6614 13.3671 12.3681 13.9937 13.1948 14.5337C14.6148 15.4637 16.9548 16.4437 16.8948 18.4137L16.5848 19.0537C15.9714 19.3604 15.6748 19.8204 15.6948 20.4337C15.8148 23.3437 16.3448 26.1237 18.0248 28.6937C19.9714 31.6737 22.1714 34.5471 24.6248 37.3137C19.6548 39.6737 18.5548 46.9937 24.3448 49.3137C24.1981 53.2071 24.2048 57.1237 24.3648 61.0637C24.5581 65.7371 24.5748 69.6437 24.4148 72.7837C24.2014 77.0371 23.9914 81.3304 23.7848 85.6637C23.1248 99.8304 19.6748 113.244 13.4348 125.904C13.2814 126.21 13.0314 126.384 12.6848 126.424L11.5948 126.534L3.79477 126.534C3.66373 126.534 3.5364 126.49 3.43437 126.408C3.33234 126.325 3.26171 126.21 3.23447 126.082C3.20722 125.954 3.22499 125.82 3.28477 125.704C16.0848 100.784 18.1148 71.0737 14.6948 43.5737C12.8014 28.3737 7.92143 14.0371 0.0547669 0.563729C0.0152725 0.50031 -0.00361813 0.426609 0.000572506 0.352292C0.00476314 0.277975 0.0318434 0.20644 0.0782619 0.147067C0.12468 0.0876949 0.188315 0.0431997 0.26082 0.0194171C0.333326 -0.0043654 0.411387 -0.00634806 0.484767 0.0137292Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape34&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.0617214476865 24.8861307529877)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M21.2988 12.0278C16.7455 11.8878 12.1288 11.8545 7.44881 11.9278C4.74215 11.9678 2.94548 11.7312 2.05881 11.2178C0.238812 10.1645 -0.374521 8.0945 0.218812 5.00784L0.528812 4.36784C2.19881 1.69784 4.87881 0.0378364 8.05881 0.0678364C14.7055 0.14117 21.1455 0.12117 27.3788 0.00783636C30.7488 -0.0521636 33.8988 0.167836 36.2388 2.98784C38.6988 5.96784 37.6488 10.0878 34.1988 11.6978C30.1588 13.5878 25.5488 12.6378 21.2988 12.0278Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape35&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.038091694079 25.0621875000001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.890947 0C0.297614 3.08667 0.910947 5.15667 2.73095 6.21C3.61761 6.72333 5.41428 6.96 8.12095 6.92C12.8009 6.84667 17.4176 6.88 21.9709 7.02L21.7809 18.33L8.93095 18.26C6.47761 15.4933 4.27761 12.62 2.33095 9.64C0.650947 7.07 0.120947 4.29 0.000947368 1.38C-0.0190526 0.766667 0.277614 0.306667 0.890947 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape36&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.2047130847683 25.704140625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.19149 0L17.0415 0.07C21.4015 -0.02 26.1315 0.49 27.3015 5.17C27.7282 6.88333 27.3782 8.43333 26.2515 9.82C24.0615 12.51 21.2915 12.6 17.6115 12.62L3.91149 12C-1.87851 9.68 -0.778506 2.36 4.19149 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape37&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.893984375 26.126015625)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M12.75 0L26.45 0.62L26.77 75.28C26.77 75.6067 26.8467 75.9133 27 76.2L27.55 77.26L0 77.22L1.09 77.11C1.43667 77.07 1.68667 76.8967 1.84 76.59C8.08 63.93 11.53 50.5167 12.19 36.35C12.3967 32.0167 12.6067 27.7233 12.82 23.47C12.98 20.33 12.9633 16.4233 12.77 11.75C12.61 7.81 12.6033 3.89333 12.75 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape38&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.22640625 29.4324536132813)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M29.96 24.0302C30.7067 23.5835 30.1467 23.1702 28.28 22.7902C27.96 22.7235 27.6733 22.5835 27.42 22.3702C24.9333 20.2235 22.8967 18.7069 21.31 17.8202C12.91 13.1069 5.80667 7.21687 0 0.150208L30.09 0.000208333C30.4767 -0.00645833 30.7833 0.146875 31.01 0.460208C37.57 9.69354 45.7567 17.2435 55.57 23.1102C55.9433 23.3302 55.92 23.4969 55.5 23.6102C54.48 23.8769 53.4167 24.0135 52.31 24.0202C44.77 24.0669 37.32 24.0702 29.96 24.0302Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape39&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.2706541442871 29.4394921875)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M38.2747 0C35.2147 4.74667 31.2681 10.0433 26.4347 15.89C23.4547 19.49 20.7014 22.14 18.1747 23.84L0.754727 23.73C-0.17194 23.7233 -0.245273 23.4733 0.534727 22.98C9.87473 17.05 17.3747 9.52 24.9347 0.58C25.0571 0.432797 25.211 0.314351 25.3856 0.233119C25.5601 0.151886 25.7511 0.109846 25.9447 0.11Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape40&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.909609375 29.437734375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M65.9 0C71.7067 7.06667 78.81 12.9567 87.21 17.67C88.7967 18.5567 90.8333 20.0733 93.32 22.22C93.5733 22.4333 93.86 22.5733 94.18 22.64C96.0467 23.02 96.6067 23.4333 95.86 23.88L0 23.89C2.52667 22.19 5.28 19.54 8.26 15.94C13.0933 10.0933 17.04 4.79667 20.1 0.05Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape41&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.6264334548969 30.8390367406574)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M175.558 0.450733C176.245 0.450733 176.568 0.567399 176.528 0.800733C176.494 1.0303 176.388 1.24303 176.226 1.40826C176.065 1.5735 175.855 1.68291 175.628 1.72073C171.935 2.3474 168.581 2.65073 165.568 2.63073C163.998 2.62073 162.798 3.35073 161.188 3.18073C160.808 3.14073 160.445 3.20407 160.098 3.37073L158.488 4.16073C158.195 4.30073 157.958 4.50407 157.778 4.77073C157.045 5.85073 156.111 6.47073 154.978 6.63073C153.258 6.87073 151.491 6.99073 149.678 6.99073C111.858 6.8974 73.5681 6.84073 34.8081 6.82073C28.6781 6.82073 24.4281 9.63073 23.3181 15.9507L0.628115 15.8107C0.50059 15.8104 0.376138 15.7713 0.2713 15.6987C0.166463 15.626 0.0861025 15.5233 0.0409006 15.404C-0.00430136 15.2848 -0.0122487 15.1546 0.0181151 15.0307C2.16812 6.40073 10.0881 -0.0792673 19.0981 0.00073271C53.2181 0.314066 87.8014 0.380733 122.848 0.200733C140.421 0.114066 157.991 0.197399 175.558 0.450733Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape42&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.4462109375 30.8548828125)&quot; fill=&quot;rgb(93,52,26)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M152.24 0L253.08 0.15C253.047 2.17 252.56 3.72667 251.62 4.82C250.867 5.69333 249.93 6.13667 248.81 6.15C221.383 6.39 194.363 6.58667 167.75 6.74C167.283 6.74 167.03 6.97333 166.99 7.44C166.87 8.95333 167.113 10.3433 167.72 11.61C167.847 11.8833 167.89 12.1667 167.85 12.46L167.63 14.18C167.577 14.5867 167.74 14.86 168.12 15C168.573 15.1667 168.867 15.3533 169 15.56L0 15.5C1.11 9.18 5.36 6.37 11.49 6.37C50.25 6.39 88.54 6.44667 126.36 6.54C128.173 6.54 129.94 6.42 131.66 6.18C132.793 6.02 133.727 5.4 134.46 4.32C134.64 4.05333 134.877 3.85 135.17 3.71L136.78 2.92C137.127 2.75333 137.49 2.69 137.87 2.73C139.48 2.9 140.68 2.17 142.25 2.18C145.263 2.2 148.617 1.89667 152.31 1.27C152.537 1.23218 152.746 1.12277 152.908 0.957532C153.07 0.792295 153.175 0.579568 153.21 0.35C153.25 0.116667 152.927 -1.13687e-13 152.24 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape43&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 19.3159081135321 30.86015625)&quot; fill=&quot;rgb(74,39,39)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M86.1197 0C93.6331 3.14 98.2231 7.99667 99.8897 14.57C99.9181 14.684 99.9111 14.804 99.8698 14.914C99.8285 15.024 99.7547 15.1189 99.6583 15.186C99.5618 15.2532 99.4472 15.2894 99.3297 15.29L2.03972 15.41C1.90639 15.2033 1.61306 15.0167 1.15972 14.85C0.779725 14.71 0.616391 14.4367 0.669725 14.03L0.889725 12.31C0.929725 12.0167 0.886391 11.7333 0.759725 11.46C0.153058 10.1933 -0.0902752 8.80333 0.0297248 7.29C0.0697248 6.82333 0.323058 6.59 0.789725 6.59C27.4031 6.43667 54.4231 6.24 81.8497 6C82.9697 5.98667 83.9064 5.54333 84.6597 4.67C85.5997 3.57667 86.0864 2.02 86.1197 0Z&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt;&lt;div class=&quot;w-16 h-16&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;fill-[${rgbColor} w-16 h-16&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 36 36&quot;&gt; &lt;defs&gt;&lt;/defs&gt; &lt;path id=&quot;shape0&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 10.393984646722 3.24851063866497)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M384.119 800.308C389.392 800.401 395.079 800.381 401.179 800.248C405.299 800.161 408.469 800.568 410.689 801.468C415.949 803.598 420.779 810.198 420.289 816.268C419.669 823.858 412.349 829.318 404.999 829.328C277.499 829.355 146.952 829.355 13.3589 829.328C8.63888 829.328 4.09888 825.978 1.87888 822.058C-2.73112 813.888 1.52888 803.918 10.4389 801.028C11.9855 800.528 13.9555 800.285 16.3489 800.298C22.1289 800.338 27.6889 800.265 33.0289 800.078C33.1769 800.076 33.3188 800.017 33.4263 799.913C33.5337 799.809 33.5989 799.668 33.6089 799.518C33.7489 797.391 34.0889 795.351 34.6289 793.398C38.5755 779.138 46.7822 768.285 59.2489 760.838C67.2389 756.068 77.9989 753.418 87.8689 753.798C91.7089 753.938 95.6189 754.578 99.3589 753.338C121.612 745.945 138.126 732.518 148.899 713.058C160.649 691.848 162.149 664.098 156.689 640.298C150.949 615.338 135.539 594.358 113.659 581.418C104.759 576.151 97.1322 571.378 90.7789 567.098C79.8722 559.751 69.4389 550.391 59.4789 539.018C41.7922 518.825 28.7222 496.301 20.2689 471.448C13.2089 450.695 9.41555 429.945 8.88888 409.198C8.39555 389.938 9.51888 370.588 12.2589 351.148C15.7689 326.188 18.7489 301.968 22.2689 277.258C23.1955 270.798 23.9055 264.308 24.3989 257.788C25.2922 245.915 26.1489 234.441 26.9689 223.368C28.2189 206.548 28.2189 189.968 28.2289 172.948C28.229 172.665 28.1641 172.386 28.0392 172.133C27.9143 171.88 27.7328 171.659 27.5089 171.488C4.71888 154.278 -3.35112 123.728 10.2489 97.8679C21.8189 75.8479 44.3589 62.0579 69.5789 63.3579C72.9922 63.5379 76.3389 64.1179 79.6189 65.0979C79.7826 65.1468 79.9567 65.1513 80.1235 65.1109C80.2903 65.0705 80.4439 64.9867 80.5689 64.8679C95.3422 50.8279 113.322 44.9613 134.509 47.2679C134.656 47.2852 134.804 47.2536 134.932 47.1778C135.061 47.102 135.161 46.9862 135.219 46.8479C136.972 42.6213 139.372 38.5079 142.419 34.5079C153.299 20.2379 166.749 9.32792 184.089 3.97792C204.569 -2.34875 224.312 -1.12875 243.319 7.63792C258.599 14.6779 272.559 26.6579 280.469 41.6579C280.596 41.9046 280.792 41.9846 281.059 41.8979C289.839 38.9646 299.389 37.9446 309.709 38.8379C326.729 40.3079 342.309 50.4379 353.989 63.2879C354.516 63.8679 355.166 64.1746 355.939 64.2079C361.419 64.4546 366.656 65.5513 371.649 67.4979C392.199 75.5079 406.519 91.1379 411.669 112.968C413.189 119.421 413.456 125.841 412.469 132.228C409.882 148.975 401.956 162.205 388.689 171.918C387.729 172.628 387.729 173.468 387.719 174.528C387.586 191.895 387.899 207.108 388.659 220.168C389.549 235.238 390.999 253.908 393.189 270.758C396.622 297.205 400.169 324.231 403.829 351.838C404.689 358.351 405.536 366.615 406.369 376.628C407.042 384.655 407.406 391.321 407.459 396.628C407.679 420.268 404.476 443.035 397.849 464.928C386.419 502.718 363.929 536.538 333.029 561.268C324.009 568.498 312.959 575.088 302.869 581.488C297.502 584.888 292.979 588.131 289.299 591.218C265.139 611.508 255.039 640.758 256.429 672.398C258.039 709.018 277.959 738.488 312.639 751.718C317.389 753.528 321.449 754.508 326.659 754.038C338.269 753.008 349.089 755.608 359.129 762.058C371.639 770.088 381.589 784.038 383.299 799.558C383.352 800.045 383.626 800.295 384.119 800.308ZM34.9389 123.938C34.6255 130.038 36.5689 135.461 40.7689 140.208C42.9155 142.635 45.5089 143.855 48.5489 143.868C57.4489 143.895 67.6722 143.898 79.2189 143.878C80.8589 143.878 81.9889 142.308 82.5389 140.958C82.6855 140.585 82.6522 140.231 82.4389 139.898C80.5522 136.978 80.8189 134.321 83.2389 131.928C87.7189 127.508 91.8289 130.808 94.8789 134.678C97.7389 138.308 103.749 143.708 108.819 143.768C117.746 143.855 126.882 143.871 136.229 143.818C142.909 143.768 150.429 136.098 154.769 131.618C156.269 130.068 158.029 129.188 160.259 129.608C164.159 130.328 166.106 132.778 166.099 136.958C166.099 138.248 165.299 139.248 164.549 140.218C164.261 140.59 164.13 141.06 164.184 141.527C164.239 141.994 164.474 142.422 164.839 142.718C166.006 143.678 167.326 144.148 168.799 144.128C196.979 143.828 224.629 143.751 251.749 143.898C253.509 143.905 255.106 143.581 256.539 142.928C256.721 142.847 256.872 142.708 256.969 142.533C257.065 142.358 257.101 142.155 257.073 141.955C257.044 141.756 256.951 141.571 256.809 141.428C253.879 138.498 254.059 132.908 257.859 130.608C262.999 127.498 266.539 130.248 269.939 133.818C274.619 138.718 280.959 143.828 287.779 143.838C296.859 143.865 305.789 143.868 314.569 143.848C321.399 143.828 328.259 136.098 332.759 131.638C335.086 129.338 337.459 128.821 339.879 130.088C343.819 132.161 344.612 135.195 342.259 139.188C342.08 139.495 341.983 139.844 341.98 140.198C341.976 140.552 342.066 140.901 342.239 141.208C343.319 143.118 344.959 144.088 347.179 144.068C354.066 144.001 361.086 143.928 368.239 143.848C370.352 143.821 372.149 143.235 373.629 142.088C379.589 137.488 382.416 131.278 382.109 123.458C381.969 109.928 371.589 99.2079 359.169 95.4779C358.953 95.4151 358.724 95.4137 358.51 95.4738C358.296 95.534 358.105 95.6534 357.959 95.8179C355.212 98.9446 351.706 100.435 347.439 100.288C341.069 100.068 338.009 96.4579 335.789 91.1479C332.202 82.5946 326.232 76.3279 317.879 72.3479C307.626 67.4546 296.802 67.5779 285.409 72.7179C282.069 74.2179 279.519 77.4279 276.309 79.4679C269.159 84.0279 261.339 79.8879 260.179 71.8979C258.606 61.0979 253.279 51.6813 244.199 43.6479C217.109 19.6679 175.399 28.6579 160.839 61.6279C158.766 66.3279 157.699 70.8946 157.639 75.3279C157.559 80.8679 155.339 86.2279 149.929 88.1679C144.262 90.2146 139.372 89.0513 135.259 84.6779C133.749 83.0679 132.859 81.0279 131.499 79.3379C131.286 79.0646 131.012 78.8779 130.679 78.7779C128.472 78.1113 126.346 77.8213 124.299 77.9079C113.326 78.3813 104.429 83.1579 97.6089 92.2379C94.2189 96.7479 94.0089 102.468 90.0089 106.458C86.8589 109.588 81.6689 110.618 77.7089 108.488C73.0155 105.968 70.9422 101.938 71.4889 96.3979C71.5755 95.5313 71.1922 95.0446 70.3389 94.9379C59.7789 93.5446 50.8422 96.5046 43.5289 103.818C38.0555 109.291 35.1922 115.998 34.9389 123.938ZM70.3189 172.868L60.5489 172.868C60.0022 172.868 59.7255 173.141 59.7189 173.688C59.4855 194.395 58.5655 214.878 56.9589 235.138C56.6655 238.818 56.5355 242.431 56.5689 245.978C56.5689 246.378 56.7689 246.578 57.1689 246.578L287.389 246.598L306.739 246.558L315.789 246.558C316.622 246.558 317.009 246.145 316.949 245.318C315.196 221.491 313.862 197.675 312.949 173.868C312.939 173.596 312.822 173.339 312.625 173.151C312.427 172.963 312.163 172.858 311.889 172.858L302.559 172.868L102.799 172.818L85.9489 172.788ZM345.659 172.918L336.369 172.938C335.276 172.938 334.742 173.485 334.769 174.578C335.302 197.585 336.822 220.561 339.329 243.508C339.429 244.421 339.629 245.291 339.929 246.118C339.981 246.258 340.075 246.379 340.199 246.463C340.322 246.547 340.469 246.591 340.619 246.588L349.349 246.478L358.959 246.388C359.056 246.388 359.152 246.362 359.234 246.311C359.317 246.259 359.384 246.186 359.427 246.099C359.47 246.012 359.488 245.915 359.479 245.818C358.169 231.648 357.729 217.678 356.929 203.398C356.396 193.905 356.209 183.971 356.369 173.598C356.371 173.466 356.337 173.335 356.273 173.221C356.208 173.106 356.114 173.011 356.001 172.945C355.888 172.88 355.759 172.846 355.629 172.848ZM285.139 272.498L66.0789 272.778L56.5789 272.838C56.2688 272.842 55.9676 272.941 55.7169 273.122C55.4662 273.302 55.2782 273.556 55.1789 273.848C53.5922 278.475 52.3889 283.555 51.5689 289.088C50.7689 294.528 50.0622 299.925 49.4489 305.278C45.8889 336.418 40.7589 367.688 40.1089 398.048C39.6822 418.115 42.5555 438.068 48.7289 457.908C57.0789 484.768 71.6889 508.708 92.4189 527.918C99.6455 535.011 106.386 540.555 112.639 544.548C120.992 549.888 128.172 554.048 134.179 557.028C152.646 566.188 172.619 571.811 194.099 573.898C204.712 574.931 216.622 574.575 229.829 572.828C240.356 571.415 249.986 569.291 258.719 566.458C291.679 555.758 320.169 534.368 341.689 507.238C357.689 487.038 368.109 461.898 373.119 436.298C376.719 417.938 377.099 398.938 375.549 380.068C373.189 351.368 369.499 324.108 365.409 293.848C364.422 286.581 363.209 279.731 361.769 273.298C361.729 273.128 361.634 272.976 361.499 272.867C361.365 272.758 361.199 272.699 361.029 272.698ZM175.049 601.798L173.779 601.438C173.706 601.418 173.627 601.42 173.555 601.444C173.482 601.467 173.419 601.512 173.372 601.571C173.326 601.631 173.299 601.702 173.295 601.776C173.29 601.851 173.309 601.925 173.349 601.988C181.216 615.461 186.096 629.798 187.989 644.998C191.409 672.498 189.379 702.208 176.579 727.128C176.519 727.245 176.501 727.378 176.529 727.506C176.556 727.635 176.626 727.75 176.728 727.832C176.831 727.914 176.958 727.959 177.089 727.958L184.889 727.958L212.439 727.998L239.709 727.978C239.797 727.978 239.883 727.947 239.952 727.892C240.021 727.837 240.069 727.76 240.088 727.674C240.108 727.588 240.097 727.497 240.059 727.418C237.179 721.278 233.859 715.348 231.849 708.858C226.049 690.188 225.419 668.538 227.059 648.518C228.539 630.531 233.812 615.041 242.879 602.048C243.406 601.301 243.229 601.051 242.349 601.298C237.362 602.725 232.109 603.628 226.589 604.008C209.329 605.188 192.149 604.451 175.049 601.798ZM222.789 744.938L176.989 744.988L164.659 745.098C164.465 745.098 164.274 745.14 164.1 745.221C163.925 745.302 163.771 745.421 163.649 745.568C156.089 754.508 148.589 762.038 139.249 767.968C138.469 768.461 138.542 768.711 139.469 768.718L156.889 768.828L252.749 768.818C260.109 768.858 267.559 768.855 275.099 768.808C276.206 768.801 277.269 768.665 278.289 768.398C278.709 768.285 278.732 768.118 278.359 767.898C268.546 762.031 260.359 754.481 253.799 745.248C253.572 744.935 253.266 744.781 252.879 744.788ZM86.8189 800.748L255.819 800.808L353.109 800.688C353.226 800.687 353.341 800.651 353.437 800.584C353.534 800.517 353.608 800.422 353.649 800.312C353.69 800.202 353.697 800.082 353.669 799.968C352.002 793.395 347.412 788.538 339.899 785.398L239.059 785.248C221.492 784.995 203.922 784.911 186.349 784.998C151.302 785.178 116.719 785.111 82.5989 784.798C73.5889 784.718 65.6689 791.198 63.5189 799.828C63.4885 799.952 63.4965 800.082 63.5417 800.201C63.5869 800.32 63.6672 800.423 63.7721 800.496C63.8769 800.568 64.0014 800.608 64.1289 800.608Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape1&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6223046875 4.3066710451255)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.17 93.3591L341.7 94.8091C341.347 94.9025 341.043 95.0758 340.79 95.3291C334.81 101.209 327.56 101.079 319.06 100.739C316.15 100.619 313.98 99.6891 312.72 96.9491C310.21 91.4791 305.03 84.9891 298.07 88.5091C296.217 89.4491 294.677 90.6225 293.45 92.0291C288.01 98.2791 282.29 103.559 274.1 105.299C270.267 106.112 266.1 106.416 261.6 106.209C253.04 105.819 244.67 101.199 239.15 94.8491C232.37 87.0391 226.88 84.2491 219.24 92.9691C214.89 97.9391 209.89 101.049 202.97 101.219C196.37 101.379 189.917 101.426 183.61 101.359C182.93 101.352 182.43 100.989 182.11 100.269C182.01 100.04 181.975 99.7876 182.008 99.5391C182.042 99.2906 182.143 99.0554 182.3 98.8591C183.04 97.9325 183.813 97.0725 184.62 96.2791C187.09 93.8491 185.64 89.9291 183.51 87.8291C180.65 85.0091 175.91 85.9891 173.39 88.9391C172.23 90.2925 171.17 91.6391 170.21 92.9791C163.5 102.299 152.67 101.929 142.47 100.679C134.9 99.7591 131.64 94.3891 126.62 89.6591C123.633 86.8525 120.593 86.8391 117.5 89.6191C112.63 93.9791 108.24 99.7591 102.47 102.719C88.07 110.129 72.61 106.679 62.57 94.0391C58.62 89.0591 52.95 85.2191 47.21 90.7591C44.54 93.3491 43.94 96.9991 40.53 99.0891C36.59 101.509 29.55 101.139 24.26 101.029C18.64 100.899 13.25 100.999 9.85 97.1991C7.82 94.9191 4 93.8291 2.11 96.9691C1.02333 98.7691 0.446667 98.6225 0.38 96.5291C0.366667 95.9891 0.24 95.0925 0 93.8391C0.253333 85.8991 3.11667 79.1925 8.59 73.7191C15.9033 66.4058 24.84 63.4458 35.4 64.8391C36.2533 64.9458 36.6367 65.4325 36.55 66.2991C36.0033 71.8391 38.0767 75.8691 42.77 78.3891C46.73 80.5191 51.92 79.4891 55.07 76.3591C59.07 72.3691 59.28 66.6491 62.67 62.1391C69.49 53.0591 78.3867 48.2825 89.36 47.8091C91.4067 47.7225 93.5333 48.0125 95.74 48.6791C96.0733 48.7791 96.3467 48.9658 96.56 49.2391C97.92 50.9291 98.81 52.9691 100.32 54.5791C104.433 58.9525 109.323 60.1158 114.99 58.0691C120.4 56.1291 122.62 50.7691 122.7 45.2291C122.76 40.7958 123.827 36.2291 125.9 31.5291C140.46 -1.44087 182.17 -10.4309 209.26 13.5491C218.34 21.5825 223.667 30.9991 225.24 41.7991C226.4 49.7891 234.22 53.9291 241.37 49.3691C244.58 47.3291 247.13 44.1191 250.47 42.6191C261.863 37.4791 272.687 37.3558 282.94 42.2491C291.293 46.2291 297.263 52.4958 300.85 61.0491C303.07 66.3591 306.13 69.9691 312.5 70.1891C316.767 70.3358 320.273 68.8458 323.02 65.7191C323.166 65.5546 323.357 65.4352 323.571 65.3751C323.785 65.3149 324.014 65.3163 324.23 65.3791C336.65 69.1091 347.03 79.8291 347.17 93.3591Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape2&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6211575655465 7.33540715628013)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.203 7.20842C347.509 15.0284 344.683 21.2384 338.723 25.8384C337.243 26.9851 335.446 27.5718 333.333 27.5984C326.179 27.6784 319.159 27.7518 312.273 27.8184C310.053 27.8384 308.413 26.8684 307.333 24.9584C307.159 24.651 307.07 24.3028 307.074 23.9484C307.077 23.594 307.173 23.2458 307.353 22.9384C309.706 18.9451 308.913 15.9118 304.973 13.8384C302.553 12.5718 300.179 13.0884 297.853 15.3884C293.353 19.8484 286.493 27.5784 279.663 27.5984C270.883 27.6184 261.953 27.6151 252.873 27.5884C246.053 27.5784 239.713 22.4684 235.033 17.5684C231.633 13.9984 228.093 11.2484 222.953 14.3584C219.153 16.6584 218.973 22.2484 221.903 25.1784C222.045 25.3214 222.137 25.5067 222.166 25.706C222.195 25.9053 222.159 26.108 222.062 26.2834C221.966 26.4588 221.815 26.5975 221.633 26.6784C220.199 27.3318 218.603 27.6551 216.843 27.6484C189.723 27.5018 162.073 27.5784 133.893 27.8784C132.419 27.8984 131.099 27.4284 129.933 26.4684C129.567 26.1723 129.332 25.7446 129.278 25.2775C129.224 24.8105 129.355 24.3403 129.643 23.9684C130.393 22.9984 131.193 21.9984 131.193 20.7084C131.199 16.5284 129.253 14.0784 125.353 13.3584C123.123 12.9384 121.363 13.8184 119.863 15.3684C115.523 19.8484 108.003 27.5184 101.323 27.5684C91.976 27.6218 82.8393 27.6051 73.9126 27.5184C68.8426 27.4584 62.8326 22.0584 59.9726 18.4284C56.9226 14.5584 52.8126 11.2584 48.3326 15.6784C45.9126 18.0718 45.646 20.7284 47.5326 23.6484C47.746 23.9818 47.7793 24.3351 47.6326 24.7084C47.0826 26.0584 45.9526 27.6284 44.3126 27.6284C32.766 27.6484 22.5426 27.6451 13.6426 27.6184C10.6026 27.6051 8.0093 26.3851 5.86263 23.9584C1.66263 19.2118 -0.280704 13.7884 0.0326292 7.68842C0.272629 8.94175 0.399296 9.83842 0.412629 10.3784C0.479296 12.4718 1.05596 12.6184 2.14263 10.8184C4.03263 7.67842 7.85263 8.76842 9.88263 11.0484C13.2826 14.8484 18.6726 14.7484 24.2926 14.8784C29.5826 14.9884 36.6226 15.3584 40.5626 12.9384C43.9726 10.8484 44.5726 7.19842 47.2426 4.60842C52.9826 -0.931581 58.6526 2.90842 62.6026 7.88842C72.6426 20.5284 88.1026 23.9784 102.503 16.5684C108.273 13.6084 112.663 7.82842 117.533 3.46842C120.626 0.688419 123.666 0.701752 126.653 3.50842C131.673 8.23842 134.933 13.6084 142.503 14.5284C152.703 15.7784 163.533 16.1484 170.243 6.82842C171.203 5.48842 172.263 4.14175 173.423 2.78842C175.943 -0.161581 180.683 -1.14158 183.543 1.67842C185.673 3.77842 187.123 7.69842 184.653 10.1284C183.846 10.9218 183.073 11.7818 182.333 12.7084C182.175 12.9047 182.074 13.1399 182.041 13.3884C182.007 13.6369 182.043 13.8894 182.143 14.1184C182.463 14.8384 182.963 15.2018 183.643 15.2084C189.949 15.2751 196.403 15.2284 203.003 15.0684C209.923 14.8984 214.923 11.7884 219.273 6.81842C226.913 -1.90158 232.403 0.888419 239.183 8.69842C244.703 15.0484 253.073 19.6684 261.633 20.0584C266.133 20.2651 270.299 19.9618 274.133 19.1484C282.323 17.4084 288.043 12.1284 293.483 5.87842C294.709 4.47175 296.249 3.29842 298.103 2.35842C305.063 -1.16158 310.243 5.32842 312.753 10.7984C314.013 13.5384 316.183 14.4684 319.093 14.5884C327.593 14.9284 334.843 15.0584 340.823 9.17842C341.076 8.92509 341.379 8.75175 341.733 8.65842Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape3&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.7941352600339 9.3230859375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M17.6779 0C16.5513 11.84 15.9213 19.36 15.7879 22.56C15.3079 33.9733 14.6346 46.28 13.7679 59.48C13.6013 62.04 13.1046 63.7467 12.2779 64.6C8.55793 68.45 -0.30207 67.53 0.00793038 61.06C1.34793 33.3133 2.02793 12.9867 2.04793 0.08Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape4&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9413128810975 9.32414062500001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M201.657 0.05C201.63 7.10333 201.687 11.5967 201.827 13.53C203.28 33.53 204.617 53.6 205.837 73.74L186.487 73.78L193.557 73.61C193.714 73.6076 193.867 73.5609 193.998 73.4752C194.129 73.3896 194.234 73.2685 194.299 73.126C194.364 72.9835 194.388 72.8254 194.367 72.67C193.367 64.75 192.894 56.7733 192.947 48.74C196.9 43.82 196.69 38.93 192.317 34.07C191.537 32.47 191.137 31.2867 191.117 30.52C190.984 25.7933 191.01 21.2667 191.197 16.94C191.213 16.5684 191.128 16.1993 190.951 15.872C190.773 15.5446 190.51 15.2711 190.189 15.0807C189.868 14.8902 189.501 14.7897 189.127 14.79L153.317 14.9C152.777 12.9667 151.747 11.28 150.227 9.84C148.927 8.60667 147.257 7.7 145.217 7.12C138.364 5.17333 133.557 7.71667 130.797 14.75C116.39 14.8967 101.944 14.9467 87.4571 14.9C61.1271 14.81 34.7871 15.13 8.5371 15.06C6.00377 15.0533 4.15377 14.7633 2.9871 14.19C0.773767 13.11 -0.209566 11.2233 0.0371003 8.53C0.150434 7.29667 0.770434 4.45333 1.8971 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape5&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.5460546875 9.32519283839548)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M3.69 73.6301L0 0.0700704L9.97 7.03745e-05C10.1004 -0.00175254 10.2289 0.031869 10.3421 0.0974247C10.4553 0.16298 10.5492 0.258107 10.6139 0.372872C10.6786 0.487637 10.7118 0.617903 10.71 0.75007C10.55 11.1234 10.7367 21.0567 11.27 30.5501C12.07 44.8301 12.51 58.8001 13.82 72.9701C13.8293 73.0668 13.8114 73.1643 13.7681 73.2514C13.7249 73.3384 13.6581 73.4116 13.5754 73.4627C13.4926 73.5137 13.3972 73.5405 13.3 73.5401Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape6&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.3825550063776 9.3230859375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M13.7551 0.08C13.7351 12.9867 13.0551 33.3133 11.7151 61.06C11.4051 67.53 20.2651 68.45 23.9851 64.6C24.8118 63.7467 25.3084 62.04 25.4751 59.48C26.3418 46.28 27.0151 33.9733 27.4951 22.56C27.6284 19.36 28.2584 11.84 29.3851 0L46.2351 0.03C45.1084 4.48333 44.4884 7.32667 44.3751 8.56C44.1284 11.2533 45.1118 13.14 47.3251 14.22C48.4918 14.7933 50.3418 15.0833 52.8751 15.09C79.1251 15.16 105.465 14.84 131.795 14.93C146.282 14.9767 160.728 14.9267 175.135 14.78C174.568 20.8133 176.498 24.9267 180.925 27.12C183.338 28.3133 185.805 28.72 188.325 28.34C194.755 27.36 198.095 21.26 197.655 14.93L233.465 14.82C233.839 14.8197 234.206 14.9202 234.527 15.1107C234.848 15.3011 235.111 15.5746 235.289 15.902C235.466 16.2293 235.551 16.5984 235.535 16.97C235.348 21.2967 235.322 25.8233 235.455 30.55C235.475 31.3167 235.875 32.5 236.655 34.1C232.788 31.5133 229.168 30.99 225.795 32.53C211.935 38.83 224.195 59.55 237.285 48.77C237.232 56.8033 237.705 64.78 238.705 72.7C238.726 72.8554 238.702 73.0135 238.637 73.156C238.572 73.2985 238.467 73.4196 238.336 73.5052C238.205 73.5909 238.052 73.6376 237.895 73.64L230.825 73.81L0.605102 73.79C0.205102 73.79 0.00510204 73.59 0.00510204 73.19C-0.0282313 69.6433 0.101769 66.03 0.395102 62.35C2.00177 42.09 2.92177 21.6067 3.1551 0.9C3.16177 0.353333 3.43844 0.08 3.9851 0.08ZM127.005 36.5C127.005 34.413 126.456 32.3624 125.412 30.555C124.369 28.7476 122.867 27.2464 121.06 26.203C119.253 25.1595 117.202 24.61 115.115 24.61C111.963 24.61 108.937 25.8635 106.708 28.0925C104.479 30.3215 103.225 33.3478 103.225 36.5C103.225 39.6522 104.479 42.6785 106.708 44.9075C108.937 47.1365 111.963 48.39 115.115 48.39C117.202 48.39 119.253 47.8405 121.06 46.797C122.867 45.7536 124.369 44.2524 125.412 42.445C126.456 40.6376 127.005 38.587 127.005 36.5ZM75.9704 37.4184C76.0574 34.3019 74.8637 31.2741 72.6541 29.007C70.4445 26.7398 67.3954 25.4143 64.1835 25.3246C62.057 25.2652 59.9523 25.7501 58.0818 26.7303C56.2114 27.7105 54.6403 29.152 53.5271 30.9092C52.414 32.6664 51.7974 34.6782 51.7398 36.7416C51.6528 39.8581 52.8465 42.8859 55.0561 45.153C57.2657 47.4202 60.3148 48.7457 63.5267 48.8354C65.6532 48.8948 67.7579 48.4099 69.6284 47.4297C71.4988 46.4495 73.0699 45.008 74.1831 43.2508C75.2962 41.4936 75.9128 39.4818 75.9704 37.4184ZM183.874 50.7982C183.856 49.4819 183.468 48.1937 182.749 47.0635C182.03 45.9334 181.006 45.0007 179.779 44.3595C178.552 43.7184 177.166 43.3911 175.76 43.4107C173.637 43.4404 171.61 44.2595 170.128 45.6863C168.646 47.1131 167.828 49.0336 167.856 51.0218C167.874 52.3381 168.262 53.6263 168.981 54.7565C169.7 55.8866 170.725 56.8193 171.951 57.4605C173.178 58.1016 174.564 58.4289 175.97 58.4093C178.093 58.3796 180.121 57.5605 181.603 56.1337C183.084 54.7069 183.902 52.7864 183.874 50.7982Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape7&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.0305953125001 9.32554685349047)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.0064 0.0100006L9.3364 6.11826e-07C9.61064 -0.000292647 9.87453 0.104847 10.0721 0.293135C10.2697 0.481423 10.3861 0.738544 10.3964 1.01C11.3097 24.8167 12.6431 48.6333 14.3964 72.46C14.4564 73.2867 14.0697 73.7 13.2364 73.7L4.1864 73.7C2.9664 53.56 1.62973 33.49 0.1764 13.49C0.0364 11.5567 -0.0202667 7.06333 0.0064 0.0100006Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape8&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1631696428572 9.32765624999999)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M10.891 0L14.581 73.56L5.85095 73.67C5.70139 73.6731 5.55452 73.6294 5.43088 73.5452C5.30724 73.461 5.21287 73.3403 5.16095 73.2C4.86095 72.3733 4.66095 71.5033 4.56095 70.59C2.05429 47.6433 0.534286 24.6667 0.000952381 1.66C-0.0257143 0.566667 0.507619 0.02 1.60095 0.02Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape9&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.5362571970961 9.55219950584632)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.6165 8.41299C23.0565 14.743 19.7165 20.843 13.2865 21.823C10.7665 22.203 8.2998 21.7963 5.88646 20.603C1.4598 18.4097 -0.470205 14.2963 0.0964619 8.26299C2.85646 1.22966 7.66313 -1.31367 14.5165 0.632992C16.5565 1.21299 18.2265 2.11966 19.5265 3.35299C21.0465 4.79299 22.0765 6.47966 22.6165 8.41299Z&quot;&gt;&lt;/path&gt; &lt;circle id=&quot;shape10&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.0115625 10.18828125)&quot; r=&quot;11.89&quot; cx=&quot;11.89&quot; cy=&quot;11.89&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape11&quot; transform=&quot;matrix(0.0351425431068875 0.000981620111375468 -0.000981620111375468 0.0351425431068875 14.2130771675543 10.2015061448131)&quot; rx=&quot;12.12&quot; ry=&quot;11.76&quot; cx=&quot;12.12&quot; cy=&quot;11.76&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape12&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 20.1057469902912 10.4364122450525)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M16.9732 2.43205C21.3465 7.29205 21.5565 12.1821 17.6032 17.1021C4.5132 27.8821 -7.7468 7.16205 6.1132 0.862052C9.48653 -0.677948 13.1065 -0.154615 16.9732 2.43205Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape13&quot; transform=&quot;matrix(0.0351528231097021 -0.000490857902548076 0.000490857902548076 0.0351528231097021 18.2800569526222 10.8531762234766)&quot; rx=&quot;8.01&quot; ry=&quot;7.5&quot; cx=&quot;8.01&quot; cy=&quot;7.5&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape14&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.47390625 12.828515625)&quot; fill=&quot;rgb(25,16,15)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0 300.33C1.52 298.69 3.53 298.057 6.03 298.43C6.10297 298.443 6.17377 298.447 6.24 298.44C6.65333 298.413 6.88667 298.26 6.94 297.98C7 297.66 7.19333 297.493 7.52 297.48L10.29 297.39C10.4233 297.383 10.5567 297.367 10.69 297.34C11.0167 297.267 11.1733 297.127 11.16 296.92C11.1467 296.7 11.2467 296.563 11.46 296.51C12.1467 296.337 12.7433 295.997 13.25 295.49C13.49 295.257 13.58 294.973 13.52 294.64C13.1333 292.653 12.8767 290.647 12.75 288.62C12.69 287.79 12.27 287.35 11.7 286.83C11.4533 286.603 11.3933 286.337 11.52 286.03C11.8533 285.197 11.6767 284.573 10.99 284.16C10.7367 284 10.46 283.923 10.16 283.93L6.56 284.02C15.1 281.92 21.0833 280.04 24.51 278.38C27.5033 276.927 30.4033 275.357 33.21 273.67C33.319 273.603 33.3974 273.495 33.4282 273.371C33.4589 273.246 33.4397 273.115 33.3746 273.004C33.3096 272.894 33.2037 272.813 33.08 272.78C32.5067 272.62 31.9433 272.67 31.39 272.93C63.5767 260.003 88.4967 238.95 106.15 209.77C109.223 204.703 112.093 199 114.76 192.66C118.06 184.807 120.343 178.587 121.61 174C123.097 168.613 124.457 162.397 125.69 155.35C126.657 149.857 126.873 144.25 126.34 138.53C127.853 138.57 128.907 138.097 129.5 137.11C131.56 133.67 131.433 130.473 129.12 127.52C128.24 126.39 127.07 126.39 125.77 126.38C120.017 126.347 114.427 126.37 109 126.45C108.613 125.77 108.27 125.09 107.97 124.41C107.69 123.77 107.527 123.037 107.48 122.21C106.953 112.977 106.213 103.723 105.26 94.45C110.127 94.5633 114.617 94.5833 118.73 94.51C121.27 94.47 123.93 94.86 126 93.31C128.053 91.77 128.717 89.61 127.99 86.83C127.23 83.89 124.98 82.2967 121.24 82.05L120.9 72.32C124.973 70.3667 126.23 67.5767 124.67 63.95C123.697 61.6833 121.82 60.52 119.04 60.46C117.273 58.24 116.223 56.5633 115.89 55.43C113.43 47.1033 110.547 38.9133 107.24 30.86C106.947 30.1467 107 29.0333 107.4 27.52C109.087 27.4933 110.883 27.5267 112.79 27.62C115.45 27.7533 117.403 26.9667 118.65 25.26C121.02 22.01 120.02 17.98 116.55 16.23C115.597 15.75 114.193 15.5133 112.34 15.52C107.533 15.54 102.823 15.4767 98.21 15.33C97.6033 13.9433 96.9433 12.6033 96.23 11.31C94.38 7.96 93.99 4.82 92.56 1.46C92.4467 1.18667 92.5067 0.963333 92.74 0.79L93.19 0.46C93.4567 0.273333 93.4267 0.176667 93.1 0.17L55.31 0L131.2 0.2C131.371 0.200762 131.536 0.26037 131.671 0.369176C131.805 0.477981 131.9 0.629779 131.94 0.8C133.38 7.23333 134.593 14.0833 135.58 21.35C139.67 51.61 143.36 78.87 145.72 107.57C147.27 126.44 146.89 145.44 143.29 163.8C138.28 189.4 127.86 214.54 111.86 234.74C90.34 261.87 61.85 283.26 28.89 293.96C20.1567 296.793 10.5267 298.917 0 300.33Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape15&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.2758764491296 12.828515625)&quot; fill=&quot;rgb(74,39,39)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M231.61 0L269.4 0.17C269.726 0.176667 269.756 0.273333 269.49 0.46L269.04 0.79C268.806 0.963333 268.746 1.18667 268.86 1.46C270.29 4.82 270.68 7.96 272.53 11.31C273.243 12.6033 273.903 13.9433 274.51 15.33C268.76 17.07 269.07 27.78 275.82 27.53C278.38 27.43 281.006 27.4267 283.7 27.52C283.3 29.0333 283.246 30.1467 283.54 30.86C286.846 38.9133 289.73 47.1033 292.19 55.43C292.523 56.5633 293.573 58.24 295.34 60.46C290.98 60.76 286.806 61.0267 282.82 61.26C277.7 61.56 274.45 67.2 278.08 71.26C278.86 72.1333 280.413 72.6 282.74 72.66C287.386 72.7733 292.206 72.66 297.2 72.32L297.54 82.05C293.013 81.9567 288.443 81.9633 283.83 82.07C281.84 82.11 280.61 82.75 279.5 84.26C276.44 88.44 277.126 91.8367 281.56 94.45C282.513 103.723 283.253 112.977 283.78 122.21C283.826 123.037 283.99 123.77 284.27 124.41C284.57 125.09 284.913 125.77 285.3 126.45C282.193 127.497 280.633 129.463 280.62 132.35C280.613 134.79 281.763 136.753 284.07 138.24C281.93 156.593 277.493 173.123 270.76 187.83C261.606 207.817 247.22 225.063 227.6 239.57C218.546 246.263 208.406 252.023 197.18 256.85C191.52 259.28 187.21 264.45 191.61 270.42C195.03 275.03 202.58 274.56 207.69 272.93C208.243 272.67 208.806 272.62 209.38 272.78C209.503 272.813 209.609 272.894 209.674 273.004C209.739 273.115 209.758 273.246 209.728 273.371C209.697 273.495 209.619 273.603 209.51 273.67C206.703 275.357 203.803 276.927 200.81 278.38C197.383 280.04 191.4 281.92 182.86 284.02C165.386 287.427 148.786 288.113 133.06 286.08C116.433 283.94 99.2895 279.17 81.6295 271.77C75.1162 269.043 68.6828 266.14 62.3295 263.06C54.3762 259.2 46.8962 254.463 39.8895 248.85C40.5695 248.377 41.3595 247.947 42.2595 247.56C44.5695 246.55 46.3695 244.3 44.1695 241.99C29.1962 226.303 18.1928 209.247 11.1595 190.82C1.95285 166.687 -1.55715 141.62 0.629514 115.62C2.01618 99.0867 3.45618 82.5733 4.94951 66.08C5.49618 59.9533 6.20618 53.32 7.07951 46.18C8.95285 30.8733 10.7762 15.5733 12.5495 0.28ZM230.747 11.7302C228.758 9.7412 226.058 8.62261 223.245 8.62261C220.432 8.62261 217.731 9.7412 215.742 11.7302L213.89 13.5829C211.901 15.5719 210.782 18.2724 210.782 21.0853C210.782 23.8982 211.901 26.5987 213.89 28.5877L215.092 29.7898C217.081 31.7788 219.781 32.8974 222.594 32.8974C225.407 32.8974 228.108 31.7788 230.097 29.7898L231.949 27.9371C233.938 25.9481 235.057 23.2476 235.057 20.4347C235.057 17.6218 233.938 14.9213 231.949 12.9323ZM47.1595 186.78C39.7128 170.84 35.7195 154.833 35.1795 138.76C34.9528 131.94 35.0895 124.72 35.5895 117.1C37.1495 93.44 39.2662 67.4833 41.9395 39.23C42.3395 35.0167 42.6262 30.7267 42.7995 26.36C43.4195 10.9 25.2095 12.45 24.4195 25.69C23.0462 48.79 21.1195 72.2233 18.6395 95.99C17.6595 105.337 16.9995 114.63 16.6595 123.87C16.3328 132.65 16.6595 140.653 17.6395 147.88C19.5062 161.707 22.9728 175.147 28.0395 188.2C29.1795 191.153 30.6662 194.07 32.4995 196.95C35.2995 201.37 41.5395 202.72 45.3395 198.89C48.7328 195.483 49.3395 191.447 47.1595 186.78ZM87.1943 37.8021C86.8236 36.4743 85.902 35.3574 84.6342 34.6994C83.3663 34.0413 81.8534 33.8945 80.4311 34.2916C79.0088 34.6887 77.7908 35.598 77.0472 36.8177C76.3037 38.0374 76.094 39.4701 76.4647 40.7979C76.8355 42.1257 77.757 43.2426 79.0249 43.9006C80.2927 44.5587 81.8056 44.7055 83.2279 44.3084C84.6502 43.9113 85.8682 43.002 86.6118 41.7823C87.3554 40.5626 87.565 39.1299 87.1943 37.8021ZM242.9 63.3691C242.905 60.5116 242.14 57.7024 240.682 55.2252C239.224 52.7479 237.124 50.6888 234.594 49.2556C232.064 47.8225 229.192 47.0651 226.268 47.06C223.344 47.0549 220.469 47.8022 217.934 49.2266C215.399 50.6509 213.292 52.7027 211.826 55.1748C210.359 57.6469 209.585 60.4534 209.58 63.3109C209.575 66.1684 210.34 68.9776 211.797 71.4548C213.255 73.9321 215.355 75.9912 217.885 77.4244C220.415 78.8575 223.287 79.6149 226.211 79.62C229.135 79.6251 232.01 78.8778 234.545 77.4534C237.08 76.0291 239.187 73.9773 240.653 71.5052C242.12 69.0331 242.895 66.2266 242.9 63.3691ZM85.9041 71.8823C88.1531 72.912 90.7367 72.9736 93.0816 72.0534C95.4266 71.1333 97.3455 69.3049 98.4127 66.9739C99.1193 65.4306 99.4215 63.7348 99.2889 62.0574C99.1563 60.38 98.5935 58.7796 97.6572 57.4176C96.721 56.0556 95.4439 54.9794 93.9549 54.2977C91.7059 53.268 89.1223 53.2064 86.7774 54.1266C84.4325 55.0467 82.5135 56.8751 81.4463 59.2061C80.7398 60.7494 80.4375 62.4452 80.5701 64.1226C80.7028 65.8 81.2656 67.4004 82.2018 68.7624C83.1381 70.1244 84.4151 71.2006 85.9041 71.8823ZM60.6086 105.171C63.2448 106.638 66.3725 106.974 69.2978 106.105C72.223 105.236 74.7122 103.231 76.213 100.535C77.7138 97.8381 78.1063 94.6659 77.3035 91.7217C76.5007 88.7775 74.5666 86.2966 71.9304 84.8293C69.2942 83.362 66.1665 83.0257 63.2413 83.8948C60.316 84.7639 57.8268 86.7691 56.326 89.4655C54.8252 92.1619 54.4327 95.3341 55.2355 98.2783C56.0384 101.222 57.9724 103.703 60.6086 105.171ZM187.08 98.11C187.08 96.1959 186.318 94.3582 184.965 93.0047C183.611 91.6512 181.774 90.89 179.86 90.89C177.945 90.89 176.108 91.6512 174.754 93.0047C173.401 94.3582 172.64 96.1959 172.64 98.11C172.64 100.024 173.401 101.862 174.754 103.215C176.108 104.569 177.945 105.33 179.86 105.33C181.127 105.33 182.372 104.996 183.47 104.363C184.567 103.729 185.479 102.817 186.112 101.72C186.746 100.623 187.08 99.3773 187.08 98.11ZM234.564 99.0027C233.705 97.863 232.551 96.9774 231.217 96.4351C229.883 95.8929 228.416 95.7129 226.964 95.9133C225.513 96.1138 224.127 96.6877 222.947 97.5771C221.766 98.4665 220.833 99.6405 220.24 100.981C219.647 102.321 219.416 103.78 219.57 105.212C219.723 106.644 220.256 107.998 221.115 109.137C221.974 110.277 223.128 111.163 224.462 111.705C225.796 112.247 227.263 112.427 228.715 112.227C230.166 112.026 231.552 111.452 232.732 110.563C233.913 109.673 234.846 108.499 235.439 107.159C236.032 105.819 236.263 104.36 236.109 102.928C235.956 101.496 235.423 100.142 234.564 99.0027ZM47.9695 214.56C45.1695 220.83 50.0195 225.32 54.0495 229.45C57.6895 233.19 61.8995 236.09 66.6995 232.86C71.8895 229.38 72.0595 223.24 67.9795 218.66C64.2095 214.41 60.6395 209.6 54.3295 209.99C51.4095 210.17 49.1195 211.99 47.9695 214.56Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape16&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.8026079545455 12.838359375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M26.0114 0C24.238 15.2933 22.4147 30.5933 20.5414 45.9C19.668 53.04 18.958 59.6733 18.4114 65.8C16.918 82.2933 15.478 98.8067 14.0914 115.34C11.9047 141.34 15.4147 166.407 24.6214 190.54C31.6547 208.967 42.658 226.023 57.6314 241.71C59.8314 244.02 58.0314 246.27 55.7214 247.28C54.8214 247.667 54.0314 248.097 53.3514 248.57C51.9014 250.07 52.3314 253.14 52.3514 255.14C31.6214 235.93 17.0114 211.99 8.66137 185.13C2.48804 165.29 -0.385293 145.337 0.0413737 125.27C0.691374 94.91 5.82137 63.64 9.38137 32.5C9.99471 27.1467 10.7014 21.75 11.5014 16.31C12.3214 10.7767 13.5247 5.69667 15.1114 1.07C15.2107 0.778294 15.3987 0.524438 15.6494 0.343583C15.9001 0.162728 16.2013 0.0636261 16.5114 0.06Z&quot;&gt;&lt;/path&gt; &lt;rect id=&quot;shape17&quot; transform=&quot;matrix(0.0248592227760896 -0.0248592227760896 0.0248592227760896 0.0248592227760896 19.531681996495 13.569794617477)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; width=&quot;23.84&quot; height=&quot;22.92&quot; rx=&quot;10.61&quot; ry=&quot;10.61&quot;&gt;&lt;/rect&gt; &lt;path id=&quot;shape18&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.857255859375 13.3649990428515)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M30.6225 171.52C32.8025 176.187 32.1958 180.223 28.8025 183.63C25.0025 187.46 18.7625 186.11 15.9625 181.69C14.1292 178.81 12.6425 175.893 11.5025 172.94C6.43583 159.887 2.96917 146.447 1.1025 132.62C0.1225 125.393 -0.204167 117.39 0.1225 108.61C0.4625 99.37 1.1225 90.0767 2.1025 80.73C4.5825 56.9634 6.50917 33.53 7.8825 10.43C8.6725 -2.80997 26.8825 -4.35997 26.2625 11.1C26.0892 15.4667 25.8025 19.7567 25.4025 23.97C22.7292 52.2234 20.6125 78.18 19.0525 101.84C18.5525 109.46 18.4158 116.68 18.6425 123.5C19.1825 139.573 23.1758 155.58 30.6225 171.52Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape19&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.7841415488515 13.3674609375)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.0522 0C8.66553 0.146667 13.3755 0.21 18.1822 0.19C20.0355 0.183333 21.4389 0.42 22.3922 0.9C25.8622 2.65 26.8622 6.68 24.4922 9.93C23.2455 11.6367 21.2922 12.4233 18.6322 12.29C16.7255 12.1967 14.9289 12.1633 13.2422 12.19C10.5489 12.0967 7.9222 12.1 5.3622 12.2C-1.3878 12.45 -1.6978 1.74 4.0522 0Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape20&quot; transform=&quot;matrix(0.0338611839889802 -0.00945421244350544 0.00945421244350544 0.0338611839889802 14.9149266129752 14.0867380565676)&quot; rx=&quot;5.57&quot; ry=&quot;5.2&quot; cx=&quot;5.57&quot; cy=&quot;5.2&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape21&quot; transform=&quot;matrix(0.0351561964539828 6.13592003636124e-05 -6.13592003636124e-05 0.0351561964539828 19.6449060698586 14.4819473774511)&quot; rx=&quot;16.66&quot; ry=&quot;16.28&quot; cx=&quot;16.66&quot; cy=&quot;16.28&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape22&quot; transform=&quot;matrix(-0.0146348716029047 0.031965331958686 -0.031965331958686 -0.0146348716029047 15.8772166930746 14.8739620295146)&quot; rx=&quot;9.67&quot; ry=&quot;9.33&quot; cx=&quot;9.67&quot; cy=&quot;9.33&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape23&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.997793706651 14.9540625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M18.805 0C21.585 0.06 23.4616 1.22333 24.435 3.49C25.995 7.11667 24.7383 9.90667 20.665 11.86C15.6716 12.2 10.8516 12.3133 6.20498 12.2C3.87831 12.14 2.32498 11.6733 1.54498 10.8C-2.08502 6.74 1.16498 1.1 6.28498 0.8C10.2716 0.566667 14.445 0.3 18.805 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape24&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.0361349190606 15.7107890625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M19.9144 0.0653333C23.6544 0.312 25.9044 1.90533 26.6644 4.84533C27.3911 7.62533 26.7277 9.78533 24.6744 11.3253C22.6044 12.8753 19.9444 12.4853 17.4044 12.5253C13.2911 12.5987 8.80105 12.5787 3.93438 12.4653C-0.498949 9.852 -1.18562 6.45533 1.87438 2.27533C2.98438 0.765333 4.21438 0.125333 6.20438 0.0853333C10.8177 -0.0213333 15.3877 -0.028 19.9144 0.0653333Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape25&quot; transform=&quot;matrix(-0.0170977282180133 0.0307185547160906 -0.0307185547160906 -0.0170977282180133 15.1542587716268 16.0053675452257)&quot; rx=&quot;11.64&quot; ry=&quot;11.38&quot; cx=&quot;11.64&quot; cy=&quot;11.38&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;circle id=&quot;shape26&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.345234375 16.0238671875)&quot; r=&quot;7.22&quot; cx=&quot;7.22&quot; cy=&quot;7.22&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape27&quot; transform=&quot;matrix(0.0280770296501001 -0.0211575594076892 0.0211575594076892 0.0280770296501001 19.8774398273616 16.4371069616574)&quot; rx=&quot;8.42&quot; ry=&quot;8.13&quot; cx=&quot;8.42&quot; cy=&quot;8.13&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape28&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1414052368516 17.2710454963236)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.02 12.1647L3.45003 11.8747C1.14336 10.388 -0.00663785 8.42471 2.88184e-05 5.98471C0.0133622 3.09804 1.57336 1.13137 4.68003 0.0847059C10.1067 0.00470588 15.6967 -0.0186275 21.45 0.0147059C22.75 0.0247059 23.92 0.0247059 24.8 1.15471C27.1134 4.10804 27.24 7.30471 25.18 10.7447C24.5867 11.7314 23.5334 12.2047 22.02 12.1647Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape29&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.9485123620206 17.688515625)&quot; fill=&quot;rgb(38,23,22)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M94.2701 0L112.84 0.29C113.373 6.01 113.157 11.6167 112.19 17.11C110.957 24.1567 109.597 30.3733 108.11 35.76C106.843 40.3467 104.56 46.5667 101.26 54.42C98.5934 60.76 95.7234 66.4633 92.6501 71.53C74.9968 100.71 50.0768 121.763 17.8901 134.69C12.7801 136.32 5.23009 136.79 1.81009 132.18C-2.58991 126.21 1.72009 121.04 7.38009 118.61C18.6068 113.783 28.7468 108.023 37.8001 101.33C57.4201 86.8233 71.8068 69.5767 80.9601 49.59C87.6934 34.8833 92.1301 18.3533 94.2701 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape30&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9331058615201 20.210194296345)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.830544 4.59225C1.98054 2.02225 4.27054 0.202251 7.19054 0.0222511C13.5005 -0.367749 17.0705 4.44225 20.8405 8.69225C24.9205 13.2723 24.7505 19.4123 19.5605 22.8923C14.7605 26.1223 10.5505 23.2223 6.91054 19.4823C2.88054 15.3523 -1.96946 10.8623 0.830544 4.59225Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape31&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.6404577789765 21.5771484375)&quot; fill=&quot;rgb(38,23,22)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.07476 0C8.08142 5.61333 15.5614 10.35 23.5148 14.21C29.8681 17.29 36.3014 20.1933 42.8148 22.92C60.4748 30.32 77.6181 35.09 94.2448 37.23C109.971 39.2633 126.571 38.5767 144.045 35.17L147.645 35.08C147.945 35.0733 148.221 35.15 148.475 35.31C149.161 35.7233 149.338 36.3467 149.005 37.18C148.878 37.4867 148.938 37.7533 149.185 37.98C149.755 38.5 150.175 38.94 150.235 39.77C150.361 41.7967 150.618 43.8033 151.005 45.79C151.065 46.1233 150.975 46.4067 150.735 46.64C150.228 47.1467 149.631 47.4867 148.945 47.66C148.731 47.7133 148.631 47.85 148.645 48.07C148.658 48.2767 148.501 48.4167 148.175 48.49C148.041 48.5167 147.908 48.5333 147.775 48.54L145.005 48.63C144.678 48.6433 144.485 48.81 144.425 49.13C144.371 49.41 144.138 49.5633 143.725 49.59C143.659 49.5967 143.588 49.5933 143.515 49.58C141.015 49.2067 139.005 49.84 137.485 51.48C124.278 53.2267 112.368 53.5833 101.755 52.55C80.2748 50.4633 60.3014 44.84 41.8348 35.68C35.8281 32.7 28.6481 28.54 20.2948 23.2C14.0414 19.2067 7.30142 13.6633 0.0747565 6.57C0.0547565 4.57 -0.375243 1.5 1.07476 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape32&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.548046875 24.3846604970638)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M37.39 126.792L36.84 125.732C36.6867 125.445 36.61 125.139 36.61 124.812L36.29 50.1519C39.97 50.1319 42.74 50.0419 44.93 47.3519C46.0567 45.9652 46.4067 44.4152 45.98 42.7019C44.81 38.0219 40.08 37.5119 35.72 37.6019L35.91 26.2919C40.16 26.9019 44.77 27.8519 48.81 25.9619C52.26 24.3519 53.31 20.2319 50.85 17.2519C48.51 14.4319 45.36 14.2119 41.99 14.2719C35.7567 14.3852 29.3167 14.4052 22.67 14.3319C19.49 14.3019 16.81 15.9619 15.14 18.6319C15.2 16.6619 12.86 15.6819 11.44 14.7519C10.6133 14.2119 9.90667 13.5852 9.32 12.8719C6.57333 9.53188 3.78 6.23188 0.94 2.97188C0.46 2.41855 0.146667 1.62521 0 0.591879C17.1 3.24521 34.28 3.98188 51.54 2.80188C57.06 2.42188 62.3133 1.51855 67.3 0.0918792C68.18 -0.154787 68.3567 0.0952125 67.83 0.841879C58.7633 13.8352 53.49 29.3252 52.01 47.3119C50.37 67.3319 51 88.9819 56.8 107.652C58.81 114.142 62.13 120.072 65.01 126.212C65.0485 126.291 65.0589 126.382 65.0394 126.468C65.02 126.554 64.9718 126.631 64.9029 126.686C64.834 126.741 64.7483 126.772 64.66 126.772Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape33&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.486355851717 24.3923298330305)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.75477 0.373729C1.90143 1.40706 2.21477 2.2004 2.69477 2.75373C5.53477 6.01373 8.3281 9.31373 11.0748 12.6537C11.6614 13.3671 12.3681 13.9937 13.1948 14.5337C14.6148 15.4637 16.9548 16.4437 16.8948 18.4137L16.5848 19.0537C15.9714 19.3604 15.6748 19.8204 15.6948 20.4337C15.8148 23.3437 16.3448 26.1237 18.0248 28.6937C19.9714 31.6737 22.1714 34.5471 24.6248 37.3137C19.6548 39.6737 18.5548 46.9937 24.3448 49.3137C24.1981 53.2071 24.2048 57.1237 24.3648 61.0637C24.5581 65.7371 24.5748 69.6437 24.4148 72.7837C24.2014 77.0371 23.9914 81.3304 23.7848 85.6637C23.1248 99.8304 19.6748 113.244 13.4348 125.904C13.2814 126.21 13.0314 126.384 12.6848 126.424L11.5948 126.534L3.79477 126.534C3.66373 126.534 3.5364 126.49 3.43437 126.408C3.33234 126.325 3.26171 126.21 3.23447 126.082C3.20722 125.954 3.22499 125.82 3.28477 125.704C16.0848 100.784 18.1148 71.0737 14.6948 43.5737C12.8014 28.3737 7.92143 14.0371 0.0547669 0.563729C0.0152725 0.50031 -0.00361813 0.426609 0.000572506 0.352292C0.00476314 0.277975 0.0318434 0.20644 0.0782619 0.147067C0.12468 0.0876949 0.188315 0.0431997 0.26082 0.0194171C0.333326 -0.0043654 0.411387 -0.00634806 0.484767 0.0137292Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape34&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.0617214476865 24.8861307529877)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M21.2988 12.0278C16.7455 11.8878 12.1288 11.8545 7.44881 11.9278C4.74215 11.9678 2.94548 11.7312 2.05881 11.2178C0.238812 10.1645 -0.374521 8.0945 0.218812 5.00784L0.528812 4.36784C2.19881 1.69784 4.87881 0.0378364 8.05881 0.0678364C14.7055 0.14117 21.1455 0.12117 27.3788 0.00783636C30.7488 -0.0521636 33.8988 0.167836 36.2388 2.98784C38.6988 5.96784 37.6488 10.0878 34.1988 11.6978C30.1588 13.5878 25.5488 12.6378 21.2988 12.0278Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape35&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.038091694079 25.0621875000001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.890947 0C0.297614 3.08667 0.910947 5.15667 2.73095 6.21C3.61761 6.72333 5.41428 6.96 8.12095 6.92C12.8009 6.84667 17.4176 6.88 21.9709 7.02L21.7809 18.33L8.93095 18.26C6.47761 15.4933 4.27761 12.62 2.33095 9.64C0.650947 7.07 0.120947 4.29 0.000947368 1.38C-0.0190526 0.766667 0.277614 0.306667 0.890947 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape36&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.2047130847683 25.704140625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.19149 0L17.0415 0.07C21.4015 -0.02 26.1315 0.49 27.3015 5.17C27.7282 6.88333 27.3782 8.43333 26.2515 9.82C24.0615 12.51 21.2915 12.6 17.6115 12.62L3.91149 12C-1.87851 9.68 -0.778506 2.36 4.19149 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape37&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.893984375 26.126015625)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M12.75 0L26.45 0.62L26.77 75.28C26.77 75.6067 26.8467 75.9133 27 76.2L27.55 77.26L0 77.22L1.09 77.11C1.43667 77.07 1.68667 76.8967 1.84 76.59C8.08 63.93 11.53 50.5167 12.19 36.35C12.3967 32.0167 12.6067 27.7233 12.82 23.47C12.98 20.33 12.9633 16.4233 12.77 11.75C12.61 7.81 12.6033 3.89333 12.75 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape38&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.22640625 29.4324536132813)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M29.96 24.0302C30.7067 23.5835 30.1467 23.1702 28.28 22.7902C27.96 22.7235 27.6733 22.5835 27.42 22.3702C24.9333 20.2235 22.8967 18.7069 21.31 17.8202C12.91 13.1069 5.80667 7.21687 0 0.150208L30.09 0.000208333C30.4767 -0.00645833 30.7833 0.146875 31.01 0.460208C37.57 9.69354 45.7567 17.2435 55.57 23.1102C55.9433 23.3302 55.92 23.4969 55.5 23.6102C54.48 23.8769 53.4167 24.0135 52.31 24.0202C44.77 24.0669 37.32 24.0702 29.96 24.0302Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape39&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.2706541442871 29.4394921875)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M38.2747 0C35.2147 4.74667 31.2681 10.0433 26.4347 15.89C23.4547 19.49 20.7014 22.14 18.1747 23.84L0.754727 23.73C-0.17194 23.7233 -0.245273 23.4733 0.534727 22.98C9.87473 17.05 17.3747 9.52 24.9347 0.58C25.0571 0.432797 25.211 0.314351 25.3856 0.233119C25.5601 0.151886 25.7511 0.109846 25.9447 0.11Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape40&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.909609375 29.437734375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M65.9 0C71.7067 7.06667 78.81 12.9567 87.21 17.67C88.7967 18.5567 90.8333 20.0733 93.32 22.22C93.5733 22.4333 93.86 22.5733 94.18 22.64C96.0467 23.02 96.6067 23.4333 95.86 23.88L0 23.89C2.52667 22.19 5.28 19.54 8.26 15.94C13.0933 10.0933 17.04 4.79667 20.1 0.05Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape41&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.6264334548969 30.8390367406574)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M175.558 0.450733C176.245 0.450733 176.568 0.567399 176.528 0.800733C176.494 1.0303 176.388 1.24303 176.226 1.40826C176.065 1.5735 175.855 1.68291 175.628 1.72073C171.935 2.3474 168.581 2.65073 165.568 2.63073C163.998 2.62073 162.798 3.35073 161.188 3.18073C160.808 3.14073 160.445 3.20407 160.098 3.37073L158.488 4.16073C158.195 4.30073 157.958 4.50407 157.778 4.77073C157.045 5.85073 156.111 6.47073 154.978 6.63073C153.258 6.87073 151.491 6.99073 149.678 6.99073C111.858 6.8974 73.5681 6.84073 34.8081 6.82073C28.6781 6.82073 24.4281 9.63073 23.3181 15.9507L0.628115 15.8107C0.50059 15.8104 0.376138 15.7713 0.2713 15.6987C0.166463 15.626 0.0861025 15.5233 0.0409006 15.404C-0.00430136 15.2848 -0.0122487 15.1546 0.0181151 15.0307C2.16812 6.40073 10.0881 -0.0792673 19.0981 0.00073271C53.2181 0.314066 87.8014 0.380733 122.848 0.200733C140.421 0.114066 157.991 0.197399 175.558 0.450733Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape42&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.4462109375 30.8548828125)&quot; fill=&quot;rgb(74,39,39)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M152.24 0L253.08 0.15C253.047 2.17 252.56 3.72667 251.62 4.82C250.867 5.69333 249.93 6.13667 248.81 6.15C221.383 6.39 194.363 6.58667 167.75 6.74C167.283 6.74 167.03 6.97333 166.99 7.44C166.87 8.95333 167.113 10.3433 167.72 11.61C167.847 11.8833 167.89 12.1667 167.85 12.46L167.63 14.18C167.577 14.5867 167.74 14.86 168.12 15C168.573 15.1667 168.867 15.3533 169 15.56L0 15.5C1.11 9.18 5.36 6.37 11.49 6.37C50.25 6.39 88.54 6.44667 126.36 6.54C128.173 6.54 129.94 6.42 131.66 6.18C132.793 6.02 133.727 5.4 134.46 4.32C134.64 4.05333 134.877 3.85 135.17 3.71L136.78 2.92C137.127 2.75333 137.49 2.69 137.87 2.73C139.48 2.9 140.68 2.17 142.25 2.18C145.263 2.2 148.617 1.89667 152.31 1.27C152.537 1.23218 152.746 1.12277 152.908 0.957532C153.07 0.792295 153.175 0.579568 153.21 0.35C153.25 0.116667 152.927 -1.13687e-13 152.24 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape43&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 19.3159081135321 30.86015625)&quot; fill=&quot;rgb(38,23,22)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M86.1197 0C93.6331 3.14 98.2231 7.99667 99.8897 14.57C99.9181 14.684 99.9111 14.804 99.8698 14.914C99.8285 15.024 99.7547 15.1189 99.6583 15.186C99.5618 15.2532 99.4472 15.2894 99.3297 15.29L2.03972 15.41C1.90639 15.2033 1.61306 15.0167 1.15972 14.85C0.779725 14.71 0.616391 14.4367 0.669725 14.03L0.889725 12.31C0.929725 12.0167 0.886391 11.7333 0.759725 11.46C0.153058 10.1933 -0.0902752 8.80333 0.0297248 7.29C0.0697248 6.82333 0.323058 6.59 0.789725 6.59C27.4031 6.43667 54.4231 6.24 81.8497 6C82.9697 5.98667 83.9064 5.54333 84.6597 4.67C85.5997 3.57667 86.0864 2.02 86.1197 0Z&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt;&lt;div class=&quot;w-16 h-16&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;fill-[${rgbColor} w-16 h-16&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 36 36&quot;&gt; &lt;defs&gt;&lt;/defs&gt; &lt;path id=&quot;shape0&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 10.393984646722 3.24851063866497)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M384.119 800.308C389.392 800.401 395.079 800.381 401.179 800.248C405.299 800.161 408.469 800.568 410.689 801.468C415.949 803.598 420.779 810.198 420.289 816.268C419.669 823.858 412.349 829.318 404.999 829.328C277.499 829.355 146.952 829.355 13.3589 829.328C8.63888 829.328 4.09888 825.978 1.87888 822.058C-2.73112 813.888 1.52888 803.918 10.4389 801.028C11.9855 800.528 13.9555 800.285 16.3489 800.298C22.1289 800.338 27.6889 800.265 33.0289 800.078C33.1769 800.076 33.3188 800.017 33.4263 799.913C33.5337 799.809 33.5989 799.668 33.6089 799.518C33.7489 797.391 34.0889 795.351 34.6289 793.398C38.5755 779.138 46.7822 768.285 59.2489 760.838C67.2389 756.068 77.9989 753.418 87.8689 753.798C91.7089 753.938 95.6189 754.578 99.3589 753.338C121.612 745.945 138.126 732.518 148.899 713.058C160.649 691.848 162.149 664.098 156.689 640.298C150.949 615.338 135.539 594.358 113.659 581.418C104.759 576.151 97.1322 571.378 90.7789 567.098C79.8722 559.751 69.4389 550.391 59.4789 539.018C41.7922 518.825 28.7222 496.301 20.2689 471.448C13.2089 450.695 9.41555 429.945 8.88888 409.198C8.39555 389.938 9.51888 370.588 12.2589 351.148C15.7689 326.188 18.7489 301.968 22.2689 277.258C23.1955 270.798 23.9055 264.308 24.3989 257.788C25.2922 245.915 26.1489 234.441 26.9689 223.368C28.2189 206.548 28.2189 189.968 28.2289 172.948C28.229 172.665 28.1641 172.386 28.0392 172.133C27.9143 171.88 27.7328 171.659 27.5089 171.488C4.71888 154.278 -3.35112 123.728 10.2489 97.8679C21.8189 75.8479 44.3589 62.0579 69.5789 63.3579C72.9922 63.5379 76.3389 64.1179 79.6189 65.0979C79.7826 65.1468 79.9567 65.1513 80.1235 65.1109C80.2903 65.0705 80.4439 64.9867 80.5689 64.8679C95.3422 50.8279 113.322 44.9613 134.509 47.2679C134.656 47.2852 134.804 47.2536 134.932 47.1778C135.061 47.102 135.161 46.9862 135.219 46.8479C136.972 42.6213 139.372 38.5079 142.419 34.5079C153.299 20.2379 166.749 9.32792 184.089 3.97792C204.569 -2.34875 224.312 -1.12875 243.319 7.63792C258.599 14.6779 272.559 26.6579 280.469 41.6579C280.596 41.9046 280.792 41.9846 281.059 41.8979C289.839 38.9646 299.389 37.9446 309.709 38.8379C326.729 40.3079 342.309 50.4379 353.989 63.2879C354.516 63.8679 355.166 64.1746 355.939 64.2079C361.419 64.4546 366.656 65.5513 371.649 67.4979C392.199 75.5079 406.519 91.1379 411.669 112.968C413.189 119.421 413.456 125.841 412.469 132.228C409.882 148.975 401.956 162.205 388.689 171.918C387.729 172.628 387.729 173.468 387.719 174.528C387.586 191.895 387.899 207.108 388.659 220.168C389.549 235.238 390.999 253.908 393.189 270.758C396.622 297.205 400.169 324.231 403.829 351.838C404.689 358.351 405.536 366.615 406.369 376.628C407.042 384.655 407.406 391.321 407.459 396.628C407.679 420.268 404.476 443.035 397.849 464.928C386.419 502.718 363.929 536.538 333.029 561.268C324.009 568.498 312.959 575.088 302.869 581.488C297.502 584.888 292.979 588.131 289.299 591.218C265.139 611.508 255.039 640.758 256.429 672.398C258.039 709.018 277.959 738.488 312.639 751.718C317.389 753.528 321.449 754.508 326.659 754.038C338.269 753.008 349.089 755.608 359.129 762.058C371.639 770.088 381.589 784.038 383.299 799.558C383.352 800.045 383.626 800.295 384.119 800.308ZM34.9389 123.938C34.6255 130.038 36.5689 135.461 40.7689 140.208C42.9155 142.635 45.5089 143.855 48.5489 143.868C57.4489 143.895 67.6722 143.898 79.2189 143.878C80.8589 143.878 81.9889 142.308 82.5389 140.958C82.6855 140.585 82.6522 140.231 82.4389 139.898C80.5522 136.978 80.8189 134.321 83.2389 131.928C87.7189 127.508 91.8289 130.808 94.8789 134.678C97.7389 138.308 103.749 143.708 108.819 143.768C117.746 143.855 126.882 143.871 136.229 143.818C142.909 143.768 150.429 136.098 154.769 131.618C156.269 130.068 158.029 129.188 160.259 129.608C164.159 130.328 166.106 132.778 166.099 136.958C166.099 138.248 165.299 139.248 164.549 140.218C164.261 140.59 164.13 141.06 164.184 141.527C164.239 141.994 164.474 142.422 164.839 142.718C166.006 143.678 167.326 144.148 168.799 144.128C196.979 143.828 224.629 143.751 251.749 143.898C253.509 143.905 255.106 143.581 256.539 142.928C256.721 142.847 256.872 142.708 256.969 142.533C257.065 142.358 257.101 142.155 257.073 141.955C257.044 141.756 256.951 141.571 256.809 141.428C253.879 138.498 254.059 132.908 257.859 130.608C262.999 127.498 266.539 130.248 269.939 133.818C274.619 138.718 280.959 143.828 287.779 143.838C296.859 143.865 305.789 143.868 314.569 143.848C321.399 143.828 328.259 136.098 332.759 131.638C335.086 129.338 337.459 128.821 339.879 130.088C343.819 132.161 344.612 135.195 342.259 139.188C342.08 139.495 341.983 139.844 341.98 140.198C341.976 140.552 342.066 140.901 342.239 141.208C343.319 143.118 344.959 144.088 347.179 144.068C354.066 144.001 361.086 143.928 368.239 143.848C370.352 143.821 372.149 143.235 373.629 142.088C379.589 137.488 382.416 131.278 382.109 123.458C381.969 109.928 371.589 99.2079 359.169 95.4779C358.953 95.4151 358.724 95.4137 358.51 95.4738C358.296 95.534 358.105 95.6534 357.959 95.8179C355.212 98.9446 351.706 100.435 347.439 100.288C341.069 100.068 338.009 96.4579 335.789 91.1479C332.202 82.5946 326.232 76.3279 317.879 72.3479C307.626 67.4546 296.802 67.5779 285.409 72.7179C282.069 74.2179 279.519 77.4279 276.309 79.4679C269.159 84.0279 261.339 79.8879 260.179 71.8979C258.606 61.0979 253.279 51.6813 244.199 43.6479C217.109 19.6679 175.399 28.6579 160.839 61.6279C158.766 66.3279 157.699 70.8946 157.639 75.3279C157.559 80.8679 155.339 86.2279 149.929 88.1679C144.262 90.2146 139.372 89.0513 135.259 84.6779C133.749 83.0679 132.859 81.0279 131.499 79.3379C131.286 79.0646 131.012 78.8779 130.679 78.7779C128.472 78.1113 126.346 77.8213 124.299 77.9079C113.326 78.3813 104.429 83.1579 97.6089 92.2379C94.2189 96.7479 94.0089 102.468 90.0089 106.458C86.8589 109.588 81.6689 110.618 77.7089 108.488C73.0155 105.968 70.9422 101.938 71.4889 96.3979C71.5755 95.5313 71.1922 95.0446 70.3389 94.9379C59.7789 93.5446 50.8422 96.5046 43.5289 103.818C38.0555 109.291 35.1922 115.998 34.9389 123.938ZM70.3189 172.868L60.5489 172.868C60.0022 172.868 59.7255 173.141 59.7189 173.688C59.4855 194.395 58.5655 214.878 56.9589 235.138C56.6655 238.818 56.5355 242.431 56.5689 245.978C56.5689 246.378 56.7689 246.578 57.1689 246.578L287.389 246.598L306.739 246.558L315.789 246.558C316.622 246.558 317.009 246.145 316.949 245.318C315.196 221.491 313.862 197.675 312.949 173.868C312.939 173.596 312.822 173.339 312.625 173.151C312.427 172.963 312.163 172.858 311.889 172.858L302.559 172.868L102.799 172.818L85.9489 172.788ZM345.659 172.918L336.369 172.938C335.276 172.938 334.742 173.485 334.769 174.578C335.302 197.585 336.822 220.561 339.329 243.508C339.429 244.421 339.629 245.291 339.929 246.118C339.981 246.258 340.075 246.379 340.199 246.463C340.322 246.547 340.469 246.591 340.619 246.588L349.349 246.478L358.959 246.388C359.056 246.388 359.152 246.362 359.234 246.311C359.317 246.259 359.384 246.186 359.427 246.099C359.47 246.012 359.488 245.915 359.479 245.818C358.169 231.648 357.729 217.678 356.929 203.398C356.396 193.905 356.209 183.971 356.369 173.598C356.371 173.466 356.337 173.335 356.273 173.221C356.208 173.106 356.114 173.011 356.001 172.945C355.888 172.88 355.759 172.846 355.629 172.848ZM285.139 272.498L66.0789 272.778L56.5789 272.838C56.2688 272.842 55.9676 272.941 55.7169 273.122C55.4662 273.302 55.2782 273.556 55.1789 273.848C53.5922 278.475 52.3889 283.555 51.5689 289.088C50.7689 294.528 50.0622 299.925 49.4489 305.278C45.8889 336.418 40.7589 367.688 40.1089 398.048C39.6822 418.115 42.5555 438.068 48.7289 457.908C57.0789 484.768 71.6889 508.708 92.4189 527.918C99.6455 535.011 106.386 540.555 112.639 544.548C120.992 549.888 128.172 554.048 134.179 557.028C152.646 566.188 172.619 571.811 194.099 573.898C204.712 574.931 216.622 574.575 229.829 572.828C240.356 571.415 249.986 569.291 258.719 566.458C291.679 555.758 320.169 534.368 341.689 507.238C357.689 487.038 368.109 461.898 373.119 436.298C376.719 417.938 377.099 398.938 375.549 380.068C373.189 351.368 369.499 324.108 365.409 293.848C364.422 286.581 363.209 279.731 361.769 273.298C361.729 273.128 361.634 272.976 361.499 272.867C361.365 272.758 361.199 272.699 361.029 272.698ZM175.049 601.798L173.779 601.438C173.706 601.418 173.627 601.42 173.555 601.444C173.482 601.467 173.419 601.512 173.372 601.571C173.326 601.631 173.299 601.702 173.295 601.776C173.29 601.851 173.309 601.925 173.349 601.988C181.216 615.461 186.096 629.798 187.989 644.998C191.409 672.498 189.379 702.208 176.579 727.128C176.519 727.245 176.501 727.378 176.529 727.506C176.556 727.635 176.626 727.75 176.728 727.832C176.831 727.914 176.958 727.959 177.089 727.958L184.889 727.958L212.439 727.998L239.709 727.978C239.797 727.978 239.883 727.947 239.952 727.892C240.021 727.837 240.069 727.76 240.088 727.674C240.108 727.588 240.097 727.497 240.059 727.418C237.179 721.278 233.859 715.348 231.849 708.858C226.049 690.188 225.419 668.538 227.059 648.518C228.539 630.531 233.812 615.041 242.879 602.048C243.406 601.301 243.229 601.051 242.349 601.298C237.362 602.725 232.109 603.628 226.589 604.008C209.329 605.188 192.149 604.451 175.049 601.798ZM222.789 744.938L176.989 744.988L164.659 745.098C164.465 745.098 164.274 745.14 164.1 745.221C163.925 745.302 163.771 745.421 163.649 745.568C156.089 754.508 148.589 762.038 139.249 767.968C138.469 768.461 138.542 768.711 139.469 768.718L156.889 768.828L252.749 768.818C260.109 768.858 267.559 768.855 275.099 768.808C276.206 768.801 277.269 768.665 278.289 768.398C278.709 768.285 278.732 768.118 278.359 767.898C268.546 762.031 260.359 754.481 253.799 745.248C253.572 744.935 253.266 744.781 252.879 744.788ZM86.8189 800.748L255.819 800.808L353.109 800.688C353.226 800.687 353.341 800.651 353.437 800.584C353.534 800.517 353.608 800.422 353.649 800.312C353.69 800.202 353.697 800.082 353.669 799.968C352.002 793.395 347.412 788.538 339.899 785.398L239.059 785.248C221.492 784.995 203.922 784.911 186.349 784.998C151.302 785.178 116.719 785.111 82.5989 784.798C73.5889 784.718 65.6689 791.198 63.5189 799.828C63.4885 799.952 63.4965 800.082 63.5417 800.201C63.5869 800.32 63.6672 800.423 63.7721 800.496C63.8769 800.568 64.0014 800.608 64.1289 800.608Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape1&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6223046875 4.3066710451255)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.17 93.3591L341.7 94.8091C341.347 94.9025 341.043 95.0758 340.79 95.3291C334.81 101.209 327.56 101.079 319.06 100.739C316.15 100.619 313.98 99.6891 312.72 96.9491C310.21 91.4791 305.03 84.9891 298.07 88.5091C296.217 89.4491 294.677 90.6225 293.45 92.0291C288.01 98.2791 282.29 103.559 274.1 105.299C270.267 106.112 266.1 106.416 261.6 106.209C253.04 105.819 244.67 101.199 239.15 94.8491C232.37 87.0391 226.88 84.2491 219.24 92.9691C214.89 97.9391 209.89 101.049 202.97 101.219C196.37 101.379 189.917 101.426 183.61 101.359C182.93 101.352 182.43 100.989 182.11 100.269C182.01 100.04 181.975 99.7876 182.008 99.5391C182.042 99.2906 182.143 99.0554 182.3 98.8591C183.04 97.9325 183.813 97.0725 184.62 96.2791C187.09 93.8491 185.64 89.9291 183.51 87.8291C180.65 85.0091 175.91 85.9891 173.39 88.9391C172.23 90.2925 171.17 91.6391 170.21 92.9791C163.5 102.299 152.67 101.929 142.47 100.679C134.9 99.7591 131.64 94.3891 126.62 89.6591C123.633 86.8525 120.593 86.8391 117.5 89.6191C112.63 93.9791 108.24 99.7591 102.47 102.719C88.07 110.129 72.61 106.679 62.57 94.0391C58.62 89.0591 52.95 85.2191 47.21 90.7591C44.54 93.3491 43.94 96.9991 40.53 99.0891C36.59 101.509 29.55 101.139 24.26 101.029C18.64 100.899 13.25 100.999 9.85 97.1991C7.82 94.9191 4 93.8291 2.11 96.9691C1.02333 98.7691 0.446667 98.6225 0.38 96.5291C0.366667 95.9891 0.24 95.0925 0 93.8391C0.253333 85.8991 3.11667 79.1925 8.59 73.7191C15.9033 66.4058 24.84 63.4458 35.4 64.8391C36.2533 64.9458 36.6367 65.4325 36.55 66.2991C36.0033 71.8391 38.0767 75.8691 42.77 78.3891C46.73 80.5191 51.92 79.4891 55.07 76.3591C59.07 72.3691 59.28 66.6491 62.67 62.1391C69.49 53.0591 78.3867 48.2825 89.36 47.8091C91.4067 47.7225 93.5333 48.0125 95.74 48.6791C96.0733 48.7791 96.3467 48.9658 96.56 49.2391C97.92 50.9291 98.81 52.9691 100.32 54.5791C104.433 58.9525 109.323 60.1158 114.99 58.0691C120.4 56.1291 122.62 50.7691 122.7 45.2291C122.76 40.7958 123.827 36.2291 125.9 31.5291C140.46 -1.44087 182.17 -10.4309 209.26 13.5491C218.34 21.5825 223.667 30.9991 225.24 41.7991C226.4 49.7891 234.22 53.9291 241.37 49.3691C244.58 47.3291 247.13 44.1191 250.47 42.6191C261.863 37.4791 272.687 37.3558 282.94 42.2491C291.293 46.2291 297.263 52.4958 300.85 61.0491C303.07 66.3591 306.13 69.9691 312.5 70.1891C316.767 70.3358 320.273 68.8458 323.02 65.7191C323.166 65.5546 323.357 65.4352 323.571 65.3751C323.785 65.3149 324.014 65.3163 324.23 65.3791C336.65 69.1091 347.03 79.8291 347.17 93.3591Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape2&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6211575655465 7.33540715628013)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.203 7.20842C347.509 15.0284 344.683 21.2384 338.723 25.8384C337.243 26.9851 335.446 27.5718 333.333 27.5984C326.179 27.6784 319.159 27.7518 312.273 27.8184C310.053 27.8384 308.413 26.8684 307.333 24.9584C307.159 24.651 307.07 24.3028 307.074 23.9484C307.077 23.594 307.173 23.2458 307.353 22.9384C309.706 18.9451 308.913 15.9118 304.973 13.8384C302.553 12.5718 300.179 13.0884 297.853 15.3884C293.353 19.8484 286.493 27.5784 279.663 27.5984C270.883 27.6184 261.953 27.6151 252.873 27.5884C246.053 27.5784 239.713 22.4684 235.033 17.5684C231.633 13.9984 228.093 11.2484 222.953 14.3584C219.153 16.6584 218.973 22.2484 221.903 25.1784C222.045 25.3214 222.137 25.5067 222.166 25.706C222.195 25.9053 222.159 26.108 222.062 26.2834C221.966 26.4588 221.815 26.5975 221.633 26.6784C220.199 27.3318 218.603 27.6551 216.843 27.6484C189.723 27.5018 162.073 27.5784 133.893 27.8784C132.419 27.8984 131.099 27.4284 129.933 26.4684C129.567 26.1723 129.332 25.7446 129.278 25.2775C129.224 24.8105 129.355 24.3403 129.643 23.9684C130.393 22.9984 131.193 21.9984 131.193 20.7084C131.199 16.5284 129.253 14.0784 125.353 13.3584C123.123 12.9384 121.363 13.8184 119.863 15.3684C115.523 19.8484 108.003 27.5184 101.323 27.5684C91.976 27.6218 82.8393 27.6051 73.9126 27.5184C68.8426 27.4584 62.8326 22.0584 59.9726 18.4284C56.9226 14.5584 52.8126 11.2584 48.3326 15.6784C45.9126 18.0718 45.646 20.7284 47.5326 23.6484C47.746 23.9818 47.7793 24.3351 47.6326 24.7084C47.0826 26.0584 45.9526 27.6284 44.3126 27.6284C32.766 27.6484 22.5426 27.6451 13.6426 27.6184C10.6026 27.6051 8.0093 26.3851 5.86263 23.9584C1.66263 19.2118 -0.280704 13.7884 0.0326292 7.68842C0.272629 8.94175 0.399296 9.83842 0.412629 10.3784C0.479296 12.4718 1.05596 12.6184 2.14263 10.8184C4.03263 7.67842 7.85263 8.76842 9.88263 11.0484C13.2826 14.8484 18.6726 14.7484 24.2926 14.8784C29.5826 14.9884 36.6226 15.3584 40.5626 12.9384C43.9726 10.8484 44.5726 7.19842 47.2426 4.60842C52.9826 -0.931581 58.6526 2.90842 62.6026 7.88842C72.6426 20.5284 88.1026 23.9784 102.503 16.5684C108.273 13.6084 112.663 7.82842 117.533 3.46842C120.626 0.688419 123.666 0.701752 126.653 3.50842C131.673 8.23842 134.933 13.6084 142.503 14.5284C152.703 15.7784 163.533 16.1484 170.243 6.82842C171.203 5.48842 172.263 4.14175 173.423 2.78842C175.943 -0.161581 180.683 -1.14158 183.543 1.67842C185.673 3.77842 187.123 7.69842 184.653 10.1284C183.846 10.9218 183.073 11.7818 182.333 12.7084C182.175 12.9047 182.074 13.1399 182.041 13.3884C182.007 13.6369 182.043 13.8894 182.143 14.1184C182.463 14.8384 182.963 15.2018 183.643 15.2084C189.949 15.2751 196.403 15.2284 203.003 15.0684C209.923 14.8984 214.923 11.7884 219.273 6.81842C226.913 -1.90158 232.403 0.888419 239.183 8.69842C244.703 15.0484 253.073 19.6684 261.633 20.0584C266.133 20.2651 270.299 19.9618 274.133 19.1484C282.323 17.4084 288.043 12.1284 293.483 5.87842C294.709 4.47175 296.249 3.29842 298.103 2.35842C305.063 -1.16158 310.243 5.32842 312.753 10.7984C314.013 13.5384 316.183 14.4684 319.093 14.5884C327.593 14.9284 334.843 15.0584 340.823 9.17842C341.076 8.92509 341.379 8.75175 341.733 8.65842Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape3&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.7941352600339 9.3230859375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M17.6779 0C16.5513 11.84 15.9213 19.36 15.7879 22.56C15.3079 33.9733 14.6346 46.28 13.7679 59.48C13.6013 62.04 13.1046 63.7467 12.2779 64.6C8.55793 68.45 -0.30207 67.53 0.00793038 61.06C1.34793 33.3133 2.02793 12.9867 2.04793 0.08Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape4&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9413128810975 9.32414062500001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M201.657 0.05C201.63 7.10333 201.687 11.5967 201.827 13.53C203.28 33.53 204.617 53.6 205.837 73.74L186.487 73.78L193.557 73.61C193.714 73.6076 193.867 73.5609 193.998 73.4752C194.129 73.3896 194.234 73.2685 194.299 73.126C194.364 72.9835 194.388 72.8254 194.367 72.67C193.367 64.75 192.894 56.7733 192.947 48.74C196.9 43.82 196.69 38.93 192.317 34.07C191.537 32.47 191.137 31.2867 191.117 30.52C190.984 25.7933 191.01 21.2667 191.197 16.94C191.213 16.5684 191.128 16.1993 190.951 15.872C190.773 15.5446 190.51 15.2711 190.189 15.0807C189.868 14.8902 189.501 14.7897 189.127 14.79L153.317 14.9C152.777 12.9667 151.747 11.28 150.227 9.84C148.927 8.60667 147.257 7.7 145.217 7.12C138.364 5.17333 133.557 7.71667 130.797 14.75C116.39 14.8967 101.944 14.9467 87.4571 14.9C61.1271 14.81 34.7871 15.13 8.5371 15.06C6.00377 15.0533 4.15377 14.7633 2.9871 14.19C0.773767 13.11 -0.209566 11.2233 0.0371003 8.53C0.150434 7.29667 0.770434 4.45333 1.8971 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape5&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.5460546875 9.32519283839548)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M3.69 73.6301L0 0.0700704L9.97 7.03745e-05C10.1004 -0.00175254 10.2289 0.031869 10.3421 0.0974247C10.4553 0.16298 10.5492 0.258107 10.6139 0.372872C10.6786 0.487637 10.7118 0.617903 10.71 0.75007C10.55 11.1234 10.7367 21.0567 11.27 30.5501C12.07 44.8301 12.51 58.8001 13.82 72.9701C13.8293 73.0668 13.8114 73.1643 13.7681 73.2514C13.7249 73.3384 13.6581 73.4116 13.5754 73.4627C13.4926 73.5137 13.3972 73.5405 13.3 73.5401Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape6&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.3825550063776 9.3230859375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M13.7551 0.08C13.7351 12.9867 13.0551 33.3133 11.7151 61.06C11.4051 67.53 20.2651 68.45 23.9851 64.6C24.8118 63.7467 25.3084 62.04 25.4751 59.48C26.3418 46.28 27.0151 33.9733 27.4951 22.56C27.6284 19.36 28.2584 11.84 29.3851 0L46.2351 0.03C45.1084 4.48333 44.4884 7.32667 44.3751 8.56C44.1284 11.2533 45.1118 13.14 47.3251 14.22C48.4918 14.7933 50.3418 15.0833 52.8751 15.09C79.1251 15.16 105.465 14.84 131.795 14.93C146.282 14.9767 160.728 14.9267 175.135 14.78C174.568 20.8133 176.498 24.9267 180.925 27.12C183.338 28.3133 185.805 28.72 188.325 28.34C194.755 27.36 198.095 21.26 197.655 14.93L233.465 14.82C233.839 14.8197 234.206 14.9202 234.527 15.1107C234.848 15.3011 235.111 15.5746 235.289 15.902C235.466 16.2293 235.551 16.5984 235.535 16.97C235.348 21.2967 235.322 25.8233 235.455 30.55C235.475 31.3167 235.875 32.5 236.655 34.1C232.788 31.5133 229.168 30.99 225.795 32.53C211.935 38.83 224.195 59.55 237.285 48.77C237.232 56.8033 237.705 64.78 238.705 72.7C238.726 72.8554 238.702 73.0135 238.637 73.156C238.572 73.2985 238.467 73.4196 238.336 73.5052C238.205 73.5909 238.052 73.6376 237.895 73.64L230.825 73.81L0.605102 73.79C0.205102 73.79 0.00510204 73.59 0.00510204 73.19C-0.0282313 69.6433 0.101769 66.03 0.395102 62.35C2.00177 42.09 2.92177 21.6067 3.1551 0.9C3.16177 0.353333 3.43844 0.08 3.9851 0.08ZM127.005 36.5C127.005 34.413 126.456 32.3624 125.412 30.555C124.369 28.7476 122.867 27.2464 121.06 26.203C119.253 25.1595 117.202 24.61 115.115 24.61C111.963 24.61 108.937 25.8635 106.708 28.0925C104.479 30.3215 103.225 33.3478 103.225 36.5C103.225 39.6522 104.479 42.6785 106.708 44.9075C108.937 47.1365 111.963 48.39 115.115 48.39C117.202 48.39 119.253 47.8405 121.06 46.797C122.867 45.7536 124.369 44.2524 125.412 42.445C126.456 40.6376 127.005 38.587 127.005 36.5ZM75.9704 37.4184C76.0574 34.3019 74.8637 31.2741 72.6541 29.007C70.4445 26.7398 67.3954 25.4143 64.1835 25.3246C62.057 25.2652 59.9523 25.7501 58.0818 26.7303C56.2114 27.7105 54.6403 29.152 53.5271 30.9092C52.414 32.6664 51.7974 34.6782 51.7398 36.7416C51.6528 39.8581 52.8465 42.8859 55.0561 45.153C57.2657 47.4202 60.3148 48.7457 63.5267 48.8354C65.6532 48.8948 67.7579 48.4099 69.6284 47.4297C71.4988 46.4495 73.0699 45.008 74.1831 43.2508C75.2962 41.4936 75.9128 39.4818 75.9704 37.4184ZM183.874 50.7982C183.856 49.4819 183.468 48.1937 182.749 47.0635C182.03 45.9334 181.006 45.0007 179.779 44.3595C178.552 43.7184 177.166 43.3911 175.76 43.4107C173.637 43.4404 171.61 44.2595 170.128 45.6863C168.646 47.1131 167.828 49.0336 167.856 51.0218C167.874 52.3381 168.262 53.6263 168.981 54.7565C169.7 55.8866 170.725 56.8193 171.951 57.4605C173.178 58.1016 174.564 58.4289 175.97 58.4093C178.093 58.3796 180.121 57.5605 181.603 56.1337C183.084 54.7069 183.902 52.7864 183.874 50.7982Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape7&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.0305953125001 9.32554685349047)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.0064 0.0100006L9.3364 6.11826e-07C9.61064 -0.000292647 9.87453 0.104847 10.0721 0.293135C10.2697 0.481423 10.3861 0.738544 10.3964 1.01C11.3097 24.8167 12.6431 48.6333 14.3964 72.46C14.4564 73.2867 14.0697 73.7 13.2364 73.7L4.1864 73.7C2.9664 53.56 1.62973 33.49 0.1764 13.49C0.0364 11.5567 -0.0202667 7.06333 0.0064 0.0100006Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape8&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1631696428572 9.32765624999999)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M10.891 0L14.581 73.56L5.85095 73.67C5.70139 73.6731 5.55452 73.6294 5.43088 73.5452C5.30724 73.461 5.21287 73.3403 5.16095 73.2C4.86095 72.3733 4.66095 71.5033 4.56095 70.59C2.05429 47.6433 0.534286 24.6667 0.000952381 1.66C-0.0257143 0.566667 0.507619 0.02 1.60095 0.02Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape9&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.5362571970961 9.55219950584632)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.6165 8.41299C23.0565 14.743 19.7165 20.843 13.2865 21.823C10.7665 22.203 8.2998 21.7963 5.88646 20.603C1.4598 18.4097 -0.470205 14.2963 0.0964619 8.26299C2.85646 1.22966 7.66313 -1.31367 14.5165 0.632992C16.5565 1.21299 18.2265 2.11966 19.5265 3.35299C21.0465 4.79299 22.0765 6.47966 22.6165 8.41299Z&quot;&gt;&lt;/path&gt; &lt;circle id=&quot;shape10&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.0115625 10.18828125)&quot; r=&quot;11.89&quot; cx=&quot;11.89&quot; cy=&quot;11.89&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape11&quot; transform=&quot;matrix(0.0351425431068875 0.000981620111375468 -0.000981620111375468 0.0351425431068875 14.2130771675543 10.2015061448131)&quot; rx=&quot;12.12&quot; ry=&quot;11.76&quot; cx=&quot;12.12&quot; cy=&quot;11.76&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape12&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 20.1057469902912 10.4364122450525)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M16.9732 2.43205C21.3465 7.29205 21.5565 12.1821 17.6032 17.1021C4.5132 27.8821 -7.7468 7.16205 6.1132 0.862052C9.48653 -0.677948 13.1065 -0.154615 16.9732 2.43205Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape13&quot; transform=&quot;matrix(0.0351528231097021 -0.000490857902548076 0.000490857902548076 0.0351528231097021 18.2800569526222 10.8531762234766)&quot; rx=&quot;8.01&quot; ry=&quot;7.5&quot; cx=&quot;8.01&quot; cy=&quot;7.5&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape14&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.47390625 12.828515625)&quot; fill=&quot;rgb(18,13,12)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0 300.33C1.52 298.69 3.53 298.057 6.03 298.43C6.10297 298.443 6.17377 298.447 6.24 298.44C6.65333 298.413 6.88667 298.26 6.94 297.98C7 297.66 7.19333 297.493 7.52 297.48L10.29 297.39C10.4233 297.383 10.5567 297.367 10.69 297.34C11.0167 297.267 11.1733 297.127 11.16 296.92C11.1467 296.7 11.2467 296.563 11.46 296.51C12.1467 296.337 12.7433 295.997 13.25 295.49C13.49 295.257 13.58 294.973 13.52 294.64C13.1333 292.653 12.8767 290.647 12.75 288.62C12.69 287.79 12.27 287.35 11.7 286.83C11.4533 286.603 11.3933 286.337 11.52 286.03C11.8533 285.197 11.6767 284.573 10.99 284.16C10.7367 284 10.46 283.923 10.16 283.93L6.56 284.02C15.1 281.92 21.0833 280.04 24.51 278.38C27.5033 276.927 30.4033 275.357 33.21 273.67C33.319 273.603 33.3974 273.495 33.4282 273.371C33.4589 273.246 33.4397 273.115 33.3746 273.004C33.3096 272.894 33.2037 272.813 33.08 272.78C32.5067 272.62 31.9433 272.67 31.39 272.93C63.5767 260.003 88.4967 238.95 106.15 209.77C109.223 204.703 112.093 199 114.76 192.66C118.06 184.807 120.343 178.587 121.61 174C123.097 168.613 124.457 162.397 125.69 155.35C126.657 149.857 126.873 144.25 126.34 138.53C127.853 138.57 128.907 138.097 129.5 137.11C131.56 133.67 131.433 130.473 129.12 127.52C128.24 126.39 127.07 126.39 125.77 126.38C120.017 126.347 114.427 126.37 109 126.45C108.613 125.77 108.27 125.09 107.97 124.41C107.69 123.77 107.527 123.037 107.48 122.21C106.953 112.977 106.213 103.723 105.26 94.45C110.127 94.5633 114.617 94.5833 118.73 94.51C121.27 94.47 123.93 94.86 126 93.31C128.053 91.77 128.717 89.61 127.99 86.83C127.23 83.89 124.98 82.2967 121.24 82.05L120.9 72.32C124.973 70.3667 126.23 67.5767 124.67 63.95C123.697 61.6833 121.82 60.52 119.04 60.46C117.273 58.24 116.223 56.5633 115.89 55.43C113.43 47.1033 110.547 38.9133 107.24 30.86C106.947 30.1467 107 29.0333 107.4 27.52C109.087 27.4933 110.883 27.5267 112.79 27.62C115.45 27.7533 117.403 26.9667 118.65 25.26C121.02 22.01 120.02 17.98 116.55 16.23C115.597 15.75 114.193 15.5133 112.34 15.52C107.533 15.54 102.823 15.4767 98.21 15.33C97.6033 13.9433 96.9433 12.6033 96.23 11.31C94.38 7.96 93.99 4.82 92.56 1.46C92.4467 1.18667 92.5067 0.963333 92.74 0.79L93.19 0.46C93.4567 0.273333 93.4267 0.176667 93.1 0.17L55.31 0L131.2 0.2C131.371 0.200762 131.536 0.26037 131.671 0.369176C131.805 0.477981 131.9 0.629779 131.94 0.8C133.38 7.23333 134.593 14.0833 135.58 21.35C139.67 51.61 143.36 78.87 145.72 107.57C147.27 126.44 146.89 145.44 143.29 163.8C138.28 189.4 127.86 214.54 111.86 234.74C90.34 261.87 61.85 283.26 28.89 293.96C20.1567 296.793 10.5267 298.917 0 300.33Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape15&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.2758764491296 12.828515625)&quot; fill=&quot;rgb(38,23,22)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M231.61 0L269.4 0.17C269.726 0.176667 269.756 0.273333 269.49 0.46L269.04 0.79C268.806 0.963333 268.746 1.18667 268.86 1.46C270.29 4.82 270.68 7.96 272.53 11.31C273.243 12.6033 273.903 13.9433 274.51 15.33C268.76 17.07 269.07 27.78 275.82 27.53C278.38 27.43 281.006 27.4267 283.7 27.52C283.3 29.0333 283.246 30.1467 283.54 30.86C286.846 38.9133 289.73 47.1033 292.19 55.43C292.523 56.5633 293.573 58.24 295.34 60.46C290.98 60.76 286.806 61.0267 282.82 61.26C277.7 61.56 274.45 67.2 278.08 71.26C278.86 72.1333 280.413 72.6 282.74 72.66C287.386 72.7733 292.206 72.66 297.2 72.32L297.54 82.05C293.013 81.9567 288.443 81.9633 283.83 82.07C281.84 82.11 280.61 82.75 279.5 84.26C276.44 88.44 277.126 91.8367 281.56 94.45C282.513 103.723 283.253 112.977 283.78 122.21C283.826 123.037 283.99 123.77 284.27 124.41C284.57 125.09 284.913 125.77 285.3 126.45C282.193 127.497 280.633 129.463 280.62 132.35C280.613 134.79 281.763 136.753 284.07 138.24C281.93 156.593 277.493 173.123 270.76 187.83C261.606 207.817 247.22 225.063 227.6 239.57C218.546 246.263 208.406 252.023 197.18 256.85C191.52 259.28 187.21 264.45 191.61 270.42C195.03 275.03 202.58 274.56 207.69 272.93C208.243 272.67 208.806 272.62 209.38 272.78C209.503 272.813 209.609 272.894 209.674 273.004C209.739 273.115 209.758 273.246 209.728 273.371C209.697 273.495 209.619 273.603 209.51 273.67C206.703 275.357 203.803 276.927 200.81 278.38C197.383 280.04 191.4 281.92 182.86 284.02C165.386 287.427 148.786 288.113 133.06 286.08C116.433 283.94 99.2895 279.17 81.6295 271.77C75.1162 269.043 68.6828 266.14 62.3295 263.06C54.3762 259.2 46.8962 254.463 39.8895 248.85C40.5695 248.377 41.3595 247.947 42.2595 247.56C44.5695 246.55 46.3695 244.3 44.1695 241.99C29.1962 226.303 18.1928 209.247 11.1595 190.82C1.95285 166.687 -1.55715 141.62 0.629514 115.62C2.01618 99.0867 3.45618 82.5733 4.94951 66.08C5.49618 59.9533 6.20618 53.32 7.07951 46.18C8.95285 30.8733 10.7762 15.5733 12.5495 0.28ZM230.747 11.7302C228.758 9.7412 226.058 8.62261 223.245 8.62261C220.432 8.62261 217.731 9.7412 215.742 11.7302L213.89 13.5829C211.901 15.5719 210.782 18.2724 210.782 21.0853C210.782 23.8982 211.901 26.5987 213.89 28.5877L215.092 29.7898C217.081 31.7788 219.781 32.8974 222.594 32.8974C225.407 32.8974 228.108 31.7788 230.097 29.7898L231.949 27.9371C233.938 25.9481 235.057 23.2476 235.057 20.4347C235.057 17.6218 233.938 14.9213 231.949 12.9323ZM47.1595 186.78C39.7128 170.84 35.7195 154.833 35.1795 138.76C34.9528 131.94 35.0895 124.72 35.5895 117.1C37.1495 93.44 39.2662 67.4833 41.9395 39.23C42.3395 35.0167 42.6262 30.7267 42.7995 26.36C43.4195 10.9 25.2095 12.45 24.4195 25.69C23.0462 48.79 21.1195 72.2233 18.6395 95.99C17.6595 105.337 16.9995 114.63 16.6595 123.87C16.3328 132.65 16.6595 140.653 17.6395 147.88C19.5062 161.707 22.9728 175.147 28.0395 188.2C29.1795 191.153 30.6662 194.07 32.4995 196.95C35.2995 201.37 41.5395 202.72 45.3395 198.89C48.7328 195.483 49.3395 191.447 47.1595 186.78ZM87.1943 37.8021C86.8236 36.4743 85.902 35.3574 84.6342 34.6994C83.3663 34.0413 81.8534 33.8945 80.4311 34.2916C79.0088 34.6887 77.7908 35.598 77.0472 36.8177C76.3037 38.0374 76.094 39.4701 76.4647 40.7979C76.8355 42.1257 77.757 43.2426 79.0249 43.9006C80.2927 44.5587 81.8056 44.7055 83.2279 44.3084C84.6502 43.9113 85.8682 43.002 86.6118 41.7823C87.3554 40.5626 87.565 39.1299 87.1943 37.8021ZM242.9 63.3691C242.905 60.5116 242.14 57.7024 240.682 55.2252C239.224 52.7479 237.124 50.6888 234.594 49.2556C232.064 47.8225 229.192 47.0651 226.268 47.06C223.344 47.0549 220.469 47.8022 217.934 49.2266C215.399 50.6509 213.292 52.7027 211.826 55.1748C210.359 57.6469 209.585 60.4534 209.58 63.3109C209.575 66.1684 210.34 68.9776 211.797 71.4548C213.255 73.9321 215.355 75.9912 217.885 77.4244C220.415 78.8575 223.287 79.6149 226.211 79.62C229.135 79.6251 232.01 78.8778 234.545 77.4534C237.08 76.0291 239.187 73.9773 240.653 71.5052C242.12 69.0331 242.895 66.2266 242.9 63.3691ZM85.9041 71.8823C88.1531 72.912 90.7367 72.9736 93.0816 72.0534C95.4266 71.1333 97.3455 69.3049 98.4127 66.9739C99.1193 65.4306 99.4215 63.7348 99.2889 62.0574C99.1563 60.38 98.5935 58.7796 97.6572 57.4176C96.721 56.0556 95.4439 54.9794 93.9549 54.2977C91.7059 53.268 89.1223 53.2064 86.7774 54.1266C84.4325 55.0467 82.5135 56.8751 81.4463 59.2061C80.7398 60.7494 80.4375 62.4452 80.5701 64.1226C80.7028 65.8 81.2656 67.4004 82.2018 68.7624C83.1381 70.1244 84.4151 71.2006 85.9041 71.8823ZM60.6086 105.171C63.2448 106.638 66.3725 106.974 69.2978 106.105C72.223 105.236 74.7122 103.231 76.213 100.535C77.7138 97.8381 78.1063 94.6659 77.3035 91.7217C76.5007 88.7775 74.5666 86.2966 71.9304 84.8293C69.2942 83.362 66.1665 83.0257 63.2413 83.8948C60.316 84.7639 57.8268 86.7691 56.326 89.4655C54.8252 92.1619 54.4327 95.3341 55.2355 98.2783C56.0384 101.222 57.9724 103.703 60.6086 105.171ZM187.08 98.11C187.08 96.1959 186.318 94.3582 184.965 93.0047C183.611 91.6512 181.774 90.89 179.86 90.89C177.945 90.89 176.108 91.6512 174.754 93.0047C173.401 94.3582 172.64 96.1959 172.64 98.11C172.64 100.024 173.401 101.862 174.754 103.215C176.108 104.569 177.945 105.33 179.86 105.33C181.127 105.33 182.372 104.996 183.47 104.363C184.567 103.729 185.479 102.817 186.112 101.72C186.746 100.623 187.08 99.3773 187.08 98.11ZM234.564 99.0027C233.705 97.863 232.551 96.9774 231.217 96.4351C229.883 95.8929 228.416 95.7129 226.964 95.9133C225.513 96.1138 224.127 96.6877 222.947 97.5771C221.766 98.4665 220.833 99.6405 220.24 100.981C219.647 102.321 219.416 103.78 219.57 105.212C219.723 106.644 220.256 107.998 221.115 109.137C221.974 110.277 223.128 111.163 224.462 111.705C225.796 112.247 227.263 112.427 228.715 112.227C230.166 112.026 231.552 111.452 232.732 110.563C233.913 109.673 234.846 108.499 235.439 107.159C236.032 105.819 236.263 104.36 236.109 102.928C235.956 101.496 235.423 100.142 234.564 99.0027ZM47.9695 214.56C45.1695 220.83 50.0195 225.32 54.0495 229.45C57.6895 233.19 61.8995 236.09 66.6995 232.86C71.8895 229.38 72.0595 223.24 67.9795 218.66C64.2095 214.41 60.6395 209.6 54.3295 209.99C51.4095 210.17 49.1195 211.99 47.9695 214.56Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape16&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.8026079545455 12.838359375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M26.0114 0C24.238 15.2933 22.4147 30.5933 20.5414 45.9C19.668 53.04 18.958 59.6733 18.4114 65.8C16.918 82.2933 15.478 98.8067 14.0914 115.34C11.9047 141.34 15.4147 166.407 24.6214 190.54C31.6547 208.967 42.658 226.023 57.6314 241.71C59.8314 244.02 58.0314 246.27 55.7214 247.28C54.8214 247.667 54.0314 248.097 53.3514 248.57C51.9014 250.07 52.3314 253.14 52.3514 255.14C31.6214 235.93 17.0114 211.99 8.66137 185.13C2.48804 165.29 -0.385293 145.337 0.0413737 125.27C0.691374 94.91 5.82137 63.64 9.38137 32.5C9.99471 27.1467 10.7014 21.75 11.5014 16.31C12.3214 10.7767 13.5247 5.69667 15.1114 1.07C15.2107 0.778294 15.3987 0.524438 15.6494 0.343583C15.9001 0.162728 16.2013 0.0636261 16.5114 0.06Z&quot;&gt;&lt;/path&gt; &lt;rect id=&quot;shape17&quot; transform=&quot;matrix(0.0248592227760896 -0.0248592227760896 0.0248592227760896 0.0248592227760896 19.531681996495 13.569794617477)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; width=&quot;23.84&quot; height=&quot;22.92&quot; rx=&quot;10.61&quot; ry=&quot;10.61&quot;&gt;&lt;/rect&gt; &lt;path id=&quot;shape18&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.857255859375 13.3649990428515)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M30.6225 171.52C32.8025 176.187 32.1958 180.223 28.8025 183.63C25.0025 187.46 18.7625 186.11 15.9625 181.69C14.1292 178.81 12.6425 175.893 11.5025 172.94C6.43583 159.887 2.96917 146.447 1.1025 132.62C0.1225 125.393 -0.204167 117.39 0.1225 108.61C0.4625 99.37 1.1225 90.0767 2.1025 80.73C4.5825 56.9634 6.50917 33.53 7.8825 10.43C8.6725 -2.80997 26.8825 -4.35997 26.2625 11.1C26.0892 15.4667 25.8025 19.7567 25.4025 23.97C22.7292 52.2234 20.6125 78.18 19.0525 101.84C18.5525 109.46 18.4158 116.68 18.6425 123.5C19.1825 139.573 23.1758 155.58 30.6225 171.52Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape19&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.7841415488515 13.3674609375)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.0522 0C8.66553 0.146667 13.3755 0.21 18.1822 0.19C20.0355 0.183333 21.4389 0.42 22.3922 0.9C25.8622 2.65 26.8622 6.68 24.4922 9.93C23.2455 11.6367 21.2922 12.4233 18.6322 12.29C16.7255 12.1967 14.9289 12.1633 13.2422 12.19C10.5489 12.0967 7.9222 12.1 5.3622 12.2C-1.3878 12.45 -1.6978 1.74 4.0522 0Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape20&quot; transform=&quot;matrix(0.0338611839889802 -0.00945421244350544 0.00945421244350544 0.0338611839889802 14.9149266129752 14.0867380565676)&quot; rx=&quot;5.57&quot; ry=&quot;5.2&quot; cx=&quot;5.57&quot; cy=&quot;5.2&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape21&quot; transform=&quot;matrix(0.0351561964539828 6.13592003636124e-05 -6.13592003636124e-05 0.0351561964539828 19.6449060698586 14.4819473774511)&quot; rx=&quot;16.66&quot; ry=&quot;16.28&quot; cx=&quot;16.66&quot; cy=&quot;16.28&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape22&quot; transform=&quot;matrix(-0.0146348716029047 0.031965331958686 -0.031965331958686 -0.0146348716029047 15.8772166930746 14.8739620295146)&quot; rx=&quot;9.67&quot; ry=&quot;9.33&quot; cx=&quot;9.67&quot; cy=&quot;9.33&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape23&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.997793706651 14.9540625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M18.805 0C21.585 0.06 23.4616 1.22333 24.435 3.49C25.995 7.11667 24.7383 9.90667 20.665 11.86C15.6716 12.2 10.8516 12.3133 6.20498 12.2C3.87831 12.14 2.32498 11.6733 1.54498 10.8C-2.08502 6.74 1.16498 1.1 6.28498 0.8C10.2716 0.566667 14.445 0.3 18.805 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape24&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.0361349190606 15.7107890625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M19.9144 0.0653333C23.6544 0.312 25.9044 1.90533 26.6644 4.84533C27.3911 7.62533 26.7277 9.78533 24.6744 11.3253C22.6044 12.8753 19.9444 12.4853 17.4044 12.5253C13.2911 12.5987 8.80105 12.5787 3.93438 12.4653C-0.498949 9.852 -1.18562 6.45533 1.87438 2.27533C2.98438 0.765333 4.21438 0.125333 6.20438 0.0853333C10.8177 -0.0213333 15.3877 -0.028 19.9144 0.0653333Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape25&quot; transform=&quot;matrix(-0.0170977282180133 0.0307185547160906 -0.0307185547160906 -0.0170977282180133 15.1542587716268 16.0053675452257)&quot; rx=&quot;11.64&quot; ry=&quot;11.38&quot; cx=&quot;11.64&quot; cy=&quot;11.38&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;circle id=&quot;shape26&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.345234375 16.0238671875)&quot; r=&quot;7.22&quot; cx=&quot;7.22&quot; cy=&quot;7.22&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape27&quot; transform=&quot;matrix(0.0280770296501001 -0.0211575594076892 0.0211575594076892 0.0280770296501001 19.8774398273616 16.4371069616574)&quot; rx=&quot;8.42&quot; ry=&quot;8.13&quot; cx=&quot;8.42&quot; cy=&quot;8.13&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape28&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1414052368516 17.2710454963236)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.02 12.1647L3.45003 11.8747C1.14336 10.388 -0.00663785 8.42471 2.88184e-05 5.98471C0.0133622 3.09804 1.57336 1.13137 4.68003 0.0847059C10.1067 0.00470588 15.6967 -0.0186275 21.45 0.0147059C22.75 0.0247059 23.92 0.0247059 24.8 1.15471C27.1134 4.10804 27.24 7.30471 25.18 10.7447C24.5867 11.7314 23.5334 12.2047 22.02 12.1647Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape29&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.9485123620206 17.688515625)&quot; fill=&quot;rgb(25,16,15)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M94.2701 0L112.84 0.29C113.373 6.01 113.157 11.6167 112.19 17.11C110.957 24.1567 109.597 30.3733 108.11 35.76C106.843 40.3467 104.56 46.5667 101.26 54.42C98.5934 60.76 95.7234 66.4633 92.6501 71.53C74.9968 100.71 50.0768 121.763 17.8901 134.69C12.7801 136.32 5.23009 136.79 1.81009 132.18C-2.58991 126.21 1.72009 121.04 7.38009 118.61C18.6068 113.783 28.7468 108.023 37.8001 101.33C57.4201 86.8233 71.8068 69.5767 80.9601 49.59C87.6934 34.8833 92.1301 18.3533 94.2701 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape30&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9331058615201 20.210194296345)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.830544 4.59225C1.98054 2.02225 4.27054 0.202251 7.19054 0.0222511C13.5005 -0.367749 17.0705 4.44225 20.8405 8.69225C24.9205 13.2723 24.7505 19.4123 19.5605 22.8923C14.7605 26.1223 10.5505 23.2223 6.91054 19.4823C2.88054 15.3523 -1.96946 10.8623 0.830544 4.59225Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape31&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.6404577789765 21.5771484375)&quot; fill=&quot;rgb(25,16,15)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.07476 0C8.08142 5.61333 15.5614 10.35 23.5148 14.21C29.8681 17.29 36.3014 20.1933 42.8148 22.92C60.4748 30.32 77.6181 35.09 94.2448 37.23C109.971 39.2633 126.571 38.5767 144.045 35.17L147.645 35.08C147.945 35.0733 148.221 35.15 148.475 35.31C149.161 35.7233 149.338 36.3467 149.005 37.18C148.878 37.4867 148.938 37.7533 149.185 37.98C149.755 38.5 150.175 38.94 150.235 39.77C150.361 41.7967 150.618 43.8033 151.005 45.79C151.065 46.1233 150.975 46.4067 150.735 46.64C150.228 47.1467 149.631 47.4867 148.945 47.66C148.731 47.7133 148.631 47.85 148.645 48.07C148.658 48.2767 148.501 48.4167 148.175 48.49C148.041 48.5167 147.908 48.5333 147.775 48.54L145.005 48.63C144.678 48.6433 144.485 48.81 144.425 49.13C144.371 49.41 144.138 49.5633 143.725 49.59C143.659 49.5967 143.588 49.5933 143.515 49.58C141.015 49.2067 139.005 49.84 137.485 51.48C124.278 53.2267 112.368 53.5833 101.755 52.55C80.2748 50.4633 60.3014 44.84 41.8348 35.68C35.8281 32.7 28.6481 28.54 20.2948 23.2C14.0414 19.2067 7.30142 13.6633 0.0747565 6.57C0.0547565 4.57 -0.375243 1.5 1.07476 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape32&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.548046875 24.3846604970638)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M37.39 126.792L36.84 125.732C36.6867 125.445 36.61 125.139 36.61 124.812L36.29 50.1519C39.97 50.1319 42.74 50.0419 44.93 47.3519C46.0567 45.9652 46.4067 44.4152 45.98 42.7019C44.81 38.0219 40.08 37.5119 35.72 37.6019L35.91 26.2919C40.16 26.9019 44.77 27.8519 48.81 25.9619C52.26 24.3519 53.31 20.2319 50.85 17.2519C48.51 14.4319 45.36 14.2119 41.99 14.2719C35.7567 14.3852 29.3167 14.4052 22.67 14.3319C19.49 14.3019 16.81 15.9619 15.14 18.6319C15.2 16.6619 12.86 15.6819 11.44 14.7519C10.6133 14.2119 9.90667 13.5852 9.32 12.8719C6.57333 9.53188 3.78 6.23188 0.94 2.97188C0.46 2.41855 0.146667 1.62521 0 0.591879C17.1 3.24521 34.28 3.98188 51.54 2.80188C57.06 2.42188 62.3133 1.51855 67.3 0.0918792C68.18 -0.154787 68.3567 0.0952125 67.83 0.841879C58.7633 13.8352 53.49 29.3252 52.01 47.3119C50.37 67.3319 51 88.9819 56.8 107.652C58.81 114.142 62.13 120.072 65.01 126.212C65.0485 126.291 65.0589 126.382 65.0394 126.468C65.02 126.554 64.9718 126.631 64.9029 126.686C64.834 126.741 64.7483 126.772 64.66 126.772Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape33&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.486355851717 24.3923298330305)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.75477 0.373729C1.90143 1.40706 2.21477 2.2004 2.69477 2.75373C5.53477 6.01373 8.3281 9.31373 11.0748 12.6537C11.6614 13.3671 12.3681 13.9937 13.1948 14.5337C14.6148 15.4637 16.9548 16.4437 16.8948 18.4137L16.5848 19.0537C15.9714 19.3604 15.6748 19.8204 15.6948 20.4337C15.8148 23.3437 16.3448 26.1237 18.0248 28.6937C19.9714 31.6737 22.1714 34.5471 24.6248 37.3137C19.6548 39.6737 18.5548 46.9937 24.3448 49.3137C24.1981 53.2071 24.2048 57.1237 24.3648 61.0637C24.5581 65.7371 24.5748 69.6437 24.4148 72.7837C24.2014 77.0371 23.9914 81.3304 23.7848 85.6637C23.1248 99.8304 19.6748 113.244 13.4348 125.904C13.2814 126.21 13.0314 126.384 12.6848 126.424L11.5948 126.534L3.79477 126.534C3.66373 126.534 3.5364 126.49 3.43437 126.408C3.33234 126.325 3.26171 126.21 3.23447 126.082C3.20722 125.954 3.22499 125.82 3.28477 125.704C16.0848 100.784 18.1148 71.0737 14.6948 43.5737C12.8014 28.3737 7.92143 14.0371 0.0547669 0.563729C0.0152725 0.50031 -0.00361813 0.426609 0.000572506 0.352292C0.00476314 0.277975 0.0318434 0.20644 0.0782619 0.147067C0.12468 0.0876949 0.188315 0.0431997 0.26082 0.0194171C0.333326 -0.0043654 0.411387 -0.00634806 0.484767 0.0137292Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape34&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.0617214476865 24.8861307529877)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M21.2988 12.0278C16.7455 11.8878 12.1288 11.8545 7.44881 11.9278C4.74215 11.9678 2.94548 11.7312 2.05881 11.2178C0.238812 10.1645 -0.374521 8.0945 0.218812 5.00784L0.528812 4.36784C2.19881 1.69784 4.87881 0.0378364 8.05881 0.0678364C14.7055 0.14117 21.1455 0.12117 27.3788 0.00783636C30.7488 -0.0521636 33.8988 0.167836 36.2388 2.98784C38.6988 5.96784 37.6488 10.0878 34.1988 11.6978C30.1588 13.5878 25.5488 12.6378 21.2988 12.0278Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape35&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.038091694079 25.0621875000001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.890947 0C0.297614 3.08667 0.910947 5.15667 2.73095 6.21C3.61761 6.72333 5.41428 6.96 8.12095 6.92C12.8009 6.84667 17.4176 6.88 21.9709 7.02L21.7809 18.33L8.93095 18.26C6.47761 15.4933 4.27761 12.62 2.33095 9.64C0.650947 7.07 0.120947 4.29 0.000947368 1.38C-0.0190526 0.766667 0.277614 0.306667 0.890947 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape36&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.2047130847683 25.704140625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.19149 0L17.0415 0.07C21.4015 -0.02 26.1315 0.49 27.3015 5.17C27.7282 6.88333 27.3782 8.43333 26.2515 9.82C24.0615 12.51 21.2915 12.6 17.6115 12.62L3.91149 12C-1.87851 9.68 -0.778506 2.36 4.19149 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape37&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.893984375 26.126015625)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M12.75 0L26.45 0.62L26.77 75.28C26.77 75.6067 26.8467 75.9133 27 76.2L27.55 77.26L0 77.22L1.09 77.11C1.43667 77.07 1.68667 76.8967 1.84 76.59C8.08 63.93 11.53 50.5167 12.19 36.35C12.3967 32.0167 12.6067 27.7233 12.82 23.47C12.98 20.33 12.9633 16.4233 12.77 11.75C12.61 7.81 12.6033 3.89333 12.75 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape38&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.22640625 29.4324536132813)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M29.96 24.0302C30.7067 23.5835 30.1467 23.1702 28.28 22.7902C27.96 22.7235 27.6733 22.5835 27.42 22.3702C24.9333 20.2235 22.8967 18.7069 21.31 17.8202C12.91 13.1069 5.80667 7.21687 0 0.150208L30.09 0.000208333C30.4767 -0.00645833 30.7833 0.146875 31.01 0.460208C37.57 9.69354 45.7567 17.2435 55.57 23.1102C55.9433 23.3302 55.92 23.4969 55.5 23.6102C54.48 23.8769 53.4167 24.0135 52.31 24.0202C44.77 24.0669 37.32 24.0702 29.96 24.0302Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape39&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.2706541442871 29.4394921875)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M38.2747 0C35.2147 4.74667 31.2681 10.0433 26.4347 15.89C23.4547 19.49 20.7014 22.14 18.1747 23.84L0.754727 23.73C-0.17194 23.7233 -0.245273 23.4733 0.534727 22.98C9.87473 17.05 17.3747 9.52 24.9347 0.58C25.0571 0.432797 25.211 0.314351 25.3856 0.233119C25.5601 0.151886 25.7511 0.109846 25.9447 0.11Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape40&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.909609375 29.437734375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M65.9 0C71.7067 7.06667 78.81 12.9567 87.21 17.67C88.7967 18.5567 90.8333 20.0733 93.32 22.22C93.5733 22.4333 93.86 22.5733 94.18 22.64C96.0467 23.02 96.6067 23.4333 95.86 23.88L0 23.89C2.52667 22.19 5.28 19.54 8.26 15.94C13.0933 10.0933 17.04 4.79667 20.1 0.05Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape41&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.6264334548969 30.8390367406574)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M175.558 0.450733C176.245 0.450733 176.568 0.567399 176.528 0.800733C176.494 1.0303 176.388 1.24303 176.226 1.40826C176.065 1.5735 175.855 1.68291 175.628 1.72073C171.935 2.3474 168.581 2.65073 165.568 2.63073C163.998 2.62073 162.798 3.35073 161.188 3.18073C160.808 3.14073 160.445 3.20407 160.098 3.37073L158.488 4.16073C158.195 4.30073 157.958 4.50407 157.778 4.77073C157.045 5.85073 156.111 6.47073 154.978 6.63073C153.258 6.87073 151.491 6.99073 149.678 6.99073C111.858 6.8974 73.5681 6.84073 34.8081 6.82073C28.6781 6.82073 24.4281 9.63073 23.3181 15.9507L0.628115 15.8107C0.50059 15.8104 0.376138 15.7713 0.2713 15.6987C0.166463 15.626 0.0861025 15.5233 0.0409006 15.404C-0.00430136 15.2848 -0.0122487 15.1546 0.0181151 15.0307C2.16812 6.40073 10.0881 -0.0792673 19.0981 0.00073271C53.2181 0.314066 87.8014 0.380733 122.848 0.200733C140.421 0.114066 157.991 0.197399 175.558 0.450733Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape42&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.4462109375 30.8548828125)&quot; fill=&quot;rgb(38,23,22)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M152.24 0L253.08 0.15C253.047 2.17 252.56 3.72667 251.62 4.82C250.867 5.69333 249.93 6.13667 248.81 6.15C221.383 6.39 194.363 6.58667 167.75 6.74C167.283 6.74 167.03 6.97333 166.99 7.44C166.87 8.95333 167.113 10.3433 167.72 11.61C167.847 11.8833 167.89 12.1667 167.85 12.46L167.63 14.18C167.577 14.5867 167.74 14.86 168.12 15C168.573 15.1667 168.867 15.3533 169 15.56L0 15.5C1.11 9.18 5.36 6.37 11.49 6.37C50.25 6.39 88.54 6.44667 126.36 6.54C128.173 6.54 129.94 6.42 131.66 6.18C132.793 6.02 133.727 5.4 134.46 4.32C134.64 4.05333 134.877 3.85 135.17 3.71L136.78 2.92C137.127 2.75333 137.49 2.69 137.87 2.73C139.48 2.9 140.68 2.17 142.25 2.18C145.263 2.2 148.617 1.89667 152.31 1.27C152.537 1.23218 152.746 1.12277 152.908 0.957532C153.07 0.792295 153.175 0.579568 153.21 0.35C153.25 0.116667 152.927 -1.13687e-13 152.24 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape43&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 19.3159081135321 30.86015625)&quot; fill=&quot;rgb(25,16,15)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M86.1197 0C93.6331 3.14 98.2231 7.99667 99.8897 14.57C99.9181 14.684 99.9111 14.804 99.8698 14.914C99.8285 15.024 99.7547 15.1189 99.6583 15.186C99.5618 15.2532 99.4472 15.2894 99.3297 15.29L2.03972 15.41C1.90639 15.2033 1.61306 15.0167 1.15972 14.85C0.779725 14.71 0.616391 14.4367 0.669725 14.03L0.889725 12.31C0.929725 12.0167 0.886391 11.7333 0.759725 11.46C0.153058 10.1933 -0.0902752 8.80333 0.0297248 7.29C0.0697248 6.82333 0.323058 6.59 0.789725 6.59C27.4031 6.43667 54.4231 6.24 81.8497 6C82.9697 5.98667 83.9064 5.54333 84.6597 4.67C85.5997 3.57667 86.0864 2.02 86.1197 0Z&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt;&lt;div class=&quot;w-16 h-16&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;fill-[${rgbColor} w-16 h-16&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 36 36&quot;&gt; &lt;defs&gt;&lt;/defs&gt; &lt;path id=&quot;shape0&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 10.393984646722 3.24851063866497)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M384.119 800.308C389.392 800.401 395.079 800.381 401.179 800.248C405.299 800.161 408.469 800.568 410.689 801.468C415.949 803.598 420.779 810.198 420.289 816.268C419.669 823.858 412.349 829.318 404.999 829.328C277.499 829.355 146.952 829.355 13.3589 829.328C8.63888 829.328 4.09888 825.978 1.87888 822.058C-2.73112 813.888 1.52888 803.918 10.4389 801.028C11.9855 800.528 13.9555 800.285 16.3489 800.298C22.1289 800.338 27.6889 800.265 33.0289 800.078C33.1769 800.076 33.3188 800.017 33.4263 799.913C33.5337 799.809 33.5989 799.668 33.6089 799.518C33.7489 797.391 34.0889 795.351 34.6289 793.398C38.5755 779.138 46.7822 768.285 59.2489 760.838C67.2389 756.068 77.9989 753.418 87.8689 753.798C91.7089 753.938 95.6189 754.578 99.3589 753.338C121.612 745.945 138.126 732.518 148.899 713.058C160.649 691.848 162.149 664.098 156.689 640.298C150.949 615.338 135.539 594.358 113.659 581.418C104.759 576.151 97.1322 571.378 90.7789 567.098C79.8722 559.751 69.4389 550.391 59.4789 539.018C41.7922 518.825 28.7222 496.301 20.2689 471.448C13.2089 450.695 9.41555 429.945 8.88888 409.198C8.39555 389.938 9.51888 370.588 12.2589 351.148C15.7689 326.188 18.7489 301.968 22.2689 277.258C23.1955 270.798 23.9055 264.308 24.3989 257.788C25.2922 245.915 26.1489 234.441 26.9689 223.368C28.2189 206.548 28.2189 189.968 28.2289 172.948C28.229 172.665 28.1641 172.386 28.0392 172.133C27.9143 171.88 27.7328 171.659 27.5089 171.488C4.71888 154.278 -3.35112 123.728 10.2489 97.8679C21.8189 75.8479 44.3589 62.0579 69.5789 63.3579C72.9922 63.5379 76.3389 64.1179 79.6189 65.0979C79.7826 65.1468 79.9567 65.1513 80.1235 65.1109C80.2903 65.0705 80.4439 64.9867 80.5689 64.8679C95.3422 50.8279 113.322 44.9613 134.509 47.2679C134.656 47.2852 134.804 47.2536 134.932 47.1778C135.061 47.102 135.161 46.9862 135.219 46.8479C136.972 42.6213 139.372 38.5079 142.419 34.5079C153.299 20.2379 166.749 9.32792 184.089 3.97792C204.569 -2.34875 224.312 -1.12875 243.319 7.63792C258.599 14.6779 272.559 26.6579 280.469 41.6579C280.596 41.9046 280.792 41.9846 281.059 41.8979C289.839 38.9646 299.389 37.9446 309.709 38.8379C326.729 40.3079 342.309 50.4379 353.989 63.2879C354.516 63.8679 355.166 64.1746 355.939 64.2079C361.419 64.4546 366.656 65.5513 371.649 67.4979C392.199 75.5079 406.519 91.1379 411.669 112.968C413.189 119.421 413.456 125.841 412.469 132.228C409.882 148.975 401.956 162.205 388.689 171.918C387.729 172.628 387.729 173.468 387.719 174.528C387.586 191.895 387.899 207.108 388.659 220.168C389.549 235.238 390.999 253.908 393.189 270.758C396.622 297.205 400.169 324.231 403.829 351.838C404.689 358.351 405.536 366.615 406.369 376.628C407.042 384.655 407.406 391.321 407.459 396.628C407.679 420.268 404.476 443.035 397.849 464.928C386.419 502.718 363.929 536.538 333.029 561.268C324.009 568.498 312.959 575.088 302.869 581.488C297.502 584.888 292.979 588.131 289.299 591.218C265.139 611.508 255.039 640.758 256.429 672.398C258.039 709.018 277.959 738.488 312.639 751.718C317.389 753.528 321.449 754.508 326.659 754.038C338.269 753.008 349.089 755.608 359.129 762.058C371.639 770.088 381.589 784.038 383.299 799.558C383.352 800.045 383.626 800.295 384.119 800.308ZM34.9389 123.938C34.6255 130.038 36.5689 135.461 40.7689 140.208C42.9155 142.635 45.5089 143.855 48.5489 143.868C57.4489 143.895 67.6722 143.898 79.2189 143.878C80.8589 143.878 81.9889 142.308 82.5389 140.958C82.6855 140.585 82.6522 140.231 82.4389 139.898C80.5522 136.978 80.8189 134.321 83.2389 131.928C87.7189 127.508 91.8289 130.808 94.8789 134.678C97.7389 138.308 103.749 143.708 108.819 143.768C117.746 143.855 126.882 143.871 136.229 143.818C142.909 143.768 150.429 136.098 154.769 131.618C156.269 130.068 158.029 129.188 160.259 129.608C164.159 130.328 166.106 132.778 166.099 136.958C166.099 138.248 165.299 139.248 164.549 140.218C164.261 140.59 164.13 141.06 164.184 141.527C164.239 141.994 164.474 142.422 164.839 142.718C166.006 143.678 167.326 144.148 168.799 144.128C196.979 143.828 224.629 143.751 251.749 143.898C253.509 143.905 255.106 143.581 256.539 142.928C256.721 142.847 256.872 142.708 256.969 142.533C257.065 142.358 257.101 142.155 257.073 141.955C257.044 141.756 256.951 141.571 256.809 141.428C253.879 138.498 254.059 132.908 257.859 130.608C262.999 127.498 266.539 130.248 269.939 133.818C274.619 138.718 280.959 143.828 287.779 143.838C296.859 143.865 305.789 143.868 314.569 143.848C321.399 143.828 328.259 136.098 332.759 131.638C335.086 129.338 337.459 128.821 339.879 130.088C343.819 132.161 344.612 135.195 342.259 139.188C342.08 139.495 341.983 139.844 341.98 140.198C341.976 140.552 342.066 140.901 342.239 141.208C343.319 143.118 344.959 144.088 347.179 144.068C354.066 144.001 361.086 143.928 368.239 143.848C370.352 143.821 372.149 143.235 373.629 142.088C379.589 137.488 382.416 131.278 382.109 123.458C381.969 109.928 371.589 99.2079 359.169 95.4779C358.953 95.4151 358.724 95.4137 358.51 95.4738C358.296 95.534 358.105 95.6534 357.959 95.8179C355.212 98.9446 351.706 100.435 347.439 100.288C341.069 100.068 338.009 96.4579 335.789 91.1479C332.202 82.5946 326.232 76.3279 317.879 72.3479C307.626 67.4546 296.802 67.5779 285.409 72.7179C282.069 74.2179 279.519 77.4279 276.309 79.4679C269.159 84.0279 261.339 79.8879 260.179 71.8979C258.606 61.0979 253.279 51.6813 244.199 43.6479C217.109 19.6679 175.399 28.6579 160.839 61.6279C158.766 66.3279 157.699 70.8946 157.639 75.3279C157.559 80.8679 155.339 86.2279 149.929 88.1679C144.262 90.2146 139.372 89.0513 135.259 84.6779C133.749 83.0679 132.859 81.0279 131.499 79.3379C131.286 79.0646 131.012 78.8779 130.679 78.7779C128.472 78.1113 126.346 77.8213 124.299 77.9079C113.326 78.3813 104.429 83.1579 97.6089 92.2379C94.2189 96.7479 94.0089 102.468 90.0089 106.458C86.8589 109.588 81.6689 110.618 77.7089 108.488C73.0155 105.968 70.9422 101.938 71.4889 96.3979C71.5755 95.5313 71.1922 95.0446 70.3389 94.9379C59.7789 93.5446 50.8422 96.5046 43.5289 103.818C38.0555 109.291 35.1922 115.998 34.9389 123.938ZM70.3189 172.868L60.5489 172.868C60.0022 172.868 59.7255 173.141 59.7189 173.688C59.4855 194.395 58.5655 214.878 56.9589 235.138C56.6655 238.818 56.5355 242.431 56.5689 245.978C56.5689 246.378 56.7689 246.578 57.1689 246.578L287.389 246.598L306.739 246.558L315.789 246.558C316.622 246.558 317.009 246.145 316.949 245.318C315.196 221.491 313.862 197.675 312.949 173.868C312.939 173.596 312.822 173.339 312.625 173.151C312.427 172.963 312.163 172.858 311.889 172.858L302.559 172.868L102.799 172.818L85.9489 172.788ZM345.659 172.918L336.369 172.938C335.276 172.938 334.742 173.485 334.769 174.578C335.302 197.585 336.822 220.561 339.329 243.508C339.429 244.421 339.629 245.291 339.929 246.118C339.981 246.258 340.075 246.379 340.199 246.463C340.322 246.547 340.469 246.591 340.619 246.588L349.349 246.478L358.959 246.388C359.056 246.388 359.152 246.362 359.234 246.311C359.317 246.259 359.384 246.186 359.427 246.099C359.47 246.012 359.488 245.915 359.479 245.818C358.169 231.648 357.729 217.678 356.929 203.398C356.396 193.905 356.209 183.971 356.369 173.598C356.371 173.466 356.337 173.335 356.273 173.221C356.208 173.106 356.114 173.011 356.001 172.945C355.888 172.88 355.759 172.846 355.629 172.848ZM285.139 272.498L66.0789 272.778L56.5789 272.838C56.2688 272.842 55.9676 272.941 55.7169 273.122C55.4662 273.302 55.2782 273.556 55.1789 273.848C53.5922 278.475 52.3889 283.555 51.5689 289.088C50.7689 294.528 50.0622 299.925 49.4489 305.278C45.8889 336.418 40.7589 367.688 40.1089 398.048C39.6822 418.115 42.5555 438.068 48.7289 457.908C57.0789 484.768 71.6889 508.708 92.4189 527.918C99.6455 535.011 106.386 540.555 112.639 544.548C120.992 549.888 128.172 554.048 134.179 557.028C152.646 566.188 172.619 571.811 194.099 573.898C204.712 574.931 216.622 574.575 229.829 572.828C240.356 571.415 249.986 569.291 258.719 566.458C291.679 555.758 320.169 534.368 341.689 507.238C357.689 487.038 368.109 461.898 373.119 436.298C376.719 417.938 377.099 398.938 375.549 380.068C373.189 351.368 369.499 324.108 365.409 293.848C364.422 286.581 363.209 279.731 361.769 273.298C361.729 273.128 361.634 272.976 361.499 272.867C361.365 272.758 361.199 272.699 361.029 272.698ZM175.049 601.798L173.779 601.438C173.706 601.418 173.627 601.42 173.555 601.444C173.482 601.467 173.419 601.512 173.372 601.571C173.326 601.631 173.299 601.702 173.295 601.776C173.29 601.851 173.309 601.925 173.349 601.988C181.216 615.461 186.096 629.798 187.989 644.998C191.409 672.498 189.379 702.208 176.579 727.128C176.519 727.245 176.501 727.378 176.529 727.506C176.556 727.635 176.626 727.75 176.728 727.832C176.831 727.914 176.958 727.959 177.089 727.958L184.889 727.958L212.439 727.998L239.709 727.978C239.797 727.978 239.883 727.947 239.952 727.892C240.021 727.837 240.069 727.76 240.088 727.674C240.108 727.588 240.097 727.497 240.059 727.418C237.179 721.278 233.859 715.348 231.849 708.858C226.049 690.188 225.419 668.538 227.059 648.518C228.539 630.531 233.812 615.041 242.879 602.048C243.406 601.301 243.229 601.051 242.349 601.298C237.362 602.725 232.109 603.628 226.589 604.008C209.329 605.188 192.149 604.451 175.049 601.798ZM222.789 744.938L176.989 744.988L164.659 745.098C164.465 745.098 164.274 745.14 164.1 745.221C163.925 745.302 163.771 745.421 163.649 745.568C156.089 754.508 148.589 762.038 139.249 767.968C138.469 768.461 138.542 768.711 139.469 768.718L156.889 768.828L252.749 768.818C260.109 768.858 267.559 768.855 275.099 768.808C276.206 768.801 277.269 768.665 278.289 768.398C278.709 768.285 278.732 768.118 278.359 767.898C268.546 762.031 260.359 754.481 253.799 745.248C253.572 744.935 253.266 744.781 252.879 744.788ZM86.8189 800.748L255.819 800.808L353.109 800.688C353.226 800.687 353.341 800.651 353.437 800.584C353.534 800.517 353.608 800.422 353.649 800.312C353.69 800.202 353.697 800.082 353.669 799.968C352.002 793.395 347.412 788.538 339.899 785.398L239.059 785.248C221.492 784.995 203.922 784.911 186.349 784.998C151.302 785.178 116.719 785.111 82.5989 784.798C73.5889 784.718 65.6689 791.198 63.5189 799.828C63.4885 799.952 63.4965 800.082 63.5417 800.201C63.5869 800.32 63.6672 800.423 63.7721 800.496C63.8769 800.568 64.0014 800.608 64.1289 800.608Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape1&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6223046875 4.3066710451255)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.17 93.3591L341.7 94.8091C341.347 94.9025 341.043 95.0758 340.79 95.3291C334.81 101.209 327.56 101.079 319.06 100.739C316.15 100.619 313.98 99.6891 312.72 96.9491C310.21 91.4791 305.03 84.9891 298.07 88.5091C296.217 89.4491 294.677 90.6225 293.45 92.0291C288.01 98.2791 282.29 103.559 274.1 105.299C270.267 106.112 266.1 106.416 261.6 106.209C253.04 105.819 244.67 101.199 239.15 94.8491C232.37 87.0391 226.88 84.2491 219.24 92.9691C214.89 97.9391 209.89 101.049 202.97 101.219C196.37 101.379 189.917 101.426 183.61 101.359C182.93 101.352 182.43 100.989 182.11 100.269C182.01 100.04 181.975 99.7876 182.008 99.5391C182.042 99.2906 182.143 99.0554 182.3 98.8591C183.04 97.9325 183.813 97.0725 184.62 96.2791C187.09 93.8491 185.64 89.9291 183.51 87.8291C180.65 85.0091 175.91 85.9891 173.39 88.9391C172.23 90.2925 171.17 91.6391 170.21 92.9791C163.5 102.299 152.67 101.929 142.47 100.679C134.9 99.7591 131.64 94.3891 126.62 89.6591C123.633 86.8525 120.593 86.8391 117.5 89.6191C112.63 93.9791 108.24 99.7591 102.47 102.719C88.07 110.129 72.61 106.679 62.57 94.0391C58.62 89.0591 52.95 85.2191 47.21 90.7591C44.54 93.3491 43.94 96.9991 40.53 99.0891C36.59 101.509 29.55 101.139 24.26 101.029C18.64 100.899 13.25 100.999 9.85 97.1991C7.82 94.9191 4 93.8291 2.11 96.9691C1.02333 98.7691 0.446667 98.6225 0.38 96.5291C0.366667 95.9891 0.24 95.0925 0 93.8391C0.253333 85.8991 3.11667 79.1925 8.59 73.7191C15.9033 66.4058 24.84 63.4458 35.4 64.8391C36.2533 64.9458 36.6367 65.4325 36.55 66.2991C36.0033 71.8391 38.0767 75.8691 42.77 78.3891C46.73 80.5191 51.92 79.4891 55.07 76.3591C59.07 72.3691 59.28 66.6491 62.67 62.1391C69.49 53.0591 78.3867 48.2825 89.36 47.8091C91.4067 47.7225 93.5333 48.0125 95.74 48.6791C96.0733 48.7791 96.3467 48.9658 96.56 49.2391C97.92 50.9291 98.81 52.9691 100.32 54.5791C104.433 58.9525 109.323 60.1158 114.99 58.0691C120.4 56.1291 122.62 50.7691 122.7 45.2291C122.76 40.7958 123.827 36.2291 125.9 31.5291C140.46 -1.44087 182.17 -10.4309 209.26 13.5491C218.34 21.5825 223.667 30.9991 225.24 41.7991C226.4 49.7891 234.22 53.9291 241.37 49.3691C244.58 47.3291 247.13 44.1191 250.47 42.6191C261.863 37.4791 272.687 37.3558 282.94 42.2491C291.293 46.2291 297.263 52.4958 300.85 61.0491C303.07 66.3591 306.13 69.9691 312.5 70.1891C316.767 70.3358 320.273 68.8458 323.02 65.7191C323.166 65.5546 323.357 65.4352 323.571 65.3751C323.785 65.3149 324.014 65.3163 324.23 65.3791C336.65 69.1091 347.03 79.8291 347.17 93.3591Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape2&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6211575655465 7.33540715628013)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.203 7.20842C347.509 15.0284 344.683 21.2384 338.723 25.8384C337.243 26.9851 335.446 27.5718 333.333 27.5984C326.179 27.6784 319.159 27.7518 312.273 27.8184C310.053 27.8384 308.413 26.8684 307.333 24.9584C307.159 24.651 307.07 24.3028 307.074 23.9484C307.077 23.594 307.173 23.2458 307.353 22.9384C309.706 18.9451 308.913 15.9118 304.973 13.8384C302.553 12.5718 300.179 13.0884 297.853 15.3884C293.353 19.8484 286.493 27.5784 279.663 27.5984C270.883 27.6184 261.953 27.6151 252.873 27.5884C246.053 27.5784 239.713 22.4684 235.033 17.5684C231.633 13.9984 228.093 11.2484 222.953 14.3584C219.153 16.6584 218.973 22.2484 221.903 25.1784C222.045 25.3214 222.137 25.5067 222.166 25.706C222.195 25.9053 222.159 26.108 222.062 26.2834C221.966 26.4588 221.815 26.5975 221.633 26.6784C220.199 27.3318 218.603 27.6551 216.843 27.6484C189.723 27.5018 162.073 27.5784 133.893 27.8784C132.419 27.8984 131.099 27.4284 129.933 26.4684C129.567 26.1723 129.332 25.7446 129.278 25.2775C129.224 24.8105 129.355 24.3403 129.643 23.9684C130.393 22.9984 131.193 21.9984 131.193 20.7084C131.199 16.5284 129.253 14.0784 125.353 13.3584C123.123 12.9384 121.363 13.8184 119.863 15.3684C115.523 19.8484 108.003 27.5184 101.323 27.5684C91.976 27.6218 82.8393 27.6051 73.9126 27.5184C68.8426 27.4584 62.8326 22.0584 59.9726 18.4284C56.9226 14.5584 52.8126 11.2584 48.3326 15.6784C45.9126 18.0718 45.646 20.7284 47.5326 23.6484C47.746 23.9818 47.7793 24.3351 47.6326 24.7084C47.0826 26.0584 45.9526 27.6284 44.3126 27.6284C32.766 27.6484 22.5426 27.6451 13.6426 27.6184C10.6026 27.6051 8.0093 26.3851 5.86263 23.9584C1.66263 19.2118 -0.280704 13.7884 0.0326292 7.68842C0.272629 8.94175 0.399296 9.83842 0.412629 10.3784C0.479296 12.4718 1.05596 12.6184 2.14263 10.8184C4.03263 7.67842 7.85263 8.76842 9.88263 11.0484C13.2826 14.8484 18.6726 14.7484 24.2926 14.8784C29.5826 14.9884 36.6226 15.3584 40.5626 12.9384C43.9726 10.8484 44.5726 7.19842 47.2426 4.60842C52.9826 -0.931581 58.6526 2.90842 62.6026 7.88842C72.6426 20.5284 88.1026 23.9784 102.503 16.5684C108.273 13.6084 112.663 7.82842 117.533 3.46842C120.626 0.688419 123.666 0.701752 126.653 3.50842C131.673 8.23842 134.933 13.6084 142.503 14.5284C152.703 15.7784 163.533 16.1484 170.243 6.82842C171.203 5.48842 172.263 4.14175 173.423 2.78842C175.943 -0.161581 180.683 -1.14158 183.543 1.67842C185.673 3.77842 187.123 7.69842 184.653 10.1284C183.846 10.9218 183.073 11.7818 182.333 12.7084C182.175 12.9047 182.074 13.1399 182.041 13.3884C182.007 13.6369 182.043 13.8894 182.143 14.1184C182.463 14.8384 182.963 15.2018 183.643 15.2084C189.949 15.2751 196.403 15.2284 203.003 15.0684C209.923 14.8984 214.923 11.7884 219.273 6.81842C226.913 -1.90158 232.403 0.888419 239.183 8.69842C244.703 15.0484 253.073 19.6684 261.633 20.0584C266.133 20.2651 270.299 19.9618 274.133 19.1484C282.323 17.4084 288.043 12.1284 293.483 5.87842C294.709 4.47175 296.249 3.29842 298.103 2.35842C305.063 -1.16158 310.243 5.32842 312.753 10.7984C314.013 13.5384 316.183 14.4684 319.093 14.5884C327.593 14.9284 334.843 15.0584 340.823 9.17842C341.076 8.92509 341.379 8.75175 341.733 8.65842Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape3&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.7941352600339 9.3230859375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M17.6779 0C16.5513 11.84 15.9213 19.36 15.7879 22.56C15.3079 33.9733 14.6346 46.28 13.7679 59.48C13.6013 62.04 13.1046 63.7467 12.2779 64.6C8.55793 68.45 -0.30207 67.53 0.00793038 61.06C1.34793 33.3133 2.02793 12.9867 2.04793 0.08Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape4&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9413128810975 9.32414062500001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M201.657 0.05C201.63 7.10333 201.687 11.5967 201.827 13.53C203.28 33.53 204.617 53.6 205.837 73.74L186.487 73.78L193.557 73.61C193.714 73.6076 193.867 73.5609 193.998 73.4752C194.129 73.3896 194.234 73.2685 194.299 73.126C194.364 72.9835 194.388 72.8254 194.367 72.67C193.367 64.75 192.894 56.7733 192.947 48.74C196.9 43.82 196.69 38.93 192.317 34.07C191.537 32.47 191.137 31.2867 191.117 30.52C190.984 25.7933 191.01 21.2667 191.197 16.94C191.213 16.5684 191.128 16.1993 190.951 15.872C190.773 15.5446 190.51 15.2711 190.189 15.0807C189.868 14.8902 189.501 14.7897 189.127 14.79L153.317 14.9C152.777 12.9667 151.747 11.28 150.227 9.84C148.927 8.60667 147.257 7.7 145.217 7.12C138.364 5.17333 133.557 7.71667 130.797 14.75C116.39 14.8967 101.944 14.9467 87.4571 14.9C61.1271 14.81 34.7871 15.13 8.5371 15.06C6.00377 15.0533 4.15377 14.7633 2.9871 14.19C0.773767 13.11 -0.209566 11.2233 0.0371003 8.53C0.150434 7.29667 0.770434 4.45333 1.8971 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape5&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.5460546875 9.32519283839548)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M3.69 73.6301L0 0.0700704L9.97 7.03745e-05C10.1004 -0.00175254 10.2289 0.031869 10.3421 0.0974247C10.4553 0.16298 10.5492 0.258107 10.6139 0.372872C10.6786 0.487637 10.7118 0.617903 10.71 0.75007C10.55 11.1234 10.7367 21.0567 11.27 30.5501C12.07 44.8301 12.51 58.8001 13.82 72.9701C13.8293 73.0668 13.8114 73.1643 13.7681 73.2514C13.7249 73.3384 13.6581 73.4116 13.5754 73.4627C13.4926 73.5137 13.3972 73.5405 13.3 73.5401Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape6&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.3825550063776 9.3230859375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M13.7551 0.08C13.7351 12.9867 13.0551 33.3133 11.7151 61.06C11.4051 67.53 20.2651 68.45 23.9851 64.6C24.8118 63.7467 25.3084 62.04 25.4751 59.48C26.3418 46.28 27.0151 33.9733 27.4951 22.56C27.6284 19.36 28.2584 11.84 29.3851 0L46.2351 0.03C45.1084 4.48333 44.4884 7.32667 44.3751 8.56C44.1284 11.2533 45.1118 13.14 47.3251 14.22C48.4918 14.7933 50.3418 15.0833 52.8751 15.09C79.1251 15.16 105.465 14.84 131.795 14.93C146.282 14.9767 160.728 14.9267 175.135 14.78C174.568 20.8133 176.498 24.9267 180.925 27.12C183.338 28.3133 185.805 28.72 188.325 28.34C194.755 27.36 198.095 21.26 197.655 14.93L233.465 14.82C233.839 14.8197 234.206 14.9202 234.527 15.1107C234.848 15.3011 235.111 15.5746 235.289 15.902C235.466 16.2293 235.551 16.5984 235.535 16.97C235.348 21.2967 235.322 25.8233 235.455 30.55C235.475 31.3167 235.875 32.5 236.655 34.1C232.788 31.5133 229.168 30.99 225.795 32.53C211.935 38.83 224.195 59.55 237.285 48.77C237.232 56.8033 237.705 64.78 238.705 72.7C238.726 72.8554 238.702 73.0135 238.637 73.156C238.572 73.2985 238.467 73.4196 238.336 73.5052C238.205 73.5909 238.052 73.6376 237.895 73.64L230.825 73.81L0.605102 73.79C0.205102 73.79 0.00510204 73.59 0.00510204 73.19C-0.0282313 69.6433 0.101769 66.03 0.395102 62.35C2.00177 42.09 2.92177 21.6067 3.1551 0.9C3.16177 0.353333 3.43844 0.08 3.9851 0.08ZM127.005 36.5C127.005 34.413 126.456 32.3624 125.412 30.555C124.369 28.7476 122.867 27.2464 121.06 26.203C119.253 25.1595 117.202 24.61 115.115 24.61C111.963 24.61 108.937 25.8635 106.708 28.0925C104.479 30.3215 103.225 33.3478 103.225 36.5C103.225 39.6522 104.479 42.6785 106.708 44.9075C108.937 47.1365 111.963 48.39 115.115 48.39C117.202 48.39 119.253 47.8405 121.06 46.797C122.867 45.7536 124.369 44.2524 125.412 42.445C126.456 40.6376 127.005 38.587 127.005 36.5ZM75.9704 37.4184C76.0574 34.3019 74.8637 31.2741 72.6541 29.007C70.4445 26.7398 67.3954 25.4143 64.1835 25.3246C62.057 25.2652 59.9523 25.7501 58.0818 26.7303C56.2114 27.7105 54.6403 29.152 53.5271 30.9092C52.414 32.6664 51.7974 34.6782 51.7398 36.7416C51.6528 39.8581 52.8465 42.8859 55.0561 45.153C57.2657 47.4202 60.3148 48.7457 63.5267 48.8354C65.6532 48.8948 67.7579 48.4099 69.6284 47.4297C71.4988 46.4495 73.0699 45.008 74.1831 43.2508C75.2962 41.4936 75.9128 39.4818 75.9704 37.4184ZM183.874 50.7982C183.856 49.4819 183.468 48.1937 182.749 47.0635C182.03 45.9334 181.006 45.0007 179.779 44.3595C178.552 43.7184 177.166 43.3911 175.76 43.4107C173.637 43.4404 171.61 44.2595 170.128 45.6863C168.646 47.1131 167.828 49.0336 167.856 51.0218C167.874 52.3381 168.262 53.6263 168.981 54.7565C169.7 55.8866 170.725 56.8193 171.951 57.4605C173.178 58.1016 174.564 58.4289 175.97 58.4093C178.093 58.3796 180.121 57.5605 181.603 56.1337C183.084 54.7069 183.902 52.7864 183.874 50.7982Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape7&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.0305953125001 9.32554685349047)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.0064 0.0100006L9.3364 6.11826e-07C9.61064 -0.000292647 9.87453 0.104847 10.0721 0.293135C10.2697 0.481423 10.3861 0.738544 10.3964 1.01C11.3097 24.8167 12.6431 48.6333 14.3964 72.46C14.4564 73.2867 14.0697 73.7 13.2364 73.7L4.1864 73.7C2.9664 53.56 1.62973 33.49 0.1764 13.49C0.0364 11.5567 -0.0202667 7.06333 0.0064 0.0100006Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape8&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1631696428572 9.32765624999999)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M10.891 0L14.581 73.56L5.85095 73.67C5.70139 73.6731 5.55452 73.6294 5.43088 73.5452C5.30724 73.461 5.21287 73.3403 5.16095 73.2C4.86095 72.3733 4.66095 71.5033 4.56095 70.59C2.05429 47.6433 0.534286 24.6667 0.000952381 1.66C-0.0257143 0.566667 0.507619 0.02 1.60095 0.02Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape9&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.5362571970961 9.55219950584632)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.6165 8.41299C23.0565 14.743 19.7165 20.843 13.2865 21.823C10.7665 22.203 8.2998 21.7963 5.88646 20.603C1.4598 18.4097 -0.470205 14.2963 0.0964619 8.26299C2.85646 1.22966 7.66313 -1.31367 14.5165 0.632992C16.5565 1.21299 18.2265 2.11966 19.5265 3.35299C21.0465 4.79299 22.0765 6.47966 22.6165 8.41299Z&quot;&gt;&lt;/path&gt; &lt;circle id=&quot;shape10&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.0115625 10.18828125)&quot; r=&quot;11.89&quot; cx=&quot;11.89&quot; cy=&quot;11.89&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape11&quot; transform=&quot;matrix(0.0351425431068875 0.000981620111375468 -0.000981620111375468 0.0351425431068875 14.2130771675543 10.2015061448131)&quot; rx=&quot;12.12&quot; ry=&quot;11.76&quot; cx=&quot;12.12&quot; cy=&quot;11.76&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape12&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 20.1057469902912 10.4364122450525)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M16.9732 2.43205C21.3465 7.29205 21.5565 12.1821 17.6032 17.1021C4.5132 27.8821 -7.7468 7.16205 6.1132 0.862052C9.48653 -0.677948 13.1065 -0.154615 16.9732 2.43205Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape13&quot; transform=&quot;matrix(0.0351528231097021 -0.000490857902548076 0.000490857902548076 0.0351528231097021 18.2800569526222 10.8531762234766)&quot; rx=&quot;8.01&quot; ry=&quot;7.5&quot; cx=&quot;8.01&quot; cy=&quot;7.5&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape14&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.47390625 12.828515625)&quot; fill=&quot;rgb(16,11,10)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0 300.33C1.52 298.69 3.53 298.057 6.03 298.43C6.10297 298.443 6.17377 298.447 6.24 298.44C6.65333 298.413 6.88667 298.26 6.94 297.98C7 297.66 7.19333 297.493 7.52 297.48L10.29 297.39C10.4233 297.383 10.5567 297.367 10.69 297.34C11.0167 297.267 11.1733 297.127 11.16 296.92C11.1467 296.7 11.2467 296.563 11.46 296.51C12.1467 296.337 12.7433 295.997 13.25 295.49C13.49 295.257 13.58 294.973 13.52 294.64C13.1333 292.653 12.8767 290.647 12.75 288.62C12.69 287.79 12.27 287.35 11.7 286.83C11.4533 286.603 11.3933 286.337 11.52 286.03C11.8533 285.197 11.6767 284.573 10.99 284.16C10.7367 284 10.46 283.923 10.16 283.93L6.56 284.02C15.1 281.92 21.0833 280.04 24.51 278.38C27.5033 276.927 30.4033 275.357 33.21 273.67C33.319 273.603 33.3974 273.495 33.4282 273.371C33.4589 273.246 33.4397 273.115 33.3746 273.004C33.3096 272.894 33.2037 272.813 33.08 272.78C32.5067 272.62 31.9433 272.67 31.39 272.93C63.5767 260.003 88.4967 238.95 106.15 209.77C109.223 204.703 112.093 199 114.76 192.66C118.06 184.807 120.343 178.587 121.61 174C123.097 168.613 124.457 162.397 125.69 155.35C126.657 149.857 126.873 144.25 126.34 138.53C127.853 138.57 128.907 138.097 129.5 137.11C131.56 133.67 131.433 130.473 129.12 127.52C128.24 126.39 127.07 126.39 125.77 126.38C120.017 126.347 114.427 126.37 109 126.45C108.613 125.77 108.27 125.09 107.97 124.41C107.69 123.77 107.527 123.037 107.48 122.21C106.953 112.977 106.213 103.723 105.26 94.45C110.127 94.5633 114.617 94.5833 118.73 94.51C121.27 94.47 123.93 94.86 126 93.31C128.053 91.77 128.717 89.61 127.99 86.83C127.23 83.89 124.98 82.2967 121.24 82.05L120.9 72.32C124.973 70.3667 126.23 67.5767 124.67 63.95C123.697 61.6833 121.82 60.52 119.04 60.46C117.273 58.24 116.223 56.5633 115.89 55.43C113.43 47.1033 110.547 38.9133 107.24 30.86C106.947 30.1467 107 29.0333 107.4 27.52C109.087 27.4933 110.883 27.5267 112.79 27.62C115.45 27.7533 117.403 26.9667 118.65 25.26C121.02 22.01 120.02 17.98 116.55 16.23C115.597 15.75 114.193 15.5133 112.34 15.52C107.533 15.54 102.823 15.4767 98.21 15.33C97.6033 13.9433 96.9433 12.6033 96.23 11.31C94.38 7.96 93.99 4.82 92.56 1.46C92.4467 1.18667 92.5067 0.963333 92.74 0.79L93.19 0.46C93.4567 0.273333 93.4267 0.176667 93.1 0.17L55.31 0L131.2 0.2C131.371 0.200762 131.536 0.26037 131.671 0.369176C131.805 0.477981 131.9 0.629779 131.94 0.8C133.38 7.23333 134.593 14.0833 135.58 21.35C139.67 51.61 143.36 78.87 145.72 107.57C147.27 126.44 146.89 145.44 143.29 163.8C138.28 189.4 127.86 214.54 111.86 234.74C90.34 261.87 61.85 283.26 28.89 293.96C20.1567 296.793 10.5267 298.917 0 300.33Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape15&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.2758764491296 12.828515625)&quot; fill=&quot;rgb(25,16,15)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M231.61 0L269.4 0.17C269.726 0.176667 269.756 0.273333 269.49 0.46L269.04 0.79C268.806 0.963333 268.746 1.18667 268.86 1.46C270.29 4.82 270.68 7.96 272.53 11.31C273.243 12.6033 273.903 13.9433 274.51 15.33C268.76 17.07 269.07 27.78 275.82 27.53C278.38 27.43 281.006 27.4267 283.7 27.52C283.3 29.0333 283.246 30.1467 283.54 30.86C286.846 38.9133 289.73 47.1033 292.19 55.43C292.523 56.5633 293.573 58.24 295.34 60.46C290.98 60.76 286.806 61.0267 282.82 61.26C277.7 61.56 274.45 67.2 278.08 71.26C278.86 72.1333 280.413 72.6 282.74 72.66C287.386 72.7733 292.206 72.66 297.2 72.32L297.54 82.05C293.013 81.9567 288.443 81.9633 283.83 82.07C281.84 82.11 280.61 82.75 279.5 84.26C276.44 88.44 277.126 91.8367 281.56 94.45C282.513 103.723 283.253 112.977 283.78 122.21C283.826 123.037 283.99 123.77 284.27 124.41C284.57 125.09 284.913 125.77 285.3 126.45C282.193 127.497 280.633 129.463 280.62 132.35C280.613 134.79 281.763 136.753 284.07 138.24C281.93 156.593 277.493 173.123 270.76 187.83C261.606 207.817 247.22 225.063 227.6 239.57C218.546 246.263 208.406 252.023 197.18 256.85C191.52 259.28 187.21 264.45 191.61 270.42C195.03 275.03 202.58 274.56 207.69 272.93C208.243 272.67 208.806 272.62 209.38 272.78C209.503 272.813 209.609 272.894 209.674 273.004C209.739 273.115 209.758 273.246 209.728 273.371C209.697 273.495 209.619 273.603 209.51 273.67C206.703 275.357 203.803 276.927 200.81 278.38C197.383 280.04 191.4 281.92 182.86 284.02C165.386 287.427 148.786 288.113 133.06 286.08C116.433 283.94 99.2895 279.17 81.6295 271.77C75.1162 269.043 68.6828 266.14 62.3295 263.06C54.3762 259.2 46.8962 254.463 39.8895 248.85C40.5695 248.377 41.3595 247.947 42.2595 247.56C44.5695 246.55 46.3695 244.3 44.1695 241.99C29.1962 226.303 18.1928 209.247 11.1595 190.82C1.95285 166.687 -1.55715 141.62 0.629514 115.62C2.01618 99.0867 3.45618 82.5733 4.94951 66.08C5.49618 59.9533 6.20618 53.32 7.07951 46.18C8.95285 30.8733 10.7762 15.5733 12.5495 0.28ZM230.747 11.7302C228.758 9.7412 226.058 8.62261 223.245 8.62261C220.432 8.62261 217.731 9.7412 215.742 11.7302L213.89 13.5829C211.901 15.5719 210.782 18.2724 210.782 21.0853C210.782 23.8982 211.901 26.5987 213.89 28.5877L215.092 29.7898C217.081 31.7788 219.781 32.8974 222.594 32.8974C225.407 32.8974 228.108 31.7788 230.097 29.7898L231.949 27.9371C233.938 25.9481 235.057 23.2476 235.057 20.4347C235.057 17.6218 233.938 14.9213 231.949 12.9323ZM47.1595 186.78C39.7128 170.84 35.7195 154.833 35.1795 138.76C34.9528 131.94 35.0895 124.72 35.5895 117.1C37.1495 93.44 39.2662 67.4833 41.9395 39.23C42.3395 35.0167 42.6262 30.7267 42.7995 26.36C43.4195 10.9 25.2095 12.45 24.4195 25.69C23.0462 48.79 21.1195 72.2233 18.6395 95.99C17.6595 105.337 16.9995 114.63 16.6595 123.87C16.3328 132.65 16.6595 140.653 17.6395 147.88C19.5062 161.707 22.9728 175.147 28.0395 188.2C29.1795 191.153 30.6662 194.07 32.4995 196.95C35.2995 201.37 41.5395 202.72 45.3395 198.89C48.7328 195.483 49.3395 191.447 47.1595 186.78ZM87.1943 37.8021C86.8236 36.4743 85.902 35.3574 84.6342 34.6994C83.3663 34.0413 81.8534 33.8945 80.4311 34.2916C79.0088 34.6887 77.7908 35.598 77.0472 36.8177C76.3037 38.0374 76.094 39.4701 76.4647 40.7979C76.8355 42.1257 77.757 43.2426 79.0249 43.9006C80.2927 44.5587 81.8056 44.7055 83.2279 44.3084C84.6502 43.9113 85.8682 43.002 86.6118 41.7823C87.3554 40.5626 87.565 39.1299 87.1943 37.8021ZM242.9 63.3691C242.905 60.5116 242.14 57.7024 240.682 55.2252C239.224 52.7479 237.124 50.6888 234.594 49.2556C232.064 47.8225 229.192 47.0651 226.268 47.06C223.344 47.0549 220.469 47.8022 217.934 49.2266C215.399 50.6509 213.292 52.7027 211.826 55.1748C210.359 57.6469 209.585 60.4534 209.58 63.3109C209.575 66.1684 210.34 68.9776 211.797 71.4548C213.255 73.9321 215.355 75.9912 217.885 77.4244C220.415 78.8575 223.287 79.6149 226.211 79.62C229.135 79.6251 232.01 78.8778 234.545 77.4534C237.08 76.0291 239.187 73.9773 240.653 71.5052C242.12 69.0331 242.895 66.2266 242.9 63.3691ZM85.9041 71.8823C88.1531 72.912 90.7367 72.9736 93.0816 72.0534C95.4266 71.1333 97.3455 69.3049 98.4127 66.9739C99.1193 65.4306 99.4215 63.7348 99.2889 62.0574C99.1563 60.38 98.5935 58.7796 97.6572 57.4176C96.721 56.0556 95.4439 54.9794 93.9549 54.2977C91.7059 53.268 89.1223 53.2064 86.7774 54.1266C84.4325 55.0467 82.5135 56.8751 81.4463 59.2061C80.7398 60.7494 80.4375 62.4452 80.5701 64.1226C80.7028 65.8 81.2656 67.4004 82.2018 68.7624C83.1381 70.1244 84.4151 71.2006 85.9041 71.8823ZM60.6086 105.171C63.2448 106.638 66.3725 106.974 69.2978 106.105C72.223 105.236 74.7122 103.231 76.213 100.535C77.7138 97.8381 78.1063 94.6659 77.3035 91.7217C76.5007 88.7775 74.5666 86.2966 71.9304 84.8293C69.2942 83.362 66.1665 83.0257 63.2413 83.8948C60.316 84.7639 57.8268 86.7691 56.326 89.4655C54.8252 92.1619 54.4327 95.3341 55.2355 98.2783C56.0384 101.222 57.9724 103.703 60.6086 105.171ZM187.08 98.11C187.08 96.1959 186.318 94.3582 184.965 93.0047C183.611 91.6512 181.774 90.89 179.86 90.89C177.945 90.89 176.108 91.6512 174.754 93.0047C173.401 94.3582 172.64 96.1959 172.64 98.11C172.64 100.024 173.401 101.862 174.754 103.215C176.108 104.569 177.945 105.33 179.86 105.33C181.127 105.33 182.372 104.996 183.47 104.363C184.567 103.729 185.479 102.817 186.112 101.72C186.746 100.623 187.08 99.3773 187.08 98.11ZM234.564 99.0027C233.705 97.863 232.551 96.9774 231.217 96.4351C229.883 95.8929 228.416 95.7129 226.964 95.9133C225.513 96.1138 224.127 96.6877 222.947 97.5771C221.766 98.4665 220.833 99.6405 220.24 100.981C219.647 102.321 219.416 103.78 219.57 105.212C219.723 106.644 220.256 107.998 221.115 109.137C221.974 110.277 223.128 111.163 224.462 111.705C225.796 112.247 227.263 112.427 228.715 112.227C230.166 112.026 231.552 111.452 232.732 110.563C233.913 109.673 234.846 108.499 235.439 107.159C236.032 105.819 236.263 104.36 236.109 102.928C235.956 101.496 235.423 100.142 234.564 99.0027ZM47.9695 214.56C45.1695 220.83 50.0195 225.32 54.0495 229.45C57.6895 233.19 61.8995 236.09 66.6995 232.86C71.8895 229.38 72.0595 223.24 67.9795 218.66C64.2095 214.41 60.6395 209.6 54.3295 209.99C51.4095 210.17 49.1195 211.99 47.9695 214.56Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape16&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.8026079545455 12.838359375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M26.0114 0C24.238 15.2933 22.4147 30.5933 20.5414 45.9C19.668 53.04 18.958 59.6733 18.4114 65.8C16.918 82.2933 15.478 98.8067 14.0914 115.34C11.9047 141.34 15.4147 166.407 24.6214 190.54C31.6547 208.967 42.658 226.023 57.6314 241.71C59.8314 244.02 58.0314 246.27 55.7214 247.28C54.8214 247.667 54.0314 248.097 53.3514 248.57C51.9014 250.07 52.3314 253.14 52.3514 255.14C31.6214 235.93 17.0114 211.99 8.66137 185.13C2.48804 165.29 -0.385293 145.337 0.0413737 125.27C0.691374 94.91 5.82137 63.64 9.38137 32.5C9.99471 27.1467 10.7014 21.75 11.5014 16.31C12.3214 10.7767 13.5247 5.69667 15.1114 1.07C15.2107 0.778294 15.3987 0.524438 15.6494 0.343583C15.9001 0.162728 16.2013 0.0636261 16.5114 0.06Z&quot;&gt;&lt;/path&gt; &lt;rect id=&quot;shape17&quot; transform=&quot;matrix(0.0248592227760896 -0.0248592227760896 0.0248592227760896 0.0248592227760896 19.531681996495 13.569794617477)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; width=&quot;23.84&quot; height=&quot;22.92&quot; rx=&quot;10.61&quot; ry=&quot;10.61&quot;&gt;&lt;/rect&gt; &lt;path id=&quot;shape18&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.857255859375 13.3649990428515)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M30.6225 171.52C32.8025 176.187 32.1958 180.223 28.8025 183.63C25.0025 187.46 18.7625 186.11 15.9625 181.69C14.1292 178.81 12.6425 175.893 11.5025 172.94C6.43583 159.887 2.96917 146.447 1.1025 132.62C0.1225 125.393 -0.204167 117.39 0.1225 108.61C0.4625 99.37 1.1225 90.0767 2.1025 80.73C4.5825 56.9634 6.50917 33.53 7.8825 10.43C8.6725 -2.80997 26.8825 -4.35997 26.2625 11.1C26.0892 15.4667 25.8025 19.7567 25.4025 23.97C22.7292 52.2234 20.6125 78.18 19.0525 101.84C18.5525 109.46 18.4158 116.68 18.6425 123.5C19.1825 139.573 23.1758 155.58 30.6225 171.52Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape19&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.7841415488515 13.3674609375)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.0522 0C8.66553 0.146667 13.3755 0.21 18.1822 0.19C20.0355 0.183333 21.4389 0.42 22.3922 0.9C25.8622 2.65 26.8622 6.68 24.4922 9.93C23.2455 11.6367 21.2922 12.4233 18.6322 12.29C16.7255 12.1967 14.9289 12.1633 13.2422 12.19C10.5489 12.0967 7.9222 12.1 5.3622 12.2C-1.3878 12.45 -1.6978 1.74 4.0522 0Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape20&quot; transform=&quot;matrix(0.0338611839889802 -0.00945421244350544 0.00945421244350544 0.0338611839889802 14.9149266129752 14.0867380565676)&quot; rx=&quot;5.57&quot; ry=&quot;5.2&quot; cx=&quot;5.57&quot; cy=&quot;5.2&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape21&quot; transform=&quot;matrix(0.0351561964539828 6.13592003636124e-05 -6.13592003636124e-05 0.0351561964539828 19.6449060698586 14.4819473774511)&quot; rx=&quot;16.66&quot; ry=&quot;16.28&quot; cx=&quot;16.66&quot; cy=&quot;16.28&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape22&quot; transform=&quot;matrix(-0.0146348716029047 0.031965331958686 -0.031965331958686 -0.0146348716029047 15.8772166930746 14.8739620295146)&quot; rx=&quot;9.67&quot; ry=&quot;9.33&quot; cx=&quot;9.67&quot; cy=&quot;9.33&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape23&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.997793706651 14.9540625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M18.805 0C21.585 0.06 23.4616 1.22333 24.435 3.49C25.995 7.11667 24.7383 9.90667 20.665 11.86C15.6716 12.2 10.8516 12.3133 6.20498 12.2C3.87831 12.14 2.32498 11.6733 1.54498 10.8C-2.08502 6.74 1.16498 1.1 6.28498 0.8C10.2716 0.566667 14.445 0.3 18.805 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape24&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.0361349190606 15.7107890625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M19.9144 0.0653333C23.6544 0.312 25.9044 1.90533 26.6644 4.84533C27.3911 7.62533 26.7277 9.78533 24.6744 11.3253C22.6044 12.8753 19.9444 12.4853 17.4044 12.5253C13.2911 12.5987 8.80105 12.5787 3.93438 12.4653C-0.498949 9.852 -1.18562 6.45533 1.87438 2.27533C2.98438 0.765333 4.21438 0.125333 6.20438 0.0853333C10.8177 -0.0213333 15.3877 -0.028 19.9144 0.0653333Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape25&quot; transform=&quot;matrix(-0.0170977282180133 0.0307185547160906 -0.0307185547160906 -0.0170977282180133 15.1542587716268 16.0053675452257)&quot; rx=&quot;11.64&quot; ry=&quot;11.38&quot; cx=&quot;11.64&quot; cy=&quot;11.38&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;circle id=&quot;shape26&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.345234375 16.0238671875)&quot; r=&quot;7.22&quot; cx=&quot;7.22&quot; cy=&quot;7.22&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape27&quot; transform=&quot;matrix(0.0280770296501001 -0.0211575594076892 0.0211575594076892 0.0280770296501001 19.8774398273616 16.4371069616574)&quot; rx=&quot;8.42&quot; ry=&quot;8.13&quot; cx=&quot;8.42&quot; cy=&quot;8.13&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape28&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1414052368516 17.2710454963236)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.02 12.1647L3.45003 11.8747C1.14336 10.388 -0.00663785 8.42471 2.88184e-05 5.98471C0.0133622 3.09804 1.57336 1.13137 4.68003 0.0847059C10.1067 0.00470588 15.6967 -0.0186275 21.45 0.0147059C22.75 0.0247059 23.92 0.0247059 24.8 1.15471C27.1134 4.10804 27.24 7.30471 25.18 10.7447C24.5867 11.7314 23.5334 12.2047 22.02 12.1647Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape29&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.9485123620206 17.688515625)&quot; fill=&quot;rgb(18,13,12)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M94.2701 0L112.84 0.29C113.373 6.01 113.157 11.6167 112.19 17.11C110.957 24.1567 109.597 30.3733 108.11 35.76C106.843 40.3467 104.56 46.5667 101.26 54.42C98.5934 60.76 95.7234 66.4633 92.6501 71.53C74.9968 100.71 50.0768 121.763 17.8901 134.69C12.7801 136.32 5.23009 136.79 1.81009 132.18C-2.58991 126.21 1.72009 121.04 7.38009 118.61C18.6068 113.783 28.7468 108.023 37.8001 101.33C57.4201 86.8233 71.8068 69.5767 80.9601 49.59C87.6934 34.8833 92.1301 18.3533 94.2701 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape30&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9331058615201 20.210194296345)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.830544 4.59225C1.98054 2.02225 4.27054 0.202251 7.19054 0.0222511C13.5005 -0.367749 17.0705 4.44225 20.8405 8.69225C24.9205 13.2723 24.7505 19.4123 19.5605 22.8923C14.7605 26.1223 10.5505 23.2223 6.91054 19.4823C2.88054 15.3523 -1.96946 10.8623 0.830544 4.59225Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape31&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.6404577789765 21.5771484375)&quot; fill=&quot;rgb(18,13,12)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.07476 0C8.08142 5.61333 15.5614 10.35 23.5148 14.21C29.8681 17.29 36.3014 20.1933 42.8148 22.92C60.4748 30.32 77.6181 35.09 94.2448 37.23C109.971 39.2633 126.571 38.5767 144.045 35.17L147.645 35.08C147.945 35.0733 148.221 35.15 148.475 35.31C149.161 35.7233 149.338 36.3467 149.005 37.18C148.878 37.4867 148.938 37.7533 149.185 37.98C149.755 38.5 150.175 38.94 150.235 39.77C150.361 41.7967 150.618 43.8033 151.005 45.79C151.065 46.1233 150.975 46.4067 150.735 46.64C150.228 47.1467 149.631 47.4867 148.945 47.66C148.731 47.7133 148.631 47.85 148.645 48.07C148.658 48.2767 148.501 48.4167 148.175 48.49C148.041 48.5167 147.908 48.5333 147.775 48.54L145.005 48.63C144.678 48.6433 144.485 48.81 144.425 49.13C144.371 49.41 144.138 49.5633 143.725 49.59C143.659 49.5967 143.588 49.5933 143.515 49.58C141.015 49.2067 139.005 49.84 137.485 51.48C124.278 53.2267 112.368 53.5833 101.755 52.55C80.2748 50.4633 60.3014 44.84 41.8348 35.68C35.8281 32.7 28.6481 28.54 20.2948 23.2C14.0414 19.2067 7.30142 13.6633 0.0747565 6.57C0.0547565 4.57 -0.375243 1.5 1.07476 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape32&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.548046875 24.3846604970638)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M37.39 126.792L36.84 125.732C36.6867 125.445 36.61 125.139 36.61 124.812L36.29 50.1519C39.97 50.1319 42.74 50.0419 44.93 47.3519C46.0567 45.9652 46.4067 44.4152 45.98 42.7019C44.81 38.0219 40.08 37.5119 35.72 37.6019L35.91 26.2919C40.16 26.9019 44.77 27.8519 48.81 25.9619C52.26 24.3519 53.31 20.2319 50.85 17.2519C48.51 14.4319 45.36 14.2119 41.99 14.2719C35.7567 14.3852 29.3167 14.4052 22.67 14.3319C19.49 14.3019 16.81 15.9619 15.14 18.6319C15.2 16.6619 12.86 15.6819 11.44 14.7519C10.6133 14.2119 9.90667 13.5852 9.32 12.8719C6.57333 9.53188 3.78 6.23188 0.94 2.97188C0.46 2.41855 0.146667 1.62521 0 0.591879C17.1 3.24521 34.28 3.98188 51.54 2.80188C57.06 2.42188 62.3133 1.51855 67.3 0.0918792C68.18 -0.154787 68.3567 0.0952125 67.83 0.841879C58.7633 13.8352 53.49 29.3252 52.01 47.3119C50.37 67.3319 51 88.9819 56.8 107.652C58.81 114.142 62.13 120.072 65.01 126.212C65.0485 126.291 65.0589 126.382 65.0394 126.468C65.02 126.554 64.9718 126.631 64.9029 126.686C64.834 126.741 64.7483 126.772 64.66 126.772Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape33&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.486355851717 24.3923298330305)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.75477 0.373729C1.90143 1.40706 2.21477 2.2004 2.69477 2.75373C5.53477 6.01373 8.3281 9.31373 11.0748 12.6537C11.6614 13.3671 12.3681 13.9937 13.1948 14.5337C14.6148 15.4637 16.9548 16.4437 16.8948 18.4137L16.5848 19.0537C15.9714 19.3604 15.6748 19.8204 15.6948 20.4337C15.8148 23.3437 16.3448 26.1237 18.0248 28.6937C19.9714 31.6737 22.1714 34.5471 24.6248 37.3137C19.6548 39.6737 18.5548 46.9937 24.3448 49.3137C24.1981 53.2071 24.2048 57.1237 24.3648 61.0637C24.5581 65.7371 24.5748 69.6437 24.4148 72.7837C24.2014 77.0371 23.9914 81.3304 23.7848 85.6637C23.1248 99.8304 19.6748 113.244 13.4348 125.904C13.2814 126.21 13.0314 126.384 12.6848 126.424L11.5948 126.534L3.79477 126.534C3.66373 126.534 3.5364 126.49 3.43437 126.408C3.33234 126.325 3.26171 126.21 3.23447 126.082C3.20722 125.954 3.22499 125.82 3.28477 125.704C16.0848 100.784 18.1148 71.0737 14.6948 43.5737C12.8014 28.3737 7.92143 14.0371 0.0547669 0.563729C0.0152725 0.50031 -0.00361813 0.426609 0.000572506 0.352292C0.00476314 0.277975 0.0318434 0.20644 0.0782619 0.147067C0.12468 0.0876949 0.188315 0.0431997 0.26082 0.0194171C0.333326 -0.0043654 0.411387 -0.00634806 0.484767 0.0137292Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape34&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.0617214476865 24.8861307529877)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M21.2988 12.0278C16.7455 11.8878 12.1288 11.8545 7.44881 11.9278C4.74215 11.9678 2.94548 11.7312 2.05881 11.2178C0.238812 10.1645 -0.374521 8.0945 0.218812 5.00784L0.528812 4.36784C2.19881 1.69784 4.87881 0.0378364 8.05881 0.0678364C14.7055 0.14117 21.1455 0.12117 27.3788 0.00783636C30.7488 -0.0521636 33.8988 0.167836 36.2388 2.98784C38.6988 5.96784 37.6488 10.0878 34.1988 11.6978C30.1588 13.5878 25.5488 12.6378 21.2988 12.0278Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape35&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.038091694079 25.0621875000001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.890947 0C0.297614 3.08667 0.910947 5.15667 2.73095 6.21C3.61761 6.72333 5.41428 6.96 8.12095 6.92C12.8009 6.84667 17.4176 6.88 21.9709 7.02L21.7809 18.33L8.93095 18.26C6.47761 15.4933 4.27761 12.62 2.33095 9.64C0.650947 7.07 0.120947 4.29 0.000947368 1.38C-0.0190526 0.766667 0.277614 0.306667 0.890947 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape36&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.2047130847683 25.704140625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.19149 0L17.0415 0.07C21.4015 -0.02 26.1315 0.49 27.3015 5.17C27.7282 6.88333 27.3782 8.43333 26.2515 9.82C24.0615 12.51 21.2915 12.6 17.6115 12.62L3.91149 12C-1.87851 9.68 -0.778506 2.36 4.19149 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape37&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.893984375 26.126015625)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M12.75 0L26.45 0.62L26.77 75.28C26.77 75.6067 26.8467 75.9133 27 76.2L27.55 77.26L0 77.22L1.09 77.11C1.43667 77.07 1.68667 76.8967 1.84 76.59C8.08 63.93 11.53 50.5167 12.19 36.35C12.3967 32.0167 12.6067 27.7233 12.82 23.47C12.98 20.33 12.9633 16.4233 12.77 11.75C12.61 7.81 12.6033 3.89333 12.75 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape38&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.22640625 29.4324536132813)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M29.96 24.0302C30.7067 23.5835 30.1467 23.1702 28.28 22.7902C27.96 22.7235 27.6733 22.5835 27.42 22.3702C24.9333 20.2235 22.8967 18.7069 21.31 17.8202C12.91 13.1069 5.80667 7.21687 0 0.150208L30.09 0.000208333C30.4767 -0.00645833 30.7833 0.146875 31.01 0.460208C37.57 9.69354 45.7567 17.2435 55.57 23.1102C55.9433 23.3302 55.92 23.4969 55.5 23.6102C54.48 23.8769 53.4167 24.0135 52.31 24.0202C44.77 24.0669 37.32 24.0702 29.96 24.0302Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape39&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.2706541442871 29.4394921875)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M38.2747 0C35.2147 4.74667 31.2681 10.0433 26.4347 15.89C23.4547 19.49 20.7014 22.14 18.1747 23.84L0.754727 23.73C-0.17194 23.7233 -0.245273 23.4733 0.534727 22.98C9.87473 17.05 17.3747 9.52 24.9347 0.58C25.0571 0.432797 25.211 0.314351 25.3856 0.233119C25.5601 0.151886 25.7511 0.109846 25.9447 0.11Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape40&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.909609375 29.437734375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M65.9 0C71.7067 7.06667 78.81 12.9567 87.21 17.67C88.7967 18.5567 90.8333 20.0733 93.32 22.22C93.5733 22.4333 93.86 22.5733 94.18 22.64C96.0467 23.02 96.6067 23.4333 95.86 23.88L0 23.89C2.52667 22.19 5.28 19.54 8.26 15.94C13.0933 10.0933 17.04 4.79667 20.1 0.05Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape41&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.6264334548969 30.8390367406574)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M175.558 0.450733C176.245 0.450733 176.568 0.567399 176.528 0.800733C176.494 1.0303 176.388 1.24303 176.226 1.40826C176.065 1.5735 175.855 1.68291 175.628 1.72073C171.935 2.3474 168.581 2.65073 165.568 2.63073C163.998 2.62073 162.798 3.35073 161.188 3.18073C160.808 3.14073 160.445 3.20407 160.098 3.37073L158.488 4.16073C158.195 4.30073 157.958 4.50407 157.778 4.77073C157.045 5.85073 156.111 6.47073 154.978 6.63073C153.258 6.87073 151.491 6.99073 149.678 6.99073C111.858 6.8974 73.5681 6.84073 34.8081 6.82073C28.6781 6.82073 24.4281 9.63073 23.3181 15.9507L0.628115 15.8107C0.50059 15.8104 0.376138 15.7713 0.2713 15.6987C0.166463 15.626 0.0861025 15.5233 0.0409006 15.404C-0.00430136 15.2848 -0.0122487 15.1546 0.0181151 15.0307C2.16812 6.40073 10.0881 -0.0792673 19.0981 0.00073271C53.2181 0.314066 87.8014 0.380733 122.848 0.200733C140.421 0.114066 157.991 0.197399 175.558 0.450733Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape42&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.4462109375 30.8548828125)&quot; fill=&quot;rgb(25,16,15)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M152.24 0L253.08 0.15C253.047 2.17 252.56 3.72667 251.62 4.82C250.867 5.69333 249.93 6.13667 248.81 6.15C221.383 6.39 194.363 6.58667 167.75 6.74C167.283 6.74 167.03 6.97333 166.99 7.44C166.87 8.95333 167.113 10.3433 167.72 11.61C167.847 11.8833 167.89 12.1667 167.85 12.46L167.63 14.18C167.577 14.5867 167.74 14.86 168.12 15C168.573 15.1667 168.867 15.3533 169 15.56L0 15.5C1.11 9.18 5.36 6.37 11.49 6.37C50.25 6.39 88.54 6.44667 126.36 6.54C128.173 6.54 129.94 6.42 131.66 6.18C132.793 6.02 133.727 5.4 134.46 4.32C134.64 4.05333 134.877 3.85 135.17 3.71L136.78 2.92C137.127 2.75333 137.49 2.69 137.87 2.73C139.48 2.9 140.68 2.17 142.25 2.18C145.263 2.2 148.617 1.89667 152.31 1.27C152.537 1.23218 152.746 1.12277 152.908 0.957532C153.07 0.792295 153.175 0.579568 153.21 0.35C153.25 0.116667 152.927 -1.13687e-13 152.24 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape43&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 19.3159081135321 30.86015625)&quot; fill=&quot;rgb(18,13,12)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M86.1197 0C93.6331 3.14 98.2231 7.99667 99.8897 14.57C99.9181 14.684 99.9111 14.804 99.8698 14.914C99.8285 15.024 99.7547 15.1189 99.6583 15.186C99.5618 15.2532 99.4472 15.2894 99.3297 15.29L2.03972 15.41C1.90639 15.2033 1.61306 15.0167 1.15972 14.85C0.779725 14.71 0.616391 14.4367 0.669725 14.03L0.889725 12.31C0.929725 12.0167 0.886391 11.7333 0.759725 11.46C0.153058 10.1933 -0.0902752 8.80333 0.0297248 7.29C0.0697248 6.82333 0.323058 6.59 0.789725 6.59C27.4031 6.43667 54.4231 6.24 81.8497 6C82.9697 5.98667 83.9064 5.54333 84.6597 4.67C85.5997 3.57667 86.0864 2.02 86.1197 0Z&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt;&lt;div class=&quot;w-16 h-16&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;fill-[${rgbColor} w-16 h-16&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 36 36&quot;&gt; &lt;defs&gt;&lt;/defs&gt; &lt;path id=&quot;shape0&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 10.393984646722 3.24851063866497)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M384.119 800.308C389.392 800.401 395.079 800.381 401.179 800.248C405.299 800.161 408.469 800.568 410.689 801.468C415.949 803.598 420.779 810.198 420.289 816.268C419.669 823.858 412.349 829.318 404.999 829.328C277.499 829.355 146.952 829.355 13.3589 829.328C8.63888 829.328 4.09888 825.978 1.87888 822.058C-2.73112 813.888 1.52888 803.918 10.4389 801.028C11.9855 800.528 13.9555 800.285 16.3489 800.298C22.1289 800.338 27.6889 800.265 33.0289 800.078C33.1769 800.076 33.3188 800.017 33.4263 799.913C33.5337 799.809 33.5989 799.668 33.6089 799.518C33.7489 797.391 34.0889 795.351 34.6289 793.398C38.5755 779.138 46.7822 768.285 59.2489 760.838C67.2389 756.068 77.9989 753.418 87.8689 753.798C91.7089 753.938 95.6189 754.578 99.3589 753.338C121.612 745.945 138.126 732.518 148.899 713.058C160.649 691.848 162.149 664.098 156.689 640.298C150.949 615.338 135.539 594.358 113.659 581.418C104.759 576.151 97.1322 571.378 90.7789 567.098C79.8722 559.751 69.4389 550.391 59.4789 539.018C41.7922 518.825 28.7222 496.301 20.2689 471.448C13.2089 450.695 9.41555 429.945 8.88888 409.198C8.39555 389.938 9.51888 370.588 12.2589 351.148C15.7689 326.188 18.7489 301.968 22.2689 277.258C23.1955 270.798 23.9055 264.308 24.3989 257.788C25.2922 245.915 26.1489 234.441 26.9689 223.368C28.2189 206.548 28.2189 189.968 28.2289 172.948C28.229 172.665 28.1641 172.386 28.0392 172.133C27.9143 171.88 27.7328 171.659 27.5089 171.488C4.71888 154.278 -3.35112 123.728 10.2489 97.8679C21.8189 75.8479 44.3589 62.0579 69.5789 63.3579C72.9922 63.5379 76.3389 64.1179 79.6189 65.0979C79.7826 65.1468 79.9567 65.1513 80.1235 65.1109C80.2903 65.0705 80.4439 64.9867 80.5689 64.8679C95.3422 50.8279 113.322 44.9613 134.509 47.2679C134.656 47.2852 134.804 47.2536 134.932 47.1778C135.061 47.102 135.161 46.9862 135.219 46.8479C136.972 42.6213 139.372 38.5079 142.419 34.5079C153.299 20.2379 166.749 9.32792 184.089 3.97792C204.569 -2.34875 224.312 -1.12875 243.319 7.63792C258.599 14.6779 272.559 26.6579 280.469 41.6579C280.596 41.9046 280.792 41.9846 281.059 41.8979C289.839 38.9646 299.389 37.9446 309.709 38.8379C326.729 40.3079 342.309 50.4379 353.989 63.2879C354.516 63.8679 355.166 64.1746 355.939 64.2079C361.419 64.4546 366.656 65.5513 371.649 67.4979C392.199 75.5079 406.519 91.1379 411.669 112.968C413.189 119.421 413.456 125.841 412.469 132.228C409.882 148.975 401.956 162.205 388.689 171.918C387.729 172.628 387.729 173.468 387.719 174.528C387.586 191.895 387.899 207.108 388.659 220.168C389.549 235.238 390.999 253.908 393.189 270.758C396.622 297.205 400.169 324.231 403.829 351.838C404.689 358.351 405.536 366.615 406.369 376.628C407.042 384.655 407.406 391.321 407.459 396.628C407.679 420.268 404.476 443.035 397.849 464.928C386.419 502.718 363.929 536.538 333.029 561.268C324.009 568.498 312.959 575.088 302.869 581.488C297.502 584.888 292.979 588.131 289.299 591.218C265.139 611.508 255.039 640.758 256.429 672.398C258.039 709.018 277.959 738.488 312.639 751.718C317.389 753.528 321.449 754.508 326.659 754.038C338.269 753.008 349.089 755.608 359.129 762.058C371.639 770.088 381.589 784.038 383.299 799.558C383.352 800.045 383.626 800.295 384.119 800.308ZM34.9389 123.938C34.6255 130.038 36.5689 135.461 40.7689 140.208C42.9155 142.635 45.5089 143.855 48.5489 143.868C57.4489 143.895 67.6722 143.898 79.2189 143.878C80.8589 143.878 81.9889 142.308 82.5389 140.958C82.6855 140.585 82.6522 140.231 82.4389 139.898C80.5522 136.978 80.8189 134.321 83.2389 131.928C87.7189 127.508 91.8289 130.808 94.8789 134.678C97.7389 138.308 103.749 143.708 108.819 143.768C117.746 143.855 126.882 143.871 136.229 143.818C142.909 143.768 150.429 136.098 154.769 131.618C156.269 130.068 158.029 129.188 160.259 129.608C164.159 130.328 166.106 132.778 166.099 136.958C166.099 138.248 165.299 139.248 164.549 140.218C164.261 140.59 164.13 141.06 164.184 141.527C164.239 141.994 164.474 142.422 164.839 142.718C166.006 143.678 167.326 144.148 168.799 144.128C196.979 143.828 224.629 143.751 251.749 143.898C253.509 143.905 255.106 143.581 256.539 142.928C256.721 142.847 256.872 142.708 256.969 142.533C257.065 142.358 257.101 142.155 257.073 141.955C257.044 141.756 256.951 141.571 256.809 141.428C253.879 138.498 254.059 132.908 257.859 130.608C262.999 127.498 266.539 130.248 269.939 133.818C274.619 138.718 280.959 143.828 287.779 143.838C296.859 143.865 305.789 143.868 314.569 143.848C321.399 143.828 328.259 136.098 332.759 131.638C335.086 129.338 337.459 128.821 339.879 130.088C343.819 132.161 344.612 135.195 342.259 139.188C342.08 139.495 341.983 139.844 341.98 140.198C341.976 140.552 342.066 140.901 342.239 141.208C343.319 143.118 344.959 144.088 347.179 144.068C354.066 144.001 361.086 143.928 368.239 143.848C370.352 143.821 372.149 143.235 373.629 142.088C379.589 137.488 382.416 131.278 382.109 123.458C381.969 109.928 371.589 99.2079 359.169 95.4779C358.953 95.4151 358.724 95.4137 358.51 95.4738C358.296 95.534 358.105 95.6534 357.959 95.8179C355.212 98.9446 351.706 100.435 347.439 100.288C341.069 100.068 338.009 96.4579 335.789 91.1479C332.202 82.5946 326.232 76.3279 317.879 72.3479C307.626 67.4546 296.802 67.5779 285.409 72.7179C282.069 74.2179 279.519 77.4279 276.309 79.4679C269.159 84.0279 261.339 79.8879 260.179 71.8979C258.606 61.0979 253.279 51.6813 244.199 43.6479C217.109 19.6679 175.399 28.6579 160.839 61.6279C158.766 66.3279 157.699 70.8946 157.639 75.3279C157.559 80.8679 155.339 86.2279 149.929 88.1679C144.262 90.2146 139.372 89.0513 135.259 84.6779C133.749 83.0679 132.859 81.0279 131.499 79.3379C131.286 79.0646 131.012 78.8779 130.679 78.7779C128.472 78.1113 126.346 77.8213 124.299 77.9079C113.326 78.3813 104.429 83.1579 97.6089 92.2379C94.2189 96.7479 94.0089 102.468 90.0089 106.458C86.8589 109.588 81.6689 110.618 77.7089 108.488C73.0155 105.968 70.9422 101.938 71.4889 96.3979C71.5755 95.5313 71.1922 95.0446 70.3389 94.9379C59.7789 93.5446 50.8422 96.5046 43.5289 103.818C38.0555 109.291 35.1922 115.998 34.9389 123.938ZM70.3189 172.868L60.5489 172.868C60.0022 172.868 59.7255 173.141 59.7189 173.688C59.4855 194.395 58.5655 214.878 56.9589 235.138C56.6655 238.818 56.5355 242.431 56.5689 245.978C56.5689 246.378 56.7689 246.578 57.1689 246.578L287.389 246.598L306.739 246.558L315.789 246.558C316.622 246.558 317.009 246.145 316.949 245.318C315.196 221.491 313.862 197.675 312.949 173.868C312.939 173.596 312.822 173.339 312.625 173.151C312.427 172.963 312.163 172.858 311.889 172.858L302.559 172.868L102.799 172.818L85.9489 172.788ZM345.659 172.918L336.369 172.938C335.276 172.938 334.742 173.485 334.769 174.578C335.302 197.585 336.822 220.561 339.329 243.508C339.429 244.421 339.629 245.291 339.929 246.118C339.981 246.258 340.075 246.379 340.199 246.463C340.322 246.547 340.469 246.591 340.619 246.588L349.349 246.478L358.959 246.388C359.056 246.388 359.152 246.362 359.234 246.311C359.317 246.259 359.384 246.186 359.427 246.099C359.47 246.012 359.488 245.915 359.479 245.818C358.169 231.648 357.729 217.678 356.929 203.398C356.396 193.905 356.209 183.971 356.369 173.598C356.371 173.466 356.337 173.335 356.273 173.221C356.208 173.106 356.114 173.011 356.001 172.945C355.888 172.88 355.759 172.846 355.629 172.848ZM285.139 272.498L66.0789 272.778L56.5789 272.838C56.2688 272.842 55.9676 272.941 55.7169 273.122C55.4662 273.302 55.2782 273.556 55.1789 273.848C53.5922 278.475 52.3889 283.555 51.5689 289.088C50.7689 294.528 50.0622 299.925 49.4489 305.278C45.8889 336.418 40.7589 367.688 40.1089 398.048C39.6822 418.115 42.5555 438.068 48.7289 457.908C57.0789 484.768 71.6889 508.708 92.4189 527.918C99.6455 535.011 106.386 540.555 112.639 544.548C120.992 549.888 128.172 554.048 134.179 557.028C152.646 566.188 172.619 571.811 194.099 573.898C204.712 574.931 216.622 574.575 229.829 572.828C240.356 571.415 249.986 569.291 258.719 566.458C291.679 555.758 320.169 534.368 341.689 507.238C357.689 487.038 368.109 461.898 373.119 436.298C376.719 417.938 377.099 398.938 375.549 380.068C373.189 351.368 369.499 324.108 365.409 293.848C364.422 286.581 363.209 279.731 361.769 273.298C361.729 273.128 361.634 272.976 361.499 272.867C361.365 272.758 361.199 272.699 361.029 272.698ZM175.049 601.798L173.779 601.438C173.706 601.418 173.627 601.42 173.555 601.444C173.482 601.467 173.419 601.512 173.372 601.571C173.326 601.631 173.299 601.702 173.295 601.776C173.29 601.851 173.309 601.925 173.349 601.988C181.216 615.461 186.096 629.798 187.989 644.998C191.409 672.498 189.379 702.208 176.579 727.128C176.519 727.245 176.501 727.378 176.529 727.506C176.556 727.635 176.626 727.75 176.728 727.832C176.831 727.914 176.958 727.959 177.089 727.958L184.889 727.958L212.439 727.998L239.709 727.978C239.797 727.978 239.883 727.947 239.952 727.892C240.021 727.837 240.069 727.76 240.088 727.674C240.108 727.588 240.097 727.497 240.059 727.418C237.179 721.278 233.859 715.348 231.849 708.858C226.049 690.188 225.419 668.538 227.059 648.518C228.539 630.531 233.812 615.041 242.879 602.048C243.406 601.301 243.229 601.051 242.349 601.298C237.362 602.725 232.109 603.628 226.589 604.008C209.329 605.188 192.149 604.451 175.049 601.798ZM222.789 744.938L176.989 744.988L164.659 745.098C164.465 745.098 164.274 745.14 164.1 745.221C163.925 745.302 163.771 745.421 163.649 745.568C156.089 754.508 148.589 762.038 139.249 767.968C138.469 768.461 138.542 768.711 139.469 768.718L156.889 768.828L252.749 768.818C260.109 768.858 267.559 768.855 275.099 768.808C276.206 768.801 277.269 768.665 278.289 768.398C278.709 768.285 278.732 768.118 278.359 767.898C268.546 762.031 260.359 754.481 253.799 745.248C253.572 744.935 253.266 744.781 252.879 744.788ZM86.8189 800.748L255.819 800.808L353.109 800.688C353.226 800.687 353.341 800.651 353.437 800.584C353.534 800.517 353.608 800.422 353.649 800.312C353.69 800.202 353.697 800.082 353.669 799.968C352.002 793.395 347.412 788.538 339.899 785.398L239.059 785.248C221.492 784.995 203.922 784.911 186.349 784.998C151.302 785.178 116.719 785.111 82.5989 784.798C73.5889 784.718 65.6689 791.198 63.5189 799.828C63.4885 799.952 63.4965 800.082 63.5417 800.201C63.5869 800.32 63.6672 800.423 63.7721 800.496C63.8769 800.568 64.0014 800.608 64.1289 800.608Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape1&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6223046875 4.3066710451255)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.17 93.3591L341.7 94.8091C341.347 94.9025 341.043 95.0758 340.79 95.3291C334.81 101.209 327.56 101.079 319.06 100.739C316.15 100.619 313.98 99.6891 312.72 96.9491C310.21 91.4791 305.03 84.9891 298.07 88.5091C296.217 89.4491 294.677 90.6225 293.45 92.0291C288.01 98.2791 282.29 103.559 274.1 105.299C270.267 106.112 266.1 106.416 261.6 106.209C253.04 105.819 244.67 101.199 239.15 94.8491C232.37 87.0391 226.88 84.2491 219.24 92.9691C214.89 97.9391 209.89 101.049 202.97 101.219C196.37 101.379 189.917 101.426 183.61 101.359C182.93 101.352 182.43 100.989 182.11 100.269C182.01 100.04 181.975 99.7876 182.008 99.5391C182.042 99.2906 182.143 99.0554 182.3 98.8591C183.04 97.9325 183.813 97.0725 184.62 96.2791C187.09 93.8491 185.64 89.9291 183.51 87.8291C180.65 85.0091 175.91 85.9891 173.39 88.9391C172.23 90.2925 171.17 91.6391 170.21 92.9791C163.5 102.299 152.67 101.929 142.47 100.679C134.9 99.7591 131.64 94.3891 126.62 89.6591C123.633 86.8525 120.593 86.8391 117.5 89.6191C112.63 93.9791 108.24 99.7591 102.47 102.719C88.07 110.129 72.61 106.679 62.57 94.0391C58.62 89.0591 52.95 85.2191 47.21 90.7591C44.54 93.3491 43.94 96.9991 40.53 99.0891C36.59 101.509 29.55 101.139 24.26 101.029C18.64 100.899 13.25 100.999 9.85 97.1991C7.82 94.9191 4 93.8291 2.11 96.9691C1.02333 98.7691 0.446667 98.6225 0.38 96.5291C0.366667 95.9891 0.24 95.0925 0 93.8391C0.253333 85.8991 3.11667 79.1925 8.59 73.7191C15.9033 66.4058 24.84 63.4458 35.4 64.8391C36.2533 64.9458 36.6367 65.4325 36.55 66.2991C36.0033 71.8391 38.0767 75.8691 42.77 78.3891C46.73 80.5191 51.92 79.4891 55.07 76.3591C59.07 72.3691 59.28 66.6491 62.67 62.1391C69.49 53.0591 78.3867 48.2825 89.36 47.8091C91.4067 47.7225 93.5333 48.0125 95.74 48.6791C96.0733 48.7791 96.3467 48.9658 96.56 49.2391C97.92 50.9291 98.81 52.9691 100.32 54.5791C104.433 58.9525 109.323 60.1158 114.99 58.0691C120.4 56.1291 122.62 50.7691 122.7 45.2291C122.76 40.7958 123.827 36.2291 125.9 31.5291C140.46 -1.44087 182.17 -10.4309 209.26 13.5491C218.34 21.5825 223.667 30.9991 225.24 41.7991C226.4 49.7891 234.22 53.9291 241.37 49.3691C244.58 47.3291 247.13 44.1191 250.47 42.6191C261.863 37.4791 272.687 37.3558 282.94 42.2491C291.293 46.2291 297.263 52.4958 300.85 61.0491C303.07 66.3591 306.13 69.9691 312.5 70.1891C316.767 70.3358 320.273 68.8458 323.02 65.7191C323.166 65.5546 323.357 65.4352 323.571 65.3751C323.785 65.3149 324.014 65.3163 324.23 65.3791C336.65 69.1091 347.03 79.8291 347.17 93.3591Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape2&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6211575655465 7.33540715628013)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.203 7.20842C347.509 15.0284 344.683 21.2384 338.723 25.8384C337.243 26.9851 335.446 27.5718 333.333 27.5984C326.179 27.6784 319.159 27.7518 312.273 27.8184C310.053 27.8384 308.413 26.8684 307.333 24.9584C307.159 24.651 307.07 24.3028 307.074 23.9484C307.077 23.594 307.173 23.2458 307.353 22.9384C309.706 18.9451 308.913 15.9118 304.973 13.8384C302.553 12.5718 300.179 13.0884 297.853 15.3884C293.353 19.8484 286.493 27.5784 279.663 27.5984C270.883 27.6184 261.953 27.6151 252.873 27.5884C246.053 27.5784 239.713 22.4684 235.033 17.5684C231.633 13.9984 228.093 11.2484 222.953 14.3584C219.153 16.6584 218.973 22.2484 221.903 25.1784C222.045 25.3214 222.137 25.5067 222.166 25.706C222.195 25.9053 222.159 26.108 222.062 26.2834C221.966 26.4588 221.815 26.5975 221.633 26.6784C220.199 27.3318 218.603 27.6551 216.843 27.6484C189.723 27.5018 162.073 27.5784 133.893 27.8784C132.419 27.8984 131.099 27.4284 129.933 26.4684C129.567 26.1723 129.332 25.7446 129.278 25.2775C129.224 24.8105 129.355 24.3403 129.643 23.9684C130.393 22.9984 131.193 21.9984 131.193 20.7084C131.199 16.5284 129.253 14.0784 125.353 13.3584C123.123 12.9384 121.363 13.8184 119.863 15.3684C115.523 19.8484 108.003 27.5184 101.323 27.5684C91.976 27.6218 82.8393 27.6051 73.9126 27.5184C68.8426 27.4584 62.8326 22.0584 59.9726 18.4284C56.9226 14.5584 52.8126 11.2584 48.3326 15.6784C45.9126 18.0718 45.646 20.7284 47.5326 23.6484C47.746 23.9818 47.7793 24.3351 47.6326 24.7084C47.0826 26.0584 45.9526 27.6284 44.3126 27.6284C32.766 27.6484 22.5426 27.6451 13.6426 27.6184C10.6026 27.6051 8.0093 26.3851 5.86263 23.9584C1.66263 19.2118 -0.280704 13.7884 0.0326292 7.68842C0.272629 8.94175 0.399296 9.83842 0.412629 10.3784C0.479296 12.4718 1.05596 12.6184 2.14263 10.8184C4.03263 7.67842 7.85263 8.76842 9.88263 11.0484C13.2826 14.8484 18.6726 14.7484 24.2926 14.8784C29.5826 14.9884 36.6226 15.3584 40.5626 12.9384C43.9726 10.8484 44.5726 7.19842 47.2426 4.60842C52.9826 -0.931581 58.6526 2.90842 62.6026 7.88842C72.6426 20.5284 88.1026 23.9784 102.503 16.5684C108.273 13.6084 112.663 7.82842 117.533 3.46842C120.626 0.688419 123.666 0.701752 126.653 3.50842C131.673 8.23842 134.933 13.6084 142.503 14.5284C152.703 15.7784 163.533 16.1484 170.243 6.82842C171.203 5.48842 172.263 4.14175 173.423 2.78842C175.943 -0.161581 180.683 -1.14158 183.543 1.67842C185.673 3.77842 187.123 7.69842 184.653 10.1284C183.846 10.9218 183.073 11.7818 182.333 12.7084C182.175 12.9047 182.074 13.1399 182.041 13.3884C182.007 13.6369 182.043 13.8894 182.143 14.1184C182.463 14.8384 182.963 15.2018 183.643 15.2084C189.949 15.2751 196.403 15.2284 203.003 15.0684C209.923 14.8984 214.923 11.7884 219.273 6.81842C226.913 -1.90158 232.403 0.888419 239.183 8.69842C244.703 15.0484 253.073 19.6684 261.633 20.0584C266.133 20.2651 270.299 19.9618 274.133 19.1484C282.323 17.4084 288.043 12.1284 293.483 5.87842C294.709 4.47175 296.249 3.29842 298.103 2.35842C305.063 -1.16158 310.243 5.32842 312.753 10.7984C314.013 13.5384 316.183 14.4684 319.093 14.5884C327.593 14.9284 334.843 15.0584 340.823 9.17842C341.076 8.92509 341.379 8.75175 341.733 8.65842Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape3&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.7941352600339 9.3230859375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M17.6779 0C16.5513 11.84 15.9213 19.36 15.7879 22.56C15.3079 33.9733 14.6346 46.28 13.7679 59.48C13.6013 62.04 13.1046 63.7467 12.2779 64.6C8.55793 68.45 -0.30207 67.53 0.00793038 61.06C1.34793 33.3133 2.02793 12.9867 2.04793 0.08Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape4&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9413128810975 9.32414062500001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M201.657 0.05C201.63 7.10333 201.687 11.5967 201.827 13.53C203.28 33.53 204.617 53.6 205.837 73.74L186.487 73.78L193.557 73.61C193.714 73.6076 193.867 73.5609 193.998 73.4752C194.129 73.3896 194.234 73.2685 194.299 73.126C194.364 72.9835 194.388 72.8254 194.367 72.67C193.367 64.75 192.894 56.7733 192.947 48.74C196.9 43.82 196.69 38.93 192.317 34.07C191.537 32.47 191.137 31.2867 191.117 30.52C190.984 25.7933 191.01 21.2667 191.197 16.94C191.213 16.5684 191.128 16.1993 190.951 15.872C190.773 15.5446 190.51 15.2711 190.189 15.0807C189.868 14.8902 189.501 14.7897 189.127 14.79L153.317 14.9C152.777 12.9667 151.747 11.28 150.227 9.84C148.927 8.60667 147.257 7.7 145.217 7.12C138.364 5.17333 133.557 7.71667 130.797 14.75C116.39 14.8967 101.944 14.9467 87.4571 14.9C61.1271 14.81 34.7871 15.13 8.5371 15.06C6.00377 15.0533 4.15377 14.7633 2.9871 14.19C0.773767 13.11 -0.209566 11.2233 0.0371003 8.53C0.150434 7.29667 0.770434 4.45333 1.8971 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape5&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.5460546875 9.32519283839548)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M3.69 73.6301L0 0.0700704L9.97 7.03745e-05C10.1004 -0.00175254 10.2289 0.031869 10.3421 0.0974247C10.4553 0.16298 10.5492 0.258107 10.6139 0.372872C10.6786 0.487637 10.7118 0.617903 10.71 0.75007C10.55 11.1234 10.7367 21.0567 11.27 30.5501C12.07 44.8301 12.51 58.8001 13.82 72.9701C13.8293 73.0668 13.8114 73.1643 13.7681 73.2514C13.7249 73.3384 13.6581 73.4116 13.5754 73.4627C13.4926 73.5137 13.3972 73.5405 13.3 73.5401Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape6&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.3825550063776 9.3230859375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M13.7551 0.08C13.7351 12.9867 13.0551 33.3133 11.7151 61.06C11.4051 67.53 20.2651 68.45 23.9851 64.6C24.8118 63.7467 25.3084 62.04 25.4751 59.48C26.3418 46.28 27.0151 33.9733 27.4951 22.56C27.6284 19.36 28.2584 11.84 29.3851 0L46.2351 0.03C45.1084 4.48333 44.4884 7.32667 44.3751 8.56C44.1284 11.2533 45.1118 13.14 47.3251 14.22C48.4918 14.7933 50.3418 15.0833 52.8751 15.09C79.1251 15.16 105.465 14.84 131.795 14.93C146.282 14.9767 160.728 14.9267 175.135 14.78C174.568 20.8133 176.498 24.9267 180.925 27.12C183.338 28.3133 185.805 28.72 188.325 28.34C194.755 27.36 198.095 21.26 197.655 14.93L233.465 14.82C233.839 14.8197 234.206 14.9202 234.527 15.1107C234.848 15.3011 235.111 15.5746 235.289 15.902C235.466 16.2293 235.551 16.5984 235.535 16.97C235.348 21.2967 235.322 25.8233 235.455 30.55C235.475 31.3167 235.875 32.5 236.655 34.1C232.788 31.5133 229.168 30.99 225.795 32.53C211.935 38.83 224.195 59.55 237.285 48.77C237.232 56.8033 237.705 64.78 238.705 72.7C238.726 72.8554 238.702 73.0135 238.637 73.156C238.572 73.2985 238.467 73.4196 238.336 73.5052C238.205 73.5909 238.052 73.6376 237.895 73.64L230.825 73.81L0.605102 73.79C0.205102 73.79 0.00510204 73.59 0.00510204 73.19C-0.0282313 69.6433 0.101769 66.03 0.395102 62.35C2.00177 42.09 2.92177 21.6067 3.1551 0.9C3.16177 0.353333 3.43844 0.08 3.9851 0.08ZM127.005 36.5C127.005 34.413 126.456 32.3624 125.412 30.555C124.369 28.7476 122.867 27.2464 121.06 26.203C119.253 25.1595 117.202 24.61 115.115 24.61C111.963 24.61 108.937 25.8635 106.708 28.0925C104.479 30.3215 103.225 33.3478 103.225 36.5C103.225 39.6522 104.479 42.6785 106.708 44.9075C108.937 47.1365 111.963 48.39 115.115 48.39C117.202 48.39 119.253 47.8405 121.06 46.797C122.867 45.7536 124.369 44.2524 125.412 42.445C126.456 40.6376 127.005 38.587 127.005 36.5ZM75.9704 37.4184C76.0574 34.3019 74.8637 31.2741 72.6541 29.007C70.4445 26.7398 67.3954 25.4143 64.1835 25.3246C62.057 25.2652 59.9523 25.7501 58.0818 26.7303C56.2114 27.7105 54.6403 29.152 53.5271 30.9092C52.414 32.6664 51.7974 34.6782 51.7398 36.7416C51.6528 39.8581 52.8465 42.8859 55.0561 45.153C57.2657 47.4202 60.3148 48.7457 63.5267 48.8354C65.6532 48.8948 67.7579 48.4099 69.6284 47.4297C71.4988 46.4495 73.0699 45.008 74.1831 43.2508C75.2962 41.4936 75.9128 39.4818 75.9704 37.4184ZM183.874 50.7982C183.856 49.4819 183.468 48.1937 182.749 47.0635C182.03 45.9334 181.006 45.0007 179.779 44.3595C178.552 43.7184 177.166 43.3911 175.76 43.4107C173.637 43.4404 171.61 44.2595 170.128 45.6863C168.646 47.1131 167.828 49.0336 167.856 51.0218C167.874 52.3381 168.262 53.6263 168.981 54.7565C169.7 55.8866 170.725 56.8193 171.951 57.4605C173.178 58.1016 174.564 58.4289 175.97 58.4093C178.093 58.3796 180.121 57.5605 181.603 56.1337C183.084 54.7069 183.902 52.7864 183.874 50.7982Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape7&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.0305953125001 9.32554685349047)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.0064 0.0100006L9.3364 6.11826e-07C9.61064 -0.000292647 9.87453 0.104847 10.0721 0.293135C10.2697 0.481423 10.3861 0.738544 10.3964 1.01C11.3097 24.8167 12.6431 48.6333 14.3964 72.46C14.4564 73.2867 14.0697 73.7 13.2364 73.7L4.1864 73.7C2.9664 53.56 1.62973 33.49 0.1764 13.49C0.0364 11.5567 -0.0202667 7.06333 0.0064 0.0100006Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape8&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1631696428572 9.32765624999999)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M10.891 0L14.581 73.56L5.85095 73.67C5.70139 73.6731 5.55452 73.6294 5.43088 73.5452C5.30724 73.461 5.21287 73.3403 5.16095 73.2C4.86095 72.3733 4.66095 71.5033 4.56095 70.59C2.05429 47.6433 0.534286 24.6667 0.000952381 1.66C-0.0257143 0.566667 0.507619 0.02 1.60095 0.02Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape9&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.5362571970961 9.55219950584632)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.6165 8.41299C23.0565 14.743 19.7165 20.843 13.2865 21.823C10.7665 22.203 8.2998 21.7963 5.88646 20.603C1.4598 18.4097 -0.470205 14.2963 0.0964619 8.26299C2.85646 1.22966 7.66313 -1.31367 14.5165 0.632992C16.5565 1.21299 18.2265 2.11966 19.5265 3.35299C21.0465 4.79299 22.0765 6.47966 22.6165 8.41299Z&quot;&gt;&lt;/path&gt; &lt;circle id=&quot;shape10&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.0115625 10.18828125)&quot; r=&quot;11.89&quot; cx=&quot;11.89&quot; cy=&quot;11.89&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape11&quot; transform=&quot;matrix(0.0351425431068875 0.000981620111375468 -0.000981620111375468 0.0351425431068875 14.2130771675543 10.2015061448131)&quot; rx=&quot;12.12&quot; ry=&quot;11.76&quot; cx=&quot;12.12&quot; cy=&quot;11.76&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape12&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 20.1057469902912 10.4364122450525)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M16.9732 2.43205C21.3465 7.29205 21.5565 12.1821 17.6032 17.1021C4.5132 27.8821 -7.7468 7.16205 6.1132 0.862052C9.48653 -0.677948 13.1065 -0.154615 16.9732 2.43205Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape13&quot; transform=&quot;matrix(0.0351528231097021 -0.000490857902548076 0.000490857902548076 0.0351528231097021 18.2800569526222 10.8531762234766)&quot; rx=&quot;8.01&quot; ry=&quot;7.5&quot; cx=&quot;8.01&quot; cy=&quot;7.5&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape14&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.47390625 12.828515625)&quot; fill=&quot;rgb(15,11,8)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0 300.33C1.52 298.69 3.53 298.057 6.03 298.43C6.10297 298.443 6.17377 298.447 6.24 298.44C6.65333 298.413 6.88667 298.26 6.94 297.98C7 297.66 7.19333 297.493 7.52 297.48L10.29 297.39C10.4233 297.383 10.5567 297.367 10.69 297.34C11.0167 297.267 11.1733 297.127 11.16 296.92C11.1467 296.7 11.2467 296.563 11.46 296.51C12.1467 296.337 12.7433 295.997 13.25 295.49C13.49 295.257 13.58 294.973 13.52 294.64C13.1333 292.653 12.8767 290.647 12.75 288.62C12.69 287.79 12.27 287.35 11.7 286.83C11.4533 286.603 11.3933 286.337 11.52 286.03C11.8533 285.197 11.6767 284.573 10.99 284.16C10.7367 284 10.46 283.923 10.16 283.93L6.56 284.02C15.1 281.92 21.0833 280.04 24.51 278.38C27.5033 276.927 30.4033 275.357 33.21 273.67C33.319 273.603 33.3974 273.495 33.4282 273.371C33.4589 273.246 33.4397 273.115 33.3746 273.004C33.3096 272.894 33.2037 272.813 33.08 272.78C32.5067 272.62 31.9433 272.67 31.39 272.93C63.5767 260.003 88.4967 238.95 106.15 209.77C109.223 204.703 112.093 199 114.76 192.66C118.06 184.807 120.343 178.587 121.61 174C123.097 168.613 124.457 162.397 125.69 155.35C126.657 149.857 126.873 144.25 126.34 138.53C127.853 138.57 128.907 138.097 129.5 137.11C131.56 133.67 131.433 130.473 129.12 127.52C128.24 126.39 127.07 126.39 125.77 126.38C120.017 126.347 114.427 126.37 109 126.45C108.613 125.77 108.27 125.09 107.97 124.41C107.69 123.77 107.527 123.037 107.48 122.21C106.953 112.977 106.213 103.723 105.26 94.45C110.127 94.5633 114.617 94.5833 118.73 94.51C121.27 94.47 123.93 94.86 126 93.31C128.053 91.77 128.717 89.61 127.99 86.83C127.23 83.89 124.98 82.2967 121.24 82.05L120.9 72.32C124.973 70.3667 126.23 67.5767 124.67 63.95C123.697 61.6833 121.82 60.52 119.04 60.46C117.273 58.24 116.223 56.5633 115.89 55.43C113.43 47.1033 110.547 38.9133 107.24 30.86C106.947 30.1467 107 29.0333 107.4 27.52C109.087 27.4933 110.883 27.5267 112.79 27.62C115.45 27.7533 117.403 26.9667 118.65 25.26C121.02 22.01 120.02 17.98 116.55 16.23C115.597 15.75 114.193 15.5133 112.34 15.52C107.533 15.54 102.823 15.4767 98.21 15.33C97.6033 13.9433 96.9433 12.6033 96.23 11.31C94.38 7.96 93.99 4.82 92.56 1.46C92.4467 1.18667 92.5067 0.963333 92.74 0.79L93.19 0.46C93.4567 0.273333 93.4267 0.176667 93.1 0.17L55.31 0L131.2 0.2C131.371 0.200762 131.536 0.26037 131.671 0.369176C131.805 0.477981 131.9 0.629779 131.94 0.8C133.38 7.23333 134.593 14.0833 135.58 21.35C139.67 51.61 143.36 78.87 145.72 107.57C147.27 126.44 146.89 145.44 143.29 163.8C138.28 189.4 127.86 214.54 111.86 234.74C90.34 261.87 61.85 283.26 28.89 293.96C20.1567 296.793 10.5267 298.917 0 300.33Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape15&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.2758764491296 12.828515625)&quot; fill=&quot;rgb(18,13,12)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M231.61 0L269.4 0.17C269.726 0.176667 269.756 0.273333 269.49 0.46L269.04 0.79C268.806 0.963333 268.746 1.18667 268.86 1.46C270.29 4.82 270.68 7.96 272.53 11.31C273.243 12.6033 273.903 13.9433 274.51 15.33C268.76 17.07 269.07 27.78 275.82 27.53C278.38 27.43 281.006 27.4267 283.7 27.52C283.3 29.0333 283.246 30.1467 283.54 30.86C286.846 38.9133 289.73 47.1033 292.19 55.43C292.523 56.5633 293.573 58.24 295.34 60.46C290.98 60.76 286.806 61.0267 282.82 61.26C277.7 61.56 274.45 67.2 278.08 71.26C278.86 72.1333 280.413 72.6 282.74 72.66C287.386 72.7733 292.206 72.66 297.2 72.32L297.54 82.05C293.013 81.9567 288.443 81.9633 283.83 82.07C281.84 82.11 280.61 82.75 279.5 84.26C276.44 88.44 277.126 91.8367 281.56 94.45C282.513 103.723 283.253 112.977 283.78 122.21C283.826 123.037 283.99 123.77 284.27 124.41C284.57 125.09 284.913 125.77 285.3 126.45C282.193 127.497 280.633 129.463 280.62 132.35C280.613 134.79 281.763 136.753 284.07 138.24C281.93 156.593 277.493 173.123 270.76 187.83C261.606 207.817 247.22 225.063 227.6 239.57C218.546 246.263 208.406 252.023 197.18 256.85C191.52 259.28 187.21 264.45 191.61 270.42C195.03 275.03 202.58 274.56 207.69 272.93C208.243 272.67 208.806 272.62 209.38 272.78C209.503 272.813 209.609 272.894 209.674 273.004C209.739 273.115 209.758 273.246 209.728 273.371C209.697 273.495 209.619 273.603 209.51 273.67C206.703 275.357 203.803 276.927 200.81 278.38C197.383 280.04 191.4 281.92 182.86 284.02C165.386 287.427 148.786 288.113 133.06 286.08C116.433 283.94 99.2895 279.17 81.6295 271.77C75.1162 269.043 68.6828 266.14 62.3295 263.06C54.3762 259.2 46.8962 254.463 39.8895 248.85C40.5695 248.377 41.3595 247.947 42.2595 247.56C44.5695 246.55 46.3695 244.3 44.1695 241.99C29.1962 226.303 18.1928 209.247 11.1595 190.82C1.95285 166.687 -1.55715 141.62 0.629514 115.62C2.01618 99.0867 3.45618 82.5733 4.94951 66.08C5.49618 59.9533 6.20618 53.32 7.07951 46.18C8.95285 30.8733 10.7762 15.5733 12.5495 0.28ZM230.747 11.7302C228.758 9.7412 226.058 8.62261 223.245 8.62261C220.432 8.62261 217.731 9.7412 215.742 11.7302L213.89 13.5829C211.901 15.5719 210.782 18.2724 210.782 21.0853C210.782 23.8982 211.901 26.5987 213.89 28.5877L215.092 29.7898C217.081 31.7788 219.781 32.8974 222.594 32.8974C225.407 32.8974 228.108 31.7788 230.097 29.7898L231.949 27.9371C233.938 25.9481 235.057 23.2476 235.057 20.4347C235.057 17.6218 233.938 14.9213 231.949 12.9323ZM47.1595 186.78C39.7128 170.84 35.7195 154.833 35.1795 138.76C34.9528 131.94 35.0895 124.72 35.5895 117.1C37.1495 93.44 39.2662 67.4833 41.9395 39.23C42.3395 35.0167 42.6262 30.7267 42.7995 26.36C43.4195 10.9 25.2095 12.45 24.4195 25.69C23.0462 48.79 21.1195 72.2233 18.6395 95.99C17.6595 105.337 16.9995 114.63 16.6595 123.87C16.3328 132.65 16.6595 140.653 17.6395 147.88C19.5062 161.707 22.9728 175.147 28.0395 188.2C29.1795 191.153 30.6662 194.07 32.4995 196.95C35.2995 201.37 41.5395 202.72 45.3395 198.89C48.7328 195.483 49.3395 191.447 47.1595 186.78ZM87.1943 37.8021C86.8236 36.4743 85.902 35.3574 84.6342 34.6994C83.3663 34.0413 81.8534 33.8945 80.4311 34.2916C79.0088 34.6887 77.7908 35.598 77.0472 36.8177C76.3037 38.0374 76.094 39.4701 76.4647 40.7979C76.8355 42.1257 77.757 43.2426 79.0249 43.9006C80.2927 44.5587 81.8056 44.7055 83.2279 44.3084C84.6502 43.9113 85.8682 43.002 86.6118 41.7823C87.3554 40.5626 87.565 39.1299 87.1943 37.8021ZM242.9 63.3691C242.905 60.5116 242.14 57.7024 240.682 55.2252C239.224 52.7479 237.124 50.6888 234.594 49.2556C232.064 47.8225 229.192 47.0651 226.268 47.06C223.344 47.0549 220.469 47.8022 217.934 49.2266C215.399 50.6509 213.292 52.7027 211.826 55.1748C210.359 57.6469 209.585 60.4534 209.58 63.3109C209.575 66.1684 210.34 68.9776 211.797 71.4548C213.255 73.9321 215.355 75.9912 217.885 77.4244C220.415 78.8575 223.287 79.6149 226.211 79.62C229.135 79.6251 232.01 78.8778 234.545 77.4534C237.08 76.0291 239.187 73.9773 240.653 71.5052C242.12 69.0331 242.895 66.2266 242.9 63.3691ZM85.9041 71.8823C88.1531 72.912 90.7367 72.9736 93.0816 72.0534C95.4266 71.1333 97.3455 69.3049 98.4127 66.9739C99.1193 65.4306 99.4215 63.7348 99.2889 62.0574C99.1563 60.38 98.5935 58.7796 97.6572 57.4176C96.721 56.0556 95.4439 54.9794 93.9549 54.2977C91.7059 53.268 89.1223 53.2064 86.7774 54.1266C84.4325 55.0467 82.5135 56.8751 81.4463 59.2061C80.7398 60.7494 80.4375 62.4452 80.5701 64.1226C80.7028 65.8 81.2656 67.4004 82.2018 68.7624C83.1381 70.1244 84.4151 71.2006 85.9041 71.8823ZM60.6086 105.171C63.2448 106.638 66.3725 106.974 69.2978 106.105C72.223 105.236 74.7122 103.231 76.213 100.535C77.7138 97.8381 78.1063 94.6659 77.3035 91.7217C76.5007 88.7775 74.5666 86.2966 71.9304 84.8293C69.2942 83.362 66.1665 83.0257 63.2413 83.8948C60.316 84.7639 57.8268 86.7691 56.326 89.4655C54.8252 92.1619 54.4327 95.3341 55.2355 98.2783C56.0384 101.222 57.9724 103.703 60.6086 105.171ZM187.08 98.11C187.08 96.1959 186.318 94.3582 184.965 93.0047C183.611 91.6512 181.774 90.89 179.86 90.89C177.945 90.89 176.108 91.6512 174.754 93.0047C173.401 94.3582 172.64 96.1959 172.64 98.11C172.64 100.024 173.401 101.862 174.754 103.215C176.108 104.569 177.945 105.33 179.86 105.33C181.127 105.33 182.372 104.996 183.47 104.363C184.567 103.729 185.479 102.817 186.112 101.72C186.746 100.623 187.08 99.3773 187.08 98.11ZM234.564 99.0027C233.705 97.863 232.551 96.9774 231.217 96.4351C229.883 95.8929 228.416 95.7129 226.964 95.9133C225.513 96.1138 224.127 96.6877 222.947 97.5771C221.766 98.4665 220.833 99.6405 220.24 100.981C219.647 102.321 219.416 103.78 219.57 105.212C219.723 106.644 220.256 107.998 221.115 109.137C221.974 110.277 223.128 111.163 224.462 111.705C225.796 112.247 227.263 112.427 228.715 112.227C230.166 112.026 231.552 111.452 232.732 110.563C233.913 109.673 234.846 108.499 235.439 107.159C236.032 105.819 236.263 104.36 236.109 102.928C235.956 101.496 235.423 100.142 234.564 99.0027ZM47.9695 214.56C45.1695 220.83 50.0195 225.32 54.0495 229.45C57.6895 233.19 61.8995 236.09 66.6995 232.86C71.8895 229.38 72.0595 223.24 67.9795 218.66C64.2095 214.41 60.6395 209.6 54.3295 209.99C51.4095 210.17 49.1195 211.99 47.9695 214.56Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape16&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.8026079545455 12.838359375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M26.0114 0C24.238 15.2933 22.4147 30.5933 20.5414 45.9C19.668 53.04 18.958 59.6733 18.4114 65.8C16.918 82.2933 15.478 98.8067 14.0914 115.34C11.9047 141.34 15.4147 166.407 24.6214 190.54C31.6547 208.967 42.658 226.023 57.6314 241.71C59.8314 244.02 58.0314 246.27 55.7214 247.28C54.8214 247.667 54.0314 248.097 53.3514 248.57C51.9014 250.07 52.3314 253.14 52.3514 255.14C31.6214 235.93 17.0114 211.99 8.66137 185.13C2.48804 165.29 -0.385293 145.337 0.0413737 125.27C0.691374 94.91 5.82137 63.64 9.38137 32.5C9.99471 27.1467 10.7014 21.75 11.5014 16.31C12.3214 10.7767 13.5247 5.69667 15.1114 1.07C15.2107 0.778294 15.3987 0.524438 15.6494 0.343583C15.9001 0.162728 16.2013 0.0636261 16.5114 0.06Z&quot;&gt;&lt;/path&gt; &lt;rect id=&quot;shape17&quot; transform=&quot;matrix(0.0248592227760896 -0.0248592227760896 0.0248592227760896 0.0248592227760896 19.531681996495 13.569794617477)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; width=&quot;23.84&quot; height=&quot;22.92&quot; rx=&quot;10.61&quot; ry=&quot;10.61&quot;&gt;&lt;/rect&gt; &lt;path id=&quot;shape18&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.857255859375 13.3649990428515)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M30.6225 171.52C32.8025 176.187 32.1958 180.223 28.8025 183.63C25.0025 187.46 18.7625 186.11 15.9625 181.69C14.1292 178.81 12.6425 175.893 11.5025 172.94C6.43583 159.887 2.96917 146.447 1.1025 132.62C0.1225 125.393 -0.204167 117.39 0.1225 108.61C0.4625 99.37 1.1225 90.0767 2.1025 80.73C4.5825 56.9634 6.50917 33.53 7.8825 10.43C8.6725 -2.80997 26.8825 -4.35997 26.2625 11.1C26.0892 15.4667 25.8025 19.7567 25.4025 23.97C22.7292 52.2234 20.6125 78.18 19.0525 101.84C18.5525 109.46 18.4158 116.68 18.6425 123.5C19.1825 139.573 23.1758 155.58 30.6225 171.52Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape19&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.7841415488515 13.3674609375)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.0522 0C8.66553 0.146667 13.3755 0.21 18.1822 0.19C20.0355 0.183333 21.4389 0.42 22.3922 0.9C25.8622 2.65 26.8622 6.68 24.4922 9.93C23.2455 11.6367 21.2922 12.4233 18.6322 12.29C16.7255 12.1967 14.9289 12.1633 13.2422 12.19C10.5489 12.0967 7.9222 12.1 5.3622 12.2C-1.3878 12.45 -1.6978 1.74 4.0522 0Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape20&quot; transform=&quot;matrix(0.0338611839889802 -0.00945421244350544 0.00945421244350544 0.0338611839889802 14.9149266129752 14.0867380565676)&quot; rx=&quot;5.57&quot; ry=&quot;5.2&quot; cx=&quot;5.57&quot; cy=&quot;5.2&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape21&quot; transform=&quot;matrix(0.0351561964539828 6.13592003636124e-05 -6.13592003636124e-05 0.0351561964539828 19.6449060698586 14.4819473774511)&quot; rx=&quot;16.66&quot; ry=&quot;16.28&quot; cx=&quot;16.66&quot; cy=&quot;16.28&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape22&quot; transform=&quot;matrix(-0.0146348716029047 0.031965331958686 -0.031965331958686 -0.0146348716029047 15.8772166930746 14.8739620295146)&quot; rx=&quot;9.67&quot; ry=&quot;9.33&quot; cx=&quot;9.67&quot; cy=&quot;9.33&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape23&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.997793706651 14.9540625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M18.805 0C21.585 0.06 23.4616 1.22333 24.435 3.49C25.995 7.11667 24.7383 9.90667 20.665 11.86C15.6716 12.2 10.8516 12.3133 6.20498 12.2C3.87831 12.14 2.32498 11.6733 1.54498 10.8C-2.08502 6.74 1.16498 1.1 6.28498 0.8C10.2716 0.566667 14.445 0.3 18.805 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape24&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.0361349190606 15.7107890625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M19.9144 0.0653333C23.6544 0.312 25.9044 1.90533 26.6644 4.84533C27.3911 7.62533 26.7277 9.78533 24.6744 11.3253C22.6044 12.8753 19.9444 12.4853 17.4044 12.5253C13.2911 12.5987 8.80105 12.5787 3.93438 12.4653C-0.498949 9.852 -1.18562 6.45533 1.87438 2.27533C2.98438 0.765333 4.21438 0.125333 6.20438 0.0853333C10.8177 -0.0213333 15.3877 -0.028 19.9144 0.0653333Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape25&quot; transform=&quot;matrix(-0.0170977282180133 0.0307185547160906 -0.0307185547160906 -0.0170977282180133 15.1542587716268 16.0053675452257)&quot; rx=&quot;11.64&quot; ry=&quot;11.38&quot; cx=&quot;11.64&quot; cy=&quot;11.38&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;circle id=&quot;shape26&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.345234375 16.0238671875)&quot; r=&quot;7.22&quot; cx=&quot;7.22&quot; cy=&quot;7.22&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape27&quot; transform=&quot;matrix(0.0280770296501001 -0.0211575594076892 0.0211575594076892 0.0280770296501001 19.8774398273616 16.4371069616574)&quot; rx=&quot;8.42&quot; ry=&quot;8.13&quot; cx=&quot;8.42&quot; cy=&quot;8.13&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape28&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1414052368516 17.2710454963236)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.02 12.1647L3.45003 11.8747C1.14336 10.388 -0.00663785 8.42471 2.88184e-05 5.98471C0.0133622 3.09804 1.57336 1.13137 4.68003 0.0847059C10.1067 0.00470588 15.6967 -0.0186275 21.45 0.0147059C22.75 0.0247059 23.92 0.0247059 24.8 1.15471C27.1134 4.10804 27.24 7.30471 25.18 10.7447C24.5867 11.7314 23.5334 12.2047 22.02 12.1647Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape29&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.9485123620206 17.688515625)&quot; fill=&quot;rgb(16,11,10)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M94.2701 0L112.84 0.29C113.373 6.01 113.157 11.6167 112.19 17.11C110.957 24.1567 109.597 30.3733 108.11 35.76C106.843 40.3467 104.56 46.5667 101.26 54.42C98.5934 60.76 95.7234 66.4633 92.6501 71.53C74.9968 100.71 50.0768 121.763 17.8901 134.69C12.7801 136.32 5.23009 136.79 1.81009 132.18C-2.58991 126.21 1.72009 121.04 7.38009 118.61C18.6068 113.783 28.7468 108.023 37.8001 101.33C57.4201 86.8233 71.8068 69.5767 80.9601 49.59C87.6934 34.8833 92.1301 18.3533 94.2701 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape30&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9331058615201 20.210194296345)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.830544 4.59225C1.98054 2.02225 4.27054 0.202251 7.19054 0.0222511C13.5005 -0.367749 17.0705 4.44225 20.8405 8.69225C24.9205 13.2723 24.7505 19.4123 19.5605 22.8923C14.7605 26.1223 10.5505 23.2223 6.91054 19.4823C2.88054 15.3523 -1.96946 10.8623 0.830544 4.59225Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape31&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.6404577789765 21.5771484375)&quot; fill=&quot;rgb(16,11,10)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.07476 0C8.08142 5.61333 15.5614 10.35 23.5148 14.21C29.8681 17.29 36.3014 20.1933 42.8148 22.92C60.4748 30.32 77.6181 35.09 94.2448 37.23C109.971 39.2633 126.571 38.5767 144.045 35.17L147.645 35.08C147.945 35.0733 148.221 35.15 148.475 35.31C149.161 35.7233 149.338 36.3467 149.005 37.18C148.878 37.4867 148.938 37.7533 149.185 37.98C149.755 38.5 150.175 38.94 150.235 39.77C150.361 41.7967 150.618 43.8033 151.005 45.79C151.065 46.1233 150.975 46.4067 150.735 46.64C150.228 47.1467 149.631 47.4867 148.945 47.66C148.731 47.7133 148.631 47.85 148.645 48.07C148.658 48.2767 148.501 48.4167 148.175 48.49C148.041 48.5167 147.908 48.5333 147.775 48.54L145.005 48.63C144.678 48.6433 144.485 48.81 144.425 49.13C144.371 49.41 144.138 49.5633 143.725 49.59C143.659 49.5967 143.588 49.5933 143.515 49.58C141.015 49.2067 139.005 49.84 137.485 51.48C124.278 53.2267 112.368 53.5833 101.755 52.55C80.2748 50.4633 60.3014 44.84 41.8348 35.68C35.8281 32.7 28.6481 28.54 20.2948 23.2C14.0414 19.2067 7.30142 13.6633 0.0747565 6.57C0.0547565 4.57 -0.375243 1.5 1.07476 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape32&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.548046875 24.3846604970638)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M37.39 126.792L36.84 125.732C36.6867 125.445 36.61 125.139 36.61 124.812L36.29 50.1519C39.97 50.1319 42.74 50.0419 44.93 47.3519C46.0567 45.9652 46.4067 44.4152 45.98 42.7019C44.81 38.0219 40.08 37.5119 35.72 37.6019L35.91 26.2919C40.16 26.9019 44.77 27.8519 48.81 25.9619C52.26 24.3519 53.31 20.2319 50.85 17.2519C48.51 14.4319 45.36 14.2119 41.99 14.2719C35.7567 14.3852 29.3167 14.4052 22.67 14.3319C19.49 14.3019 16.81 15.9619 15.14 18.6319C15.2 16.6619 12.86 15.6819 11.44 14.7519C10.6133 14.2119 9.90667 13.5852 9.32 12.8719C6.57333 9.53188 3.78 6.23188 0.94 2.97188C0.46 2.41855 0.146667 1.62521 0 0.591879C17.1 3.24521 34.28 3.98188 51.54 2.80188C57.06 2.42188 62.3133 1.51855 67.3 0.0918792C68.18 -0.154787 68.3567 0.0952125 67.83 0.841879C58.7633 13.8352 53.49 29.3252 52.01 47.3119C50.37 67.3319 51 88.9819 56.8 107.652C58.81 114.142 62.13 120.072 65.01 126.212C65.0485 126.291 65.0589 126.382 65.0394 126.468C65.02 126.554 64.9718 126.631 64.9029 126.686C64.834 126.741 64.7483 126.772 64.66 126.772Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape33&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.486355851717 24.3923298330305)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.75477 0.373729C1.90143 1.40706 2.21477 2.2004 2.69477 2.75373C5.53477 6.01373 8.3281 9.31373 11.0748 12.6537C11.6614 13.3671 12.3681 13.9937 13.1948 14.5337C14.6148 15.4637 16.9548 16.4437 16.8948 18.4137L16.5848 19.0537C15.9714 19.3604 15.6748 19.8204 15.6948 20.4337C15.8148 23.3437 16.3448 26.1237 18.0248 28.6937C19.9714 31.6737 22.1714 34.5471 24.6248 37.3137C19.6548 39.6737 18.5548 46.9937 24.3448 49.3137C24.1981 53.2071 24.2048 57.1237 24.3648 61.0637C24.5581 65.7371 24.5748 69.6437 24.4148 72.7837C24.2014 77.0371 23.9914 81.3304 23.7848 85.6637C23.1248 99.8304 19.6748 113.244 13.4348 125.904C13.2814 126.21 13.0314 126.384 12.6848 126.424L11.5948 126.534L3.79477 126.534C3.66373 126.534 3.5364 126.49 3.43437 126.408C3.33234 126.325 3.26171 126.21 3.23447 126.082C3.20722 125.954 3.22499 125.82 3.28477 125.704C16.0848 100.784 18.1148 71.0737 14.6948 43.5737C12.8014 28.3737 7.92143 14.0371 0.0547669 0.563729C0.0152725 0.50031 -0.00361813 0.426609 0.000572506 0.352292C0.00476314 0.277975 0.0318434 0.20644 0.0782619 0.147067C0.12468 0.0876949 0.188315 0.0431997 0.26082 0.0194171C0.333326 -0.0043654 0.411387 -0.00634806 0.484767 0.0137292Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape34&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.0617214476865 24.8861307529877)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M21.2988 12.0278C16.7455 11.8878 12.1288 11.8545 7.44881 11.9278C4.74215 11.9678 2.94548 11.7312 2.05881 11.2178C0.238812 10.1645 -0.374521 8.0945 0.218812 5.00784L0.528812 4.36784C2.19881 1.69784 4.87881 0.0378364 8.05881 0.0678364C14.7055 0.14117 21.1455 0.12117 27.3788 0.00783636C30.7488 -0.0521636 33.8988 0.167836 36.2388 2.98784C38.6988 5.96784 37.6488 10.0878 34.1988 11.6978C30.1588 13.5878 25.5488 12.6378 21.2988 12.0278Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape35&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.038091694079 25.0621875000001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.890947 0C0.297614 3.08667 0.910947 5.15667 2.73095 6.21C3.61761 6.72333 5.41428 6.96 8.12095 6.92C12.8009 6.84667 17.4176 6.88 21.9709 7.02L21.7809 18.33L8.93095 18.26C6.47761 15.4933 4.27761 12.62 2.33095 9.64C0.650947 7.07 0.120947 4.29 0.000947368 1.38C-0.0190526 0.766667 0.277614 0.306667 0.890947 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape36&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.2047130847683 25.704140625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.19149 0L17.0415 0.07C21.4015 -0.02 26.1315 0.49 27.3015 5.17C27.7282 6.88333 27.3782 8.43333 26.2515 9.82C24.0615 12.51 21.2915 12.6 17.6115 12.62L3.91149 12C-1.87851 9.68 -0.778506 2.36 4.19149 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape37&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.893984375 26.126015625)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M12.75 0L26.45 0.62L26.77 75.28C26.77 75.6067 26.8467 75.9133 27 76.2L27.55 77.26L0 77.22L1.09 77.11C1.43667 77.07 1.68667 76.8967 1.84 76.59C8.08 63.93 11.53 50.5167 12.19 36.35C12.3967 32.0167 12.6067 27.7233 12.82 23.47C12.98 20.33 12.9633 16.4233 12.77 11.75C12.61 7.81 12.6033 3.89333 12.75 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape38&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.22640625 29.4324536132813)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M29.96 24.0302C30.7067 23.5835 30.1467 23.1702 28.28 22.7902C27.96 22.7235 27.6733 22.5835 27.42 22.3702C24.9333 20.2235 22.8967 18.7069 21.31 17.8202C12.91 13.1069 5.80667 7.21687 0 0.150208L30.09 0.000208333C30.4767 -0.00645833 30.7833 0.146875 31.01 0.460208C37.57 9.69354 45.7567 17.2435 55.57 23.1102C55.9433 23.3302 55.92 23.4969 55.5 23.6102C54.48 23.8769 53.4167 24.0135 52.31 24.0202C44.77 24.0669 37.32 24.0702 29.96 24.0302Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape39&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.2706541442871 29.4394921875)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M38.2747 0C35.2147 4.74667 31.2681 10.0433 26.4347 15.89C23.4547 19.49 20.7014 22.14 18.1747 23.84L0.754727 23.73C-0.17194 23.7233 -0.245273 23.4733 0.534727 22.98C9.87473 17.05 17.3747 9.52 24.9347 0.58C25.0571 0.432797 25.211 0.314351 25.3856 0.233119C25.5601 0.151886 25.7511 0.109846 25.9447 0.11Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape40&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.909609375 29.437734375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M65.9 0C71.7067 7.06667 78.81 12.9567 87.21 17.67C88.7967 18.5567 90.8333 20.0733 93.32 22.22C93.5733 22.4333 93.86 22.5733 94.18 22.64C96.0467 23.02 96.6067 23.4333 95.86 23.88L0 23.89C2.52667 22.19 5.28 19.54 8.26 15.94C13.0933 10.0933 17.04 4.79667 20.1 0.05Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape41&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.6264334548969 30.8390367406574)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M175.558 0.450733C176.245 0.450733 176.568 0.567399 176.528 0.800733C176.494 1.0303 176.388 1.24303 176.226 1.40826C176.065 1.5735 175.855 1.68291 175.628 1.72073C171.935 2.3474 168.581 2.65073 165.568 2.63073C163.998 2.62073 162.798 3.35073 161.188 3.18073C160.808 3.14073 160.445 3.20407 160.098 3.37073L158.488 4.16073C158.195 4.30073 157.958 4.50407 157.778 4.77073C157.045 5.85073 156.111 6.47073 154.978 6.63073C153.258 6.87073 151.491 6.99073 149.678 6.99073C111.858 6.8974 73.5681 6.84073 34.8081 6.82073C28.6781 6.82073 24.4281 9.63073 23.3181 15.9507L0.628115 15.8107C0.50059 15.8104 0.376138 15.7713 0.2713 15.6987C0.166463 15.626 0.0861025 15.5233 0.0409006 15.404C-0.00430136 15.2848 -0.0122487 15.1546 0.0181151 15.0307C2.16812 6.40073 10.0881 -0.0792673 19.0981 0.00073271C53.2181 0.314066 87.8014 0.380733 122.848 0.200733C140.421 0.114066 157.991 0.197399 175.558 0.450733Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape42&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.4462109375 30.8548828125)&quot; fill=&quot;rgb(18,13,12)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M152.24 0L253.08 0.15C253.047 2.17 252.56 3.72667 251.62 4.82C250.867 5.69333 249.93 6.13667 248.81 6.15C221.383 6.39 194.363 6.58667 167.75 6.74C167.283 6.74 167.03 6.97333 166.99 7.44C166.87 8.95333 167.113 10.3433 167.72 11.61C167.847 11.8833 167.89 12.1667 167.85 12.46L167.63 14.18C167.577 14.5867 167.74 14.86 168.12 15C168.573 15.1667 168.867 15.3533 169 15.56L0 15.5C1.11 9.18 5.36 6.37 11.49 6.37C50.25 6.39 88.54 6.44667 126.36 6.54C128.173 6.54 129.94 6.42 131.66 6.18C132.793 6.02 133.727 5.4 134.46 4.32C134.64 4.05333 134.877 3.85 135.17 3.71L136.78 2.92C137.127 2.75333 137.49 2.69 137.87 2.73C139.48 2.9 140.68 2.17 142.25 2.18C145.263 2.2 148.617 1.89667 152.31 1.27C152.537 1.23218 152.746 1.12277 152.908 0.957532C153.07 0.792295 153.175 0.579568 153.21 0.35C153.25 0.116667 152.927 -1.13687e-13 152.24 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape43&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 19.3159081135321 30.86015625)&quot; fill=&quot;rgb(16,11,10)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M86.1197 0C93.6331 3.14 98.2231 7.99667 99.8897 14.57C99.9181 14.684 99.9111 14.804 99.8698 14.914C99.8285 15.024 99.7547 15.1189 99.6583 15.186C99.5618 15.2532 99.4472 15.2894 99.3297 15.29L2.03972 15.41C1.90639 15.2033 1.61306 15.0167 1.15972 14.85C0.779725 14.71 0.616391 14.4367 0.669725 14.03L0.889725 12.31C0.929725 12.0167 0.886391 11.7333 0.759725 11.46C0.153058 10.1933 -0.0902752 8.80333 0.0297248 7.29C0.0697248 6.82333 0.323058 6.59 0.789725 6.59C27.4031 6.43667 54.4231 6.24 81.8497 6C82.9697 5.98667 83.9064 5.54333 84.6597 4.67C85.5997 3.57667 86.0864 2.02 86.1197 0Z&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt;&lt;div class=&quot;w-16 h-16&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;fill-[${rgbColor} w-16 h-16&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 36 36&quot;&gt; &lt;defs&gt;&lt;/defs&gt; &lt;path id=&quot;shape0&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 10.393984646722 3.24851063866497)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M384.119 800.308C389.392 800.401 395.079 800.381 401.179 800.248C405.299 800.161 408.469 800.568 410.689 801.468C415.949 803.598 420.779 810.198 420.289 816.268C419.669 823.858 412.349 829.318 404.999 829.328C277.499 829.355 146.952 829.355 13.3589 829.328C8.63888 829.328 4.09888 825.978 1.87888 822.058C-2.73112 813.888 1.52888 803.918 10.4389 801.028C11.9855 800.528 13.9555 800.285 16.3489 800.298C22.1289 800.338 27.6889 800.265 33.0289 800.078C33.1769 800.076 33.3188 800.017 33.4263 799.913C33.5337 799.809 33.5989 799.668 33.6089 799.518C33.7489 797.391 34.0889 795.351 34.6289 793.398C38.5755 779.138 46.7822 768.285 59.2489 760.838C67.2389 756.068 77.9989 753.418 87.8689 753.798C91.7089 753.938 95.6189 754.578 99.3589 753.338C121.612 745.945 138.126 732.518 148.899 713.058C160.649 691.848 162.149 664.098 156.689 640.298C150.949 615.338 135.539 594.358 113.659 581.418C104.759 576.151 97.1322 571.378 90.7789 567.098C79.8722 559.751 69.4389 550.391 59.4789 539.018C41.7922 518.825 28.7222 496.301 20.2689 471.448C13.2089 450.695 9.41555 429.945 8.88888 409.198C8.39555 389.938 9.51888 370.588 12.2589 351.148C15.7689 326.188 18.7489 301.968 22.2689 277.258C23.1955 270.798 23.9055 264.308 24.3989 257.788C25.2922 245.915 26.1489 234.441 26.9689 223.368C28.2189 206.548 28.2189 189.968 28.2289 172.948C28.229 172.665 28.1641 172.386 28.0392 172.133C27.9143 171.88 27.7328 171.659 27.5089 171.488C4.71888 154.278 -3.35112 123.728 10.2489 97.8679C21.8189 75.8479 44.3589 62.0579 69.5789 63.3579C72.9922 63.5379 76.3389 64.1179 79.6189 65.0979C79.7826 65.1468 79.9567 65.1513 80.1235 65.1109C80.2903 65.0705 80.4439 64.9867 80.5689 64.8679C95.3422 50.8279 113.322 44.9613 134.509 47.2679C134.656 47.2852 134.804 47.2536 134.932 47.1778C135.061 47.102 135.161 46.9862 135.219 46.8479C136.972 42.6213 139.372 38.5079 142.419 34.5079C153.299 20.2379 166.749 9.32792 184.089 3.97792C204.569 -2.34875 224.312 -1.12875 243.319 7.63792C258.599 14.6779 272.559 26.6579 280.469 41.6579C280.596 41.9046 280.792 41.9846 281.059 41.8979C289.839 38.9646 299.389 37.9446 309.709 38.8379C326.729 40.3079 342.309 50.4379 353.989 63.2879C354.516 63.8679 355.166 64.1746 355.939 64.2079C361.419 64.4546 366.656 65.5513 371.649 67.4979C392.199 75.5079 406.519 91.1379 411.669 112.968C413.189 119.421 413.456 125.841 412.469 132.228C409.882 148.975 401.956 162.205 388.689 171.918C387.729 172.628 387.729 173.468 387.719 174.528C387.586 191.895 387.899 207.108 388.659 220.168C389.549 235.238 390.999 253.908 393.189 270.758C396.622 297.205 400.169 324.231 403.829 351.838C404.689 358.351 405.536 366.615 406.369 376.628C407.042 384.655 407.406 391.321 407.459 396.628C407.679 420.268 404.476 443.035 397.849 464.928C386.419 502.718 363.929 536.538 333.029 561.268C324.009 568.498 312.959 575.088 302.869 581.488C297.502 584.888 292.979 588.131 289.299 591.218C265.139 611.508 255.039 640.758 256.429 672.398C258.039 709.018 277.959 738.488 312.639 751.718C317.389 753.528 321.449 754.508 326.659 754.038C338.269 753.008 349.089 755.608 359.129 762.058C371.639 770.088 381.589 784.038 383.299 799.558C383.352 800.045 383.626 800.295 384.119 800.308ZM34.9389 123.938C34.6255 130.038 36.5689 135.461 40.7689 140.208C42.9155 142.635 45.5089 143.855 48.5489 143.868C57.4489 143.895 67.6722 143.898 79.2189 143.878C80.8589 143.878 81.9889 142.308 82.5389 140.958C82.6855 140.585 82.6522 140.231 82.4389 139.898C80.5522 136.978 80.8189 134.321 83.2389 131.928C87.7189 127.508 91.8289 130.808 94.8789 134.678C97.7389 138.308 103.749 143.708 108.819 143.768C117.746 143.855 126.882 143.871 136.229 143.818C142.909 143.768 150.429 136.098 154.769 131.618C156.269 130.068 158.029 129.188 160.259 129.608C164.159 130.328 166.106 132.778 166.099 136.958C166.099 138.248 165.299 139.248 164.549 140.218C164.261 140.59 164.13 141.06 164.184 141.527C164.239 141.994 164.474 142.422 164.839 142.718C166.006 143.678 167.326 144.148 168.799 144.128C196.979 143.828 224.629 143.751 251.749 143.898C253.509 143.905 255.106 143.581 256.539 142.928C256.721 142.847 256.872 142.708 256.969 142.533C257.065 142.358 257.101 142.155 257.073 141.955C257.044 141.756 256.951 141.571 256.809 141.428C253.879 138.498 254.059 132.908 257.859 130.608C262.999 127.498 266.539 130.248 269.939 133.818C274.619 138.718 280.959 143.828 287.779 143.838C296.859 143.865 305.789 143.868 314.569 143.848C321.399 143.828 328.259 136.098 332.759 131.638C335.086 129.338 337.459 128.821 339.879 130.088C343.819 132.161 344.612 135.195 342.259 139.188C342.08 139.495 341.983 139.844 341.98 140.198C341.976 140.552 342.066 140.901 342.239 141.208C343.319 143.118 344.959 144.088 347.179 144.068C354.066 144.001 361.086 143.928 368.239 143.848C370.352 143.821 372.149 143.235 373.629 142.088C379.589 137.488 382.416 131.278 382.109 123.458C381.969 109.928 371.589 99.2079 359.169 95.4779C358.953 95.4151 358.724 95.4137 358.51 95.4738C358.296 95.534 358.105 95.6534 357.959 95.8179C355.212 98.9446 351.706 100.435 347.439 100.288C341.069 100.068 338.009 96.4579 335.789 91.1479C332.202 82.5946 326.232 76.3279 317.879 72.3479C307.626 67.4546 296.802 67.5779 285.409 72.7179C282.069 74.2179 279.519 77.4279 276.309 79.4679C269.159 84.0279 261.339 79.8879 260.179 71.8979C258.606 61.0979 253.279 51.6813 244.199 43.6479C217.109 19.6679 175.399 28.6579 160.839 61.6279C158.766 66.3279 157.699 70.8946 157.639 75.3279C157.559 80.8679 155.339 86.2279 149.929 88.1679C144.262 90.2146 139.372 89.0513 135.259 84.6779C133.749 83.0679 132.859 81.0279 131.499 79.3379C131.286 79.0646 131.012 78.8779 130.679 78.7779C128.472 78.1113 126.346 77.8213 124.299 77.9079C113.326 78.3813 104.429 83.1579 97.6089 92.2379C94.2189 96.7479 94.0089 102.468 90.0089 106.458C86.8589 109.588 81.6689 110.618 77.7089 108.488C73.0155 105.968 70.9422 101.938 71.4889 96.3979C71.5755 95.5313 71.1922 95.0446 70.3389 94.9379C59.7789 93.5446 50.8422 96.5046 43.5289 103.818C38.0555 109.291 35.1922 115.998 34.9389 123.938ZM70.3189 172.868L60.5489 172.868C60.0022 172.868 59.7255 173.141 59.7189 173.688C59.4855 194.395 58.5655 214.878 56.9589 235.138C56.6655 238.818 56.5355 242.431 56.5689 245.978C56.5689 246.378 56.7689 246.578 57.1689 246.578L287.389 246.598L306.739 246.558L315.789 246.558C316.622 246.558 317.009 246.145 316.949 245.318C315.196 221.491 313.862 197.675 312.949 173.868C312.939 173.596 312.822 173.339 312.625 173.151C312.427 172.963 312.163 172.858 311.889 172.858L302.559 172.868L102.799 172.818L85.9489 172.788ZM345.659 172.918L336.369 172.938C335.276 172.938 334.742 173.485 334.769 174.578C335.302 197.585 336.822 220.561 339.329 243.508C339.429 244.421 339.629 245.291 339.929 246.118C339.981 246.258 340.075 246.379 340.199 246.463C340.322 246.547 340.469 246.591 340.619 246.588L349.349 246.478L358.959 246.388C359.056 246.388 359.152 246.362 359.234 246.311C359.317 246.259 359.384 246.186 359.427 246.099C359.47 246.012 359.488 245.915 359.479 245.818C358.169 231.648 357.729 217.678 356.929 203.398C356.396 193.905 356.209 183.971 356.369 173.598C356.371 173.466 356.337 173.335 356.273 173.221C356.208 173.106 356.114 173.011 356.001 172.945C355.888 172.88 355.759 172.846 355.629 172.848ZM285.139 272.498L66.0789 272.778L56.5789 272.838C56.2688 272.842 55.9676 272.941 55.7169 273.122C55.4662 273.302 55.2782 273.556 55.1789 273.848C53.5922 278.475 52.3889 283.555 51.5689 289.088C50.7689 294.528 50.0622 299.925 49.4489 305.278C45.8889 336.418 40.7589 367.688 40.1089 398.048C39.6822 418.115 42.5555 438.068 48.7289 457.908C57.0789 484.768 71.6889 508.708 92.4189 527.918C99.6455 535.011 106.386 540.555 112.639 544.548C120.992 549.888 128.172 554.048 134.179 557.028C152.646 566.188 172.619 571.811 194.099 573.898C204.712 574.931 216.622 574.575 229.829 572.828C240.356 571.415 249.986 569.291 258.719 566.458C291.679 555.758 320.169 534.368 341.689 507.238C357.689 487.038 368.109 461.898 373.119 436.298C376.719 417.938 377.099 398.938 375.549 380.068C373.189 351.368 369.499 324.108 365.409 293.848C364.422 286.581 363.209 279.731 361.769 273.298C361.729 273.128 361.634 272.976 361.499 272.867C361.365 272.758 361.199 272.699 361.029 272.698ZM175.049 601.798L173.779 601.438C173.706 601.418 173.627 601.42 173.555 601.444C173.482 601.467 173.419 601.512 173.372 601.571C173.326 601.631 173.299 601.702 173.295 601.776C173.29 601.851 173.309 601.925 173.349 601.988C181.216 615.461 186.096 629.798 187.989 644.998C191.409 672.498 189.379 702.208 176.579 727.128C176.519 727.245 176.501 727.378 176.529 727.506C176.556 727.635 176.626 727.75 176.728 727.832C176.831 727.914 176.958 727.959 177.089 727.958L184.889 727.958L212.439 727.998L239.709 727.978C239.797 727.978 239.883 727.947 239.952 727.892C240.021 727.837 240.069 727.76 240.088 727.674C240.108 727.588 240.097 727.497 240.059 727.418C237.179 721.278 233.859 715.348 231.849 708.858C226.049 690.188 225.419 668.538 227.059 648.518C228.539 630.531 233.812 615.041 242.879 602.048C243.406 601.301 243.229 601.051 242.349 601.298C237.362 602.725 232.109 603.628 226.589 604.008C209.329 605.188 192.149 604.451 175.049 601.798ZM222.789 744.938L176.989 744.988L164.659 745.098C164.465 745.098 164.274 745.14 164.1 745.221C163.925 745.302 163.771 745.421 163.649 745.568C156.089 754.508 148.589 762.038 139.249 767.968C138.469 768.461 138.542 768.711 139.469 768.718L156.889 768.828L252.749 768.818C260.109 768.858 267.559 768.855 275.099 768.808C276.206 768.801 277.269 768.665 278.289 768.398C278.709 768.285 278.732 768.118 278.359 767.898C268.546 762.031 260.359 754.481 253.799 745.248C253.572 744.935 253.266 744.781 252.879 744.788ZM86.8189 800.748L255.819 800.808L353.109 800.688C353.226 800.687 353.341 800.651 353.437 800.584C353.534 800.517 353.608 800.422 353.649 800.312C353.69 800.202 353.697 800.082 353.669 799.968C352.002 793.395 347.412 788.538 339.899 785.398L239.059 785.248C221.492 784.995 203.922 784.911 186.349 784.998C151.302 785.178 116.719 785.111 82.5989 784.798C73.5889 784.718 65.6689 791.198 63.5189 799.828C63.4885 799.952 63.4965 800.082 63.5417 800.201C63.5869 800.32 63.6672 800.423 63.7721 800.496C63.8769 800.568 64.0014 800.608 64.1289 800.608Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape1&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6223046875 4.3066710451255)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.17 93.3591L341.7 94.8091C341.347 94.9025 341.043 95.0758 340.79 95.3291C334.81 101.209 327.56 101.079 319.06 100.739C316.15 100.619 313.98 99.6891 312.72 96.9491C310.21 91.4791 305.03 84.9891 298.07 88.5091C296.217 89.4491 294.677 90.6225 293.45 92.0291C288.01 98.2791 282.29 103.559 274.1 105.299C270.267 106.112 266.1 106.416 261.6 106.209C253.04 105.819 244.67 101.199 239.15 94.8491C232.37 87.0391 226.88 84.2491 219.24 92.9691C214.89 97.9391 209.89 101.049 202.97 101.219C196.37 101.379 189.917 101.426 183.61 101.359C182.93 101.352 182.43 100.989 182.11 100.269C182.01 100.04 181.975 99.7876 182.008 99.5391C182.042 99.2906 182.143 99.0554 182.3 98.8591C183.04 97.9325 183.813 97.0725 184.62 96.2791C187.09 93.8491 185.64 89.9291 183.51 87.8291C180.65 85.0091 175.91 85.9891 173.39 88.9391C172.23 90.2925 171.17 91.6391 170.21 92.9791C163.5 102.299 152.67 101.929 142.47 100.679C134.9 99.7591 131.64 94.3891 126.62 89.6591C123.633 86.8525 120.593 86.8391 117.5 89.6191C112.63 93.9791 108.24 99.7591 102.47 102.719C88.07 110.129 72.61 106.679 62.57 94.0391C58.62 89.0591 52.95 85.2191 47.21 90.7591C44.54 93.3491 43.94 96.9991 40.53 99.0891C36.59 101.509 29.55 101.139 24.26 101.029C18.64 100.899 13.25 100.999 9.85 97.1991C7.82 94.9191 4 93.8291 2.11 96.9691C1.02333 98.7691 0.446667 98.6225 0.38 96.5291C0.366667 95.9891 0.24 95.0925 0 93.8391C0.253333 85.8991 3.11667 79.1925 8.59 73.7191C15.9033 66.4058 24.84 63.4458 35.4 64.8391C36.2533 64.9458 36.6367 65.4325 36.55 66.2991C36.0033 71.8391 38.0767 75.8691 42.77 78.3891C46.73 80.5191 51.92 79.4891 55.07 76.3591C59.07 72.3691 59.28 66.6491 62.67 62.1391C69.49 53.0591 78.3867 48.2825 89.36 47.8091C91.4067 47.7225 93.5333 48.0125 95.74 48.6791C96.0733 48.7791 96.3467 48.9658 96.56 49.2391C97.92 50.9291 98.81 52.9691 100.32 54.5791C104.433 58.9525 109.323 60.1158 114.99 58.0691C120.4 56.1291 122.62 50.7691 122.7 45.2291C122.76 40.7958 123.827 36.2291 125.9 31.5291C140.46 -1.44087 182.17 -10.4309 209.26 13.5491C218.34 21.5825 223.667 30.9991 225.24 41.7991C226.4 49.7891 234.22 53.9291 241.37 49.3691C244.58 47.3291 247.13 44.1191 250.47 42.6191C261.863 37.4791 272.687 37.3558 282.94 42.2491C291.293 46.2291 297.263 52.4958 300.85 61.0491C303.07 66.3591 306.13 69.9691 312.5 70.1891C316.767 70.3358 320.273 68.8458 323.02 65.7191C323.166 65.5546 323.357 65.4352 323.571 65.3751C323.785 65.3149 324.014 65.3163 324.23 65.3791C336.65 69.1091 347.03 79.8291 347.17 93.3591Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape2&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6211575655465 7.33540715628013)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.203 7.20842C347.509 15.0284 344.683 21.2384 338.723 25.8384C337.243 26.9851 335.446 27.5718 333.333 27.5984C326.179 27.6784 319.159 27.7518 312.273 27.8184C310.053 27.8384 308.413 26.8684 307.333 24.9584C307.159 24.651 307.07 24.3028 307.074 23.9484C307.077 23.594 307.173 23.2458 307.353 22.9384C309.706 18.9451 308.913 15.9118 304.973 13.8384C302.553 12.5718 300.179 13.0884 297.853 15.3884C293.353 19.8484 286.493 27.5784 279.663 27.5984C270.883 27.6184 261.953 27.6151 252.873 27.5884C246.053 27.5784 239.713 22.4684 235.033 17.5684C231.633 13.9984 228.093 11.2484 222.953 14.3584C219.153 16.6584 218.973 22.2484 221.903 25.1784C222.045 25.3214 222.137 25.5067 222.166 25.706C222.195 25.9053 222.159 26.108 222.062 26.2834C221.966 26.4588 221.815 26.5975 221.633 26.6784C220.199 27.3318 218.603 27.6551 216.843 27.6484C189.723 27.5018 162.073 27.5784 133.893 27.8784C132.419 27.8984 131.099 27.4284 129.933 26.4684C129.567 26.1723 129.332 25.7446 129.278 25.2775C129.224 24.8105 129.355 24.3403 129.643 23.9684C130.393 22.9984 131.193 21.9984 131.193 20.7084C131.199 16.5284 129.253 14.0784 125.353 13.3584C123.123 12.9384 121.363 13.8184 119.863 15.3684C115.523 19.8484 108.003 27.5184 101.323 27.5684C91.976 27.6218 82.8393 27.6051 73.9126 27.5184C68.8426 27.4584 62.8326 22.0584 59.9726 18.4284C56.9226 14.5584 52.8126 11.2584 48.3326 15.6784C45.9126 18.0718 45.646 20.7284 47.5326 23.6484C47.746 23.9818 47.7793 24.3351 47.6326 24.7084C47.0826 26.0584 45.9526 27.6284 44.3126 27.6284C32.766 27.6484 22.5426 27.6451 13.6426 27.6184C10.6026 27.6051 8.0093 26.3851 5.86263 23.9584C1.66263 19.2118 -0.280704 13.7884 0.0326292 7.68842C0.272629 8.94175 0.399296 9.83842 0.412629 10.3784C0.479296 12.4718 1.05596 12.6184 2.14263 10.8184C4.03263 7.67842 7.85263 8.76842 9.88263 11.0484C13.2826 14.8484 18.6726 14.7484 24.2926 14.8784C29.5826 14.9884 36.6226 15.3584 40.5626 12.9384C43.9726 10.8484 44.5726 7.19842 47.2426 4.60842C52.9826 -0.931581 58.6526 2.90842 62.6026 7.88842C72.6426 20.5284 88.1026 23.9784 102.503 16.5684C108.273 13.6084 112.663 7.82842 117.533 3.46842C120.626 0.688419 123.666 0.701752 126.653 3.50842C131.673 8.23842 134.933 13.6084 142.503 14.5284C152.703 15.7784 163.533 16.1484 170.243 6.82842C171.203 5.48842 172.263 4.14175 173.423 2.78842C175.943 -0.161581 180.683 -1.14158 183.543 1.67842C185.673 3.77842 187.123 7.69842 184.653 10.1284C183.846 10.9218 183.073 11.7818 182.333 12.7084C182.175 12.9047 182.074 13.1399 182.041 13.3884C182.007 13.6369 182.043 13.8894 182.143 14.1184C182.463 14.8384 182.963 15.2018 183.643 15.2084C189.949 15.2751 196.403 15.2284 203.003 15.0684C209.923 14.8984 214.923 11.7884 219.273 6.81842C226.913 -1.90158 232.403 0.888419 239.183 8.69842C244.703 15.0484 253.073 19.6684 261.633 20.0584C266.133 20.2651 270.299 19.9618 274.133 19.1484C282.323 17.4084 288.043 12.1284 293.483 5.87842C294.709 4.47175 296.249 3.29842 298.103 2.35842C305.063 -1.16158 310.243 5.32842 312.753 10.7984C314.013 13.5384 316.183 14.4684 319.093 14.5884C327.593 14.9284 334.843 15.0584 340.823 9.17842C341.076 8.92509 341.379 8.75175 341.733 8.65842Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape3&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.7941352600339 9.3230859375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M17.6779 0C16.5513 11.84 15.9213 19.36 15.7879 22.56C15.3079 33.9733 14.6346 46.28 13.7679 59.48C13.6013 62.04 13.1046 63.7467 12.2779 64.6C8.55793 68.45 -0.30207 67.53 0.00793038 61.06C1.34793 33.3133 2.02793 12.9867 2.04793 0.08Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape4&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9413128810975 9.32414062500001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M201.657 0.05C201.63 7.10333 201.687 11.5967 201.827 13.53C203.28 33.53 204.617 53.6 205.837 73.74L186.487 73.78L193.557 73.61C193.714 73.6076 193.867 73.5609 193.998 73.4752C194.129 73.3896 194.234 73.2685 194.299 73.126C194.364 72.9835 194.388 72.8254 194.367 72.67C193.367 64.75 192.894 56.7733 192.947 48.74C196.9 43.82 196.69 38.93 192.317 34.07C191.537 32.47 191.137 31.2867 191.117 30.52C190.984 25.7933 191.01 21.2667 191.197 16.94C191.213 16.5684 191.128 16.1993 190.951 15.872C190.773 15.5446 190.51 15.2711 190.189 15.0807C189.868 14.8902 189.501 14.7897 189.127 14.79L153.317 14.9C152.777 12.9667 151.747 11.28 150.227 9.84C148.927 8.60667 147.257 7.7 145.217 7.12C138.364 5.17333 133.557 7.71667 130.797 14.75C116.39 14.8967 101.944 14.9467 87.4571 14.9C61.1271 14.81 34.7871 15.13 8.5371 15.06C6.00377 15.0533 4.15377 14.7633 2.9871 14.19C0.773767 13.11 -0.209566 11.2233 0.0371003 8.53C0.150434 7.29667 0.770434 4.45333 1.8971 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape5&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.5460546875 9.32519283839548)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M3.69 73.6301L0 0.0700704L9.97 7.03745e-05C10.1004 -0.00175254 10.2289 0.031869 10.3421 0.0974247C10.4553 0.16298 10.5492 0.258107 10.6139 0.372872C10.6786 0.487637 10.7118 0.617903 10.71 0.75007C10.55 11.1234 10.7367 21.0567 11.27 30.5501C12.07 44.8301 12.51 58.8001 13.82 72.9701C13.8293 73.0668 13.8114 73.1643 13.7681 73.2514C13.7249 73.3384 13.6581 73.4116 13.5754 73.4627C13.4926 73.5137 13.3972 73.5405 13.3 73.5401Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape6&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.3825550063776 9.3230859375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M13.7551 0.08C13.7351 12.9867 13.0551 33.3133 11.7151 61.06C11.4051 67.53 20.2651 68.45 23.9851 64.6C24.8118 63.7467 25.3084 62.04 25.4751 59.48C26.3418 46.28 27.0151 33.9733 27.4951 22.56C27.6284 19.36 28.2584 11.84 29.3851 0L46.2351 0.03C45.1084 4.48333 44.4884 7.32667 44.3751 8.56C44.1284 11.2533 45.1118 13.14 47.3251 14.22C48.4918 14.7933 50.3418 15.0833 52.8751 15.09C79.1251 15.16 105.465 14.84 131.795 14.93C146.282 14.9767 160.728 14.9267 175.135 14.78C174.568 20.8133 176.498 24.9267 180.925 27.12C183.338 28.3133 185.805 28.72 188.325 28.34C194.755 27.36 198.095 21.26 197.655 14.93L233.465 14.82C233.839 14.8197 234.206 14.9202 234.527 15.1107C234.848 15.3011 235.111 15.5746 235.289 15.902C235.466 16.2293 235.551 16.5984 235.535 16.97C235.348 21.2967 235.322 25.8233 235.455 30.55C235.475 31.3167 235.875 32.5 236.655 34.1C232.788 31.5133 229.168 30.99 225.795 32.53C211.935 38.83 224.195 59.55 237.285 48.77C237.232 56.8033 237.705 64.78 238.705 72.7C238.726 72.8554 238.702 73.0135 238.637 73.156C238.572 73.2985 238.467 73.4196 238.336 73.5052C238.205 73.5909 238.052 73.6376 237.895 73.64L230.825 73.81L0.605102 73.79C0.205102 73.79 0.00510204 73.59 0.00510204 73.19C-0.0282313 69.6433 0.101769 66.03 0.395102 62.35C2.00177 42.09 2.92177 21.6067 3.1551 0.9C3.16177 0.353333 3.43844 0.08 3.9851 0.08ZM127.005 36.5C127.005 34.413 126.456 32.3624 125.412 30.555C124.369 28.7476 122.867 27.2464 121.06 26.203C119.253 25.1595 117.202 24.61 115.115 24.61C111.963 24.61 108.937 25.8635 106.708 28.0925C104.479 30.3215 103.225 33.3478 103.225 36.5C103.225 39.6522 104.479 42.6785 106.708 44.9075C108.937 47.1365 111.963 48.39 115.115 48.39C117.202 48.39 119.253 47.8405 121.06 46.797C122.867 45.7536 124.369 44.2524 125.412 42.445C126.456 40.6376 127.005 38.587 127.005 36.5ZM75.9704 37.4184C76.0574 34.3019 74.8637 31.2741 72.6541 29.007C70.4445 26.7398 67.3954 25.4143 64.1835 25.3246C62.057 25.2652 59.9523 25.7501 58.0818 26.7303C56.2114 27.7105 54.6403 29.152 53.5271 30.9092C52.414 32.6664 51.7974 34.6782 51.7398 36.7416C51.6528 39.8581 52.8465 42.8859 55.0561 45.153C57.2657 47.4202 60.3148 48.7457 63.5267 48.8354C65.6532 48.8948 67.7579 48.4099 69.6284 47.4297C71.4988 46.4495 73.0699 45.008 74.1831 43.2508C75.2962 41.4936 75.9128 39.4818 75.9704 37.4184ZM183.874 50.7982C183.856 49.4819 183.468 48.1937 182.749 47.0635C182.03 45.9334 181.006 45.0007 179.779 44.3595C178.552 43.7184 177.166 43.3911 175.76 43.4107C173.637 43.4404 171.61 44.2595 170.128 45.6863C168.646 47.1131 167.828 49.0336 167.856 51.0218C167.874 52.3381 168.262 53.6263 168.981 54.7565C169.7 55.8866 170.725 56.8193 171.951 57.4605C173.178 58.1016 174.564 58.4289 175.97 58.4093C178.093 58.3796 180.121 57.5605 181.603 56.1337C183.084 54.7069 183.902 52.7864 183.874 50.7982Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape7&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.0305953125001 9.32554685349047)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.0064 0.0100006L9.3364 6.11826e-07C9.61064 -0.000292647 9.87453 0.104847 10.0721 0.293135C10.2697 0.481423 10.3861 0.738544 10.3964 1.01C11.3097 24.8167 12.6431 48.6333 14.3964 72.46C14.4564 73.2867 14.0697 73.7 13.2364 73.7L4.1864 73.7C2.9664 53.56 1.62973 33.49 0.1764 13.49C0.0364 11.5567 -0.0202667 7.06333 0.0064 0.0100006Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape8&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1631696428572 9.32765624999999)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M10.891 0L14.581 73.56L5.85095 73.67C5.70139 73.6731 5.55452 73.6294 5.43088 73.5452C5.30724 73.461 5.21287 73.3403 5.16095 73.2C4.86095 72.3733 4.66095 71.5033 4.56095 70.59C2.05429 47.6433 0.534286 24.6667 0.000952381 1.66C-0.0257143 0.566667 0.507619 0.02 1.60095 0.02Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape9&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.5362571970961 9.55219950584632)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.6165 8.41299C23.0565 14.743 19.7165 20.843 13.2865 21.823C10.7665 22.203 8.2998 21.7963 5.88646 20.603C1.4598 18.4097 -0.470205 14.2963 0.0964619 8.26299C2.85646 1.22966 7.66313 -1.31367 14.5165 0.632992C16.5565 1.21299 18.2265 2.11966 19.5265 3.35299C21.0465 4.79299 22.0765 6.47966 22.6165 8.41299Z&quot;&gt;&lt;/path&gt; &lt;circle id=&quot;shape10&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.0115625 10.18828125)&quot; r=&quot;11.89&quot; cx=&quot;11.89&quot; cy=&quot;11.89&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape11&quot; transform=&quot;matrix(0.0351425431068875 0.000981620111375468 -0.000981620111375468 0.0351425431068875 14.2130771675543 10.2015061448131)&quot; rx=&quot;12.12&quot; ry=&quot;11.76&quot; cx=&quot;12.12&quot; cy=&quot;11.76&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape12&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 20.1057469902912 10.4364122450525)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M16.9732 2.43205C21.3465 7.29205 21.5565 12.1821 17.6032 17.1021C4.5132 27.8821 -7.7468 7.16205 6.1132 0.862052C9.48653 -0.677948 13.1065 -0.154615 16.9732 2.43205Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape13&quot; transform=&quot;matrix(0.0351528231097021 -0.000490857902548076 0.000490857902548076 0.0351528231097021 18.2800569526222 10.8531762234766)&quot; rx=&quot;8.01&quot; ry=&quot;7.5&quot; cx=&quot;8.01&quot; cy=&quot;7.5&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape14&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.47390625 12.828515625)&quot; fill=&quot;rgb(8,7,7)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0 300.33C1.52 298.69 3.53 298.057 6.03 298.43C6.10297 298.443 6.17377 298.447 6.24 298.44C6.65333 298.413 6.88667 298.26 6.94 297.98C7 297.66 7.19333 297.493 7.52 297.48L10.29 297.39C10.4233 297.383 10.5567 297.367 10.69 297.34C11.0167 297.267 11.1733 297.127 11.16 296.92C11.1467 296.7 11.2467 296.563 11.46 296.51C12.1467 296.337 12.7433 295.997 13.25 295.49C13.49 295.257 13.58 294.973 13.52 294.64C13.1333 292.653 12.8767 290.647 12.75 288.62C12.69 287.79 12.27 287.35 11.7 286.83C11.4533 286.603 11.3933 286.337 11.52 286.03C11.8533 285.197 11.6767 284.573 10.99 284.16C10.7367 284 10.46 283.923 10.16 283.93L6.56 284.02C15.1 281.92 21.0833 280.04 24.51 278.38C27.5033 276.927 30.4033 275.357 33.21 273.67C33.319 273.603 33.3974 273.495 33.4282 273.371C33.4589 273.246 33.4397 273.115 33.3746 273.004C33.3096 272.894 33.2037 272.813 33.08 272.78C32.5067 272.62 31.9433 272.67 31.39 272.93C63.5767 260.003 88.4967 238.95 106.15 209.77C109.223 204.703 112.093 199 114.76 192.66C118.06 184.807 120.343 178.587 121.61 174C123.097 168.613 124.457 162.397 125.69 155.35C126.657 149.857 126.873 144.25 126.34 138.53C127.853 138.57 128.907 138.097 129.5 137.11C131.56 133.67 131.433 130.473 129.12 127.52C128.24 126.39 127.07 126.39 125.77 126.38C120.017 126.347 114.427 126.37 109 126.45C108.613 125.77 108.27 125.09 107.97 124.41C107.69 123.77 107.527 123.037 107.48 122.21C106.953 112.977 106.213 103.723 105.26 94.45C110.127 94.5633 114.617 94.5833 118.73 94.51C121.27 94.47 123.93 94.86 126 93.31C128.053 91.77 128.717 89.61 127.99 86.83C127.23 83.89 124.98 82.2967 121.24 82.05L120.9 72.32C124.973 70.3667 126.23 67.5767 124.67 63.95C123.697 61.6833 121.82 60.52 119.04 60.46C117.273 58.24 116.223 56.5633 115.89 55.43C113.43 47.1033 110.547 38.9133 107.24 30.86C106.947 30.1467 107 29.0333 107.4 27.52C109.087 27.4933 110.883 27.5267 112.79 27.62C115.45 27.7533 117.403 26.9667 118.65 25.26C121.02 22.01 120.02 17.98 116.55 16.23C115.597 15.75 114.193 15.5133 112.34 15.52C107.533 15.54 102.823 15.4767 98.21 15.33C97.6033 13.9433 96.9433 12.6033 96.23 11.31C94.38 7.96 93.99 4.82 92.56 1.46C92.4467 1.18667 92.5067 0.963333 92.74 0.79L93.19 0.46C93.4567 0.273333 93.4267 0.176667 93.1 0.17L55.31 0L131.2 0.2C131.371 0.200762 131.536 0.26037 131.671 0.369176C131.805 0.477981 131.9 0.629779 131.94 0.8C133.38 7.23333 134.593 14.0833 135.58 21.35C139.67 51.61 143.36 78.87 145.72 107.57C147.27 126.44 146.89 145.44 143.29 163.8C138.28 189.4 127.86 214.54 111.86 234.74C90.34 261.87 61.85 283.26 28.89 293.96C20.1567 296.793 10.5267 298.917 0 300.33Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape15&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.2758764491296 12.828515625)&quot; fill=&quot;rgb(16,11,10)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M231.61 0L269.4 0.17C269.726 0.176667 269.756 0.273333 269.49 0.46L269.04 0.79C268.806 0.963333 268.746 1.18667 268.86 1.46C270.29 4.82 270.68 7.96 272.53 11.31C273.243 12.6033 273.903 13.9433 274.51 15.33C268.76 17.07 269.07 27.78 275.82 27.53C278.38 27.43 281.006 27.4267 283.7 27.52C283.3 29.0333 283.246 30.1467 283.54 30.86C286.846 38.9133 289.73 47.1033 292.19 55.43C292.523 56.5633 293.573 58.24 295.34 60.46C290.98 60.76 286.806 61.0267 282.82 61.26C277.7 61.56 274.45 67.2 278.08 71.26C278.86 72.1333 280.413 72.6 282.74 72.66C287.386 72.7733 292.206 72.66 297.2 72.32L297.54 82.05C293.013 81.9567 288.443 81.9633 283.83 82.07C281.84 82.11 280.61 82.75 279.5 84.26C276.44 88.44 277.126 91.8367 281.56 94.45C282.513 103.723 283.253 112.977 283.78 122.21C283.826 123.037 283.99 123.77 284.27 124.41C284.57 125.09 284.913 125.77 285.3 126.45C282.193 127.497 280.633 129.463 280.62 132.35C280.613 134.79 281.763 136.753 284.07 138.24C281.93 156.593 277.493 173.123 270.76 187.83C261.606 207.817 247.22 225.063 227.6 239.57C218.546 246.263 208.406 252.023 197.18 256.85C191.52 259.28 187.21 264.45 191.61 270.42C195.03 275.03 202.58 274.56 207.69 272.93C208.243 272.67 208.806 272.62 209.38 272.78C209.503 272.813 209.609 272.894 209.674 273.004C209.739 273.115 209.758 273.246 209.728 273.371C209.697 273.495 209.619 273.603 209.51 273.67C206.703 275.357 203.803 276.927 200.81 278.38C197.383 280.04 191.4 281.92 182.86 284.02C165.386 287.427 148.786 288.113 133.06 286.08C116.433 283.94 99.2895 279.17 81.6295 271.77C75.1162 269.043 68.6828 266.14 62.3295 263.06C54.3762 259.2 46.8962 254.463 39.8895 248.85C40.5695 248.377 41.3595 247.947 42.2595 247.56C44.5695 246.55 46.3695 244.3 44.1695 241.99C29.1962 226.303 18.1928 209.247 11.1595 190.82C1.95285 166.687 -1.55715 141.62 0.629514 115.62C2.01618 99.0867 3.45618 82.5733 4.94951 66.08C5.49618 59.9533 6.20618 53.32 7.07951 46.18C8.95285 30.8733 10.7762 15.5733 12.5495 0.28ZM230.747 11.7302C228.758 9.7412 226.058 8.62261 223.245 8.62261C220.432 8.62261 217.731 9.7412 215.742 11.7302L213.89 13.5829C211.901 15.5719 210.782 18.2724 210.782 21.0853C210.782 23.8982 211.901 26.5987 213.89 28.5877L215.092 29.7898C217.081 31.7788 219.781 32.8974 222.594 32.8974C225.407 32.8974 228.108 31.7788 230.097 29.7898L231.949 27.9371C233.938 25.9481 235.057 23.2476 235.057 20.4347C235.057 17.6218 233.938 14.9213 231.949 12.9323ZM47.1595 186.78C39.7128 170.84 35.7195 154.833 35.1795 138.76C34.9528 131.94 35.0895 124.72 35.5895 117.1C37.1495 93.44 39.2662 67.4833 41.9395 39.23C42.3395 35.0167 42.6262 30.7267 42.7995 26.36C43.4195 10.9 25.2095 12.45 24.4195 25.69C23.0462 48.79 21.1195 72.2233 18.6395 95.99C17.6595 105.337 16.9995 114.63 16.6595 123.87C16.3328 132.65 16.6595 140.653 17.6395 147.88C19.5062 161.707 22.9728 175.147 28.0395 188.2C29.1795 191.153 30.6662 194.07 32.4995 196.95C35.2995 201.37 41.5395 202.72 45.3395 198.89C48.7328 195.483 49.3395 191.447 47.1595 186.78ZM87.1943 37.8021C86.8236 36.4743 85.902 35.3574 84.6342 34.6994C83.3663 34.0413 81.8534 33.8945 80.4311 34.2916C79.0088 34.6887 77.7908 35.598 77.0472 36.8177C76.3037 38.0374 76.094 39.4701 76.4647 40.7979C76.8355 42.1257 77.757 43.2426 79.0249 43.9006C80.2927 44.5587 81.8056 44.7055 83.2279 44.3084C84.6502 43.9113 85.8682 43.002 86.6118 41.7823C87.3554 40.5626 87.565 39.1299 87.1943 37.8021ZM242.9 63.3691C242.905 60.5116 242.14 57.7024 240.682 55.2252C239.224 52.7479 237.124 50.6888 234.594 49.2556C232.064 47.8225 229.192 47.0651 226.268 47.06C223.344 47.0549 220.469 47.8022 217.934 49.2266C215.399 50.6509 213.292 52.7027 211.826 55.1748C210.359 57.6469 209.585 60.4534 209.58 63.3109C209.575 66.1684 210.34 68.9776 211.797 71.4548C213.255 73.9321 215.355 75.9912 217.885 77.4244C220.415 78.8575 223.287 79.6149 226.211 79.62C229.135 79.6251 232.01 78.8778 234.545 77.4534C237.08 76.0291 239.187 73.9773 240.653 71.5052C242.12 69.0331 242.895 66.2266 242.9 63.3691ZM85.9041 71.8823C88.1531 72.912 90.7367 72.9736 93.0816 72.0534C95.4266 71.1333 97.3455 69.3049 98.4127 66.9739C99.1193 65.4306 99.4215 63.7348 99.2889 62.0574C99.1563 60.38 98.5935 58.7796 97.6572 57.4176C96.721 56.0556 95.4439 54.9794 93.9549 54.2977C91.7059 53.268 89.1223 53.2064 86.7774 54.1266C84.4325 55.0467 82.5135 56.8751 81.4463 59.2061C80.7398 60.7494 80.4375 62.4452 80.5701 64.1226C80.7028 65.8 81.2656 67.4004 82.2018 68.7624C83.1381 70.1244 84.4151 71.2006 85.9041 71.8823ZM60.6086 105.171C63.2448 106.638 66.3725 106.974 69.2978 106.105C72.223 105.236 74.7122 103.231 76.213 100.535C77.7138 97.8381 78.1063 94.6659 77.3035 91.7217C76.5007 88.7775 74.5666 86.2966 71.9304 84.8293C69.2942 83.362 66.1665 83.0257 63.2413 83.8948C60.316 84.7639 57.8268 86.7691 56.326 89.4655C54.8252 92.1619 54.4327 95.3341 55.2355 98.2783C56.0384 101.222 57.9724 103.703 60.6086 105.171ZM187.08 98.11C187.08 96.1959 186.318 94.3582 184.965 93.0047C183.611 91.6512 181.774 90.89 179.86 90.89C177.945 90.89 176.108 91.6512 174.754 93.0047C173.401 94.3582 172.64 96.1959 172.64 98.11C172.64 100.024 173.401 101.862 174.754 103.215C176.108 104.569 177.945 105.33 179.86 105.33C181.127 105.33 182.372 104.996 183.47 104.363C184.567 103.729 185.479 102.817 186.112 101.72C186.746 100.623 187.08 99.3773 187.08 98.11ZM234.564 99.0027C233.705 97.863 232.551 96.9774 231.217 96.4351C229.883 95.8929 228.416 95.7129 226.964 95.9133C225.513 96.1138 224.127 96.6877 222.947 97.5771C221.766 98.4665 220.833 99.6405 220.24 100.981C219.647 102.321 219.416 103.78 219.57 105.212C219.723 106.644 220.256 107.998 221.115 109.137C221.974 110.277 223.128 111.163 224.462 111.705C225.796 112.247 227.263 112.427 228.715 112.227C230.166 112.026 231.552 111.452 232.732 110.563C233.913 109.673 234.846 108.499 235.439 107.159C236.032 105.819 236.263 104.36 236.109 102.928C235.956 101.496 235.423 100.142 234.564 99.0027ZM47.9695 214.56C45.1695 220.83 50.0195 225.32 54.0495 229.45C57.6895 233.19 61.8995 236.09 66.6995 232.86C71.8895 229.38 72.0595 223.24 67.9795 218.66C64.2095 214.41 60.6395 209.6 54.3295 209.99C51.4095 210.17 49.1195 211.99 47.9695 214.56Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape16&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.8026079545455 12.838359375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M26.0114 0C24.238 15.2933 22.4147 30.5933 20.5414 45.9C19.668 53.04 18.958 59.6733 18.4114 65.8C16.918 82.2933 15.478 98.8067 14.0914 115.34C11.9047 141.34 15.4147 166.407 24.6214 190.54C31.6547 208.967 42.658 226.023 57.6314 241.71C59.8314 244.02 58.0314 246.27 55.7214 247.28C54.8214 247.667 54.0314 248.097 53.3514 248.57C51.9014 250.07 52.3314 253.14 52.3514 255.14C31.6214 235.93 17.0114 211.99 8.66137 185.13C2.48804 165.29 -0.385293 145.337 0.0413737 125.27C0.691374 94.91 5.82137 63.64 9.38137 32.5C9.99471 27.1467 10.7014 21.75 11.5014 16.31C12.3214 10.7767 13.5247 5.69667 15.1114 1.07C15.2107 0.778294 15.3987 0.524438 15.6494 0.343583C15.9001 0.162728 16.2013 0.0636261 16.5114 0.06Z&quot;&gt;&lt;/path&gt; &lt;rect id=&quot;shape17&quot; transform=&quot;matrix(0.0248592227760896 -0.0248592227760896 0.0248592227760896 0.0248592227760896 19.531681996495 13.569794617477)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; width=&quot;23.84&quot; height=&quot;22.92&quot; rx=&quot;10.61&quot; ry=&quot;10.61&quot;&gt;&lt;/rect&gt; &lt;path id=&quot;shape18&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.857255859375 13.3649990428515)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M30.6225 171.52C32.8025 176.187 32.1958 180.223 28.8025 183.63C25.0025 187.46 18.7625 186.11 15.9625 181.69C14.1292 178.81 12.6425 175.893 11.5025 172.94C6.43583 159.887 2.96917 146.447 1.1025 132.62C0.1225 125.393 -0.204167 117.39 0.1225 108.61C0.4625 99.37 1.1225 90.0767 2.1025 80.73C4.5825 56.9634 6.50917 33.53 7.8825 10.43C8.6725 -2.80997 26.8825 -4.35997 26.2625 11.1C26.0892 15.4667 25.8025 19.7567 25.4025 23.97C22.7292 52.2234 20.6125 78.18 19.0525 101.84C18.5525 109.46 18.4158 116.68 18.6425 123.5C19.1825 139.573 23.1758 155.58 30.6225 171.52Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape19&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.7841415488515 13.3674609375)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.0522 0C8.66553 0.146667 13.3755 0.21 18.1822 0.19C20.0355 0.183333 21.4389 0.42 22.3922 0.9C25.8622 2.65 26.8622 6.68 24.4922 9.93C23.2455 11.6367 21.2922 12.4233 18.6322 12.29C16.7255 12.1967 14.9289 12.1633 13.2422 12.19C10.5489 12.0967 7.9222 12.1 5.3622 12.2C-1.3878 12.45 -1.6978 1.74 4.0522 0Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape20&quot; transform=&quot;matrix(0.0338611839889802 -0.00945421244350544 0.00945421244350544 0.0338611839889802 14.9149266129752 14.0867380565676)&quot; rx=&quot;5.57&quot; ry=&quot;5.2&quot; cx=&quot;5.57&quot; cy=&quot;5.2&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape21&quot; transform=&quot;matrix(0.0351561964539828 6.13592003636124e-05 -6.13592003636124e-05 0.0351561964539828 19.6449060698586 14.4819473774511)&quot; rx=&quot;16.66&quot; ry=&quot;16.28&quot; cx=&quot;16.66&quot; cy=&quot;16.28&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape22&quot; transform=&quot;matrix(-0.0146348716029047 0.031965331958686 -0.031965331958686 -0.0146348716029047 15.8772166930746 14.8739620295146)&quot; rx=&quot;9.67&quot; ry=&quot;9.33&quot; cx=&quot;9.67&quot; cy=&quot;9.33&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape23&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.997793706651 14.9540625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M18.805 0C21.585 0.06 23.4616 1.22333 24.435 3.49C25.995 7.11667 24.7383 9.90667 20.665 11.86C15.6716 12.2 10.8516 12.3133 6.20498 12.2C3.87831 12.14 2.32498 11.6733 1.54498 10.8C-2.08502 6.74 1.16498 1.1 6.28498 0.8C10.2716 0.566667 14.445 0.3 18.805 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape24&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.0361349190606 15.7107890625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M19.9144 0.0653333C23.6544 0.312 25.9044 1.90533 26.6644 4.84533C27.3911 7.62533 26.7277 9.78533 24.6744 11.3253C22.6044 12.8753 19.9444 12.4853 17.4044 12.5253C13.2911 12.5987 8.80105 12.5787 3.93438 12.4653C-0.498949 9.852 -1.18562 6.45533 1.87438 2.27533C2.98438 0.765333 4.21438 0.125333 6.20438 0.0853333C10.8177 -0.0213333 15.3877 -0.028 19.9144 0.0653333Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape25&quot; transform=&quot;matrix(-0.0170977282180133 0.0307185547160906 -0.0307185547160906 -0.0170977282180133 15.1542587716268 16.0053675452257)&quot; rx=&quot;11.64&quot; ry=&quot;11.38&quot; cx=&quot;11.64&quot; cy=&quot;11.38&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;circle id=&quot;shape26&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.345234375 16.0238671875)&quot; r=&quot;7.22&quot; cx=&quot;7.22&quot; cy=&quot;7.22&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape27&quot; transform=&quot;matrix(0.0280770296501001 -0.0211575594076892 0.0211575594076892 0.0280770296501001 19.8774398273616 16.4371069616574)&quot; rx=&quot;8.42&quot; ry=&quot;8.13&quot; cx=&quot;8.42&quot; cy=&quot;8.13&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape28&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1414052368516 17.2710454963236)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.02 12.1647L3.45003 11.8747C1.14336 10.388 -0.00663785 8.42471 2.88184e-05 5.98471C0.0133622 3.09804 1.57336 1.13137 4.68003 0.0847059C10.1067 0.00470588 15.6967 -0.0186275 21.45 0.0147059C22.75 0.0247059 23.92 0.0247059 24.8 1.15471C27.1134 4.10804 27.24 7.30471 25.18 10.7447C24.5867 11.7314 23.5334 12.2047 22.02 12.1647Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape29&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.9485123620206 17.688515625)&quot; fill=&quot;rgb(15,11,8)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M94.2701 0L112.84 0.29C113.373 6.01 113.157 11.6167 112.19 17.11C110.957 24.1567 109.597 30.3733 108.11 35.76C106.843 40.3467 104.56 46.5667 101.26 54.42C98.5934 60.76 95.7234 66.4633 92.6501 71.53C74.9968 100.71 50.0768 121.763 17.8901 134.69C12.7801 136.32 5.23009 136.79 1.81009 132.18C-2.58991 126.21 1.72009 121.04 7.38009 118.61C18.6068 113.783 28.7468 108.023 37.8001 101.33C57.4201 86.8233 71.8068 69.5767 80.9601 49.59C87.6934 34.8833 92.1301 18.3533 94.2701 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape30&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9331058615201 20.210194296345)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.830544 4.59225C1.98054 2.02225 4.27054 0.202251 7.19054 0.0222511C13.5005 -0.367749 17.0705 4.44225 20.8405 8.69225C24.9205 13.2723 24.7505 19.4123 19.5605 22.8923C14.7605 26.1223 10.5505 23.2223 6.91054 19.4823C2.88054 15.3523 -1.96946 10.8623 0.830544 4.59225Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape31&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.6404577789765 21.5771484375)&quot; fill=&quot;rgb(15,11,8)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.07476 0C8.08142 5.61333 15.5614 10.35 23.5148 14.21C29.8681 17.29 36.3014 20.1933 42.8148 22.92C60.4748 30.32 77.6181 35.09 94.2448 37.23C109.971 39.2633 126.571 38.5767 144.045 35.17L147.645 35.08C147.945 35.0733 148.221 35.15 148.475 35.31C149.161 35.7233 149.338 36.3467 149.005 37.18C148.878 37.4867 148.938 37.7533 149.185 37.98C149.755 38.5 150.175 38.94 150.235 39.77C150.361 41.7967 150.618 43.8033 151.005 45.79C151.065 46.1233 150.975 46.4067 150.735 46.64C150.228 47.1467 149.631 47.4867 148.945 47.66C148.731 47.7133 148.631 47.85 148.645 48.07C148.658 48.2767 148.501 48.4167 148.175 48.49C148.041 48.5167 147.908 48.5333 147.775 48.54L145.005 48.63C144.678 48.6433 144.485 48.81 144.425 49.13C144.371 49.41 144.138 49.5633 143.725 49.59C143.659 49.5967 143.588 49.5933 143.515 49.58C141.015 49.2067 139.005 49.84 137.485 51.48C124.278 53.2267 112.368 53.5833 101.755 52.55C80.2748 50.4633 60.3014 44.84 41.8348 35.68C35.8281 32.7 28.6481 28.54 20.2948 23.2C14.0414 19.2067 7.30142 13.6633 0.0747565 6.57C0.0547565 4.57 -0.375243 1.5 1.07476 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape32&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.548046875 24.3846604970638)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M37.39 126.792L36.84 125.732C36.6867 125.445 36.61 125.139 36.61 124.812L36.29 50.1519C39.97 50.1319 42.74 50.0419 44.93 47.3519C46.0567 45.9652 46.4067 44.4152 45.98 42.7019C44.81 38.0219 40.08 37.5119 35.72 37.6019L35.91 26.2919C40.16 26.9019 44.77 27.8519 48.81 25.9619C52.26 24.3519 53.31 20.2319 50.85 17.2519C48.51 14.4319 45.36 14.2119 41.99 14.2719C35.7567 14.3852 29.3167 14.4052 22.67 14.3319C19.49 14.3019 16.81 15.9619 15.14 18.6319C15.2 16.6619 12.86 15.6819 11.44 14.7519C10.6133 14.2119 9.90667 13.5852 9.32 12.8719C6.57333 9.53188 3.78 6.23188 0.94 2.97188C0.46 2.41855 0.146667 1.62521 0 0.591879C17.1 3.24521 34.28 3.98188 51.54 2.80188C57.06 2.42188 62.3133 1.51855 67.3 0.0918792C68.18 -0.154787 68.3567 0.0952125 67.83 0.841879C58.7633 13.8352 53.49 29.3252 52.01 47.3119C50.37 67.3319 51 88.9819 56.8 107.652C58.81 114.142 62.13 120.072 65.01 126.212C65.0485 126.291 65.0589 126.382 65.0394 126.468C65.02 126.554 64.9718 126.631 64.9029 126.686C64.834 126.741 64.7483 126.772 64.66 126.772Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape33&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.486355851717 24.3923298330305)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.75477 0.373729C1.90143 1.40706 2.21477 2.2004 2.69477 2.75373C5.53477 6.01373 8.3281 9.31373 11.0748 12.6537C11.6614 13.3671 12.3681 13.9937 13.1948 14.5337C14.6148 15.4637 16.9548 16.4437 16.8948 18.4137L16.5848 19.0537C15.9714 19.3604 15.6748 19.8204 15.6948 20.4337C15.8148 23.3437 16.3448 26.1237 18.0248 28.6937C19.9714 31.6737 22.1714 34.5471 24.6248 37.3137C19.6548 39.6737 18.5548 46.9937 24.3448 49.3137C24.1981 53.2071 24.2048 57.1237 24.3648 61.0637C24.5581 65.7371 24.5748 69.6437 24.4148 72.7837C24.2014 77.0371 23.9914 81.3304 23.7848 85.6637C23.1248 99.8304 19.6748 113.244 13.4348 125.904C13.2814 126.21 13.0314 126.384 12.6848 126.424L11.5948 126.534L3.79477 126.534C3.66373 126.534 3.5364 126.49 3.43437 126.408C3.33234 126.325 3.26171 126.21 3.23447 126.082C3.20722 125.954 3.22499 125.82 3.28477 125.704C16.0848 100.784 18.1148 71.0737 14.6948 43.5737C12.8014 28.3737 7.92143 14.0371 0.0547669 0.563729C0.0152725 0.50031 -0.00361813 0.426609 0.000572506 0.352292C0.00476314 0.277975 0.0318434 0.20644 0.0782619 0.147067C0.12468 0.0876949 0.188315 0.0431997 0.26082 0.0194171C0.333326 -0.0043654 0.411387 -0.00634806 0.484767 0.0137292Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape34&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.0617214476865 24.8861307529877)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M21.2988 12.0278C16.7455 11.8878 12.1288 11.8545 7.44881 11.9278C4.74215 11.9678 2.94548 11.7312 2.05881 11.2178C0.238812 10.1645 -0.374521 8.0945 0.218812 5.00784L0.528812 4.36784C2.19881 1.69784 4.87881 0.0378364 8.05881 0.0678364C14.7055 0.14117 21.1455 0.12117 27.3788 0.00783636C30.7488 -0.0521636 33.8988 0.167836 36.2388 2.98784C38.6988 5.96784 37.6488 10.0878 34.1988 11.6978C30.1588 13.5878 25.5488 12.6378 21.2988 12.0278Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape35&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.038091694079 25.0621875000001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.890947 0C0.297614 3.08667 0.910947 5.15667 2.73095 6.21C3.61761 6.72333 5.41428 6.96 8.12095 6.92C12.8009 6.84667 17.4176 6.88 21.9709 7.02L21.7809 18.33L8.93095 18.26C6.47761 15.4933 4.27761 12.62 2.33095 9.64C0.650947 7.07 0.120947 4.29 0.000947368 1.38C-0.0190526 0.766667 0.277614 0.306667 0.890947 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape36&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.2047130847683 25.704140625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.19149 0L17.0415 0.07C21.4015 -0.02 26.1315 0.49 27.3015 5.17C27.7282 6.88333 27.3782 8.43333 26.2515 9.82C24.0615 12.51 21.2915 12.6 17.6115 12.62L3.91149 12C-1.87851 9.68 -0.778506 2.36 4.19149 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape37&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.893984375 26.126015625)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M12.75 0L26.45 0.62L26.77 75.28C26.77 75.6067 26.8467 75.9133 27 76.2L27.55 77.26L0 77.22L1.09 77.11C1.43667 77.07 1.68667 76.8967 1.84 76.59C8.08 63.93 11.53 50.5167 12.19 36.35C12.3967 32.0167 12.6067 27.7233 12.82 23.47C12.98 20.33 12.9633 16.4233 12.77 11.75C12.61 7.81 12.6033 3.89333 12.75 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape38&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.22640625 29.4324536132813)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M29.96 24.0302C30.7067 23.5835 30.1467 23.1702 28.28 22.7902C27.96 22.7235 27.6733 22.5835 27.42 22.3702C24.9333 20.2235 22.8967 18.7069 21.31 17.8202C12.91 13.1069 5.80667 7.21687 0 0.150208L30.09 0.000208333C30.4767 -0.00645833 30.7833 0.146875 31.01 0.460208C37.57 9.69354 45.7567 17.2435 55.57 23.1102C55.9433 23.3302 55.92 23.4969 55.5 23.6102C54.48 23.8769 53.4167 24.0135 52.31 24.0202C44.77 24.0669 37.32 24.0702 29.96 24.0302Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape39&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.2706541442871 29.4394921875)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M38.2747 0C35.2147 4.74667 31.2681 10.0433 26.4347 15.89C23.4547 19.49 20.7014 22.14 18.1747 23.84L0.754727 23.73C-0.17194 23.7233 -0.245273 23.4733 0.534727 22.98C9.87473 17.05 17.3747 9.52 24.9347 0.58C25.0571 0.432797 25.211 0.314351 25.3856 0.233119C25.5601 0.151886 25.7511 0.109846 25.9447 0.11Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape40&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.909609375 29.437734375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M65.9 0C71.7067 7.06667 78.81 12.9567 87.21 17.67C88.7967 18.5567 90.8333 20.0733 93.32 22.22C93.5733 22.4333 93.86 22.5733 94.18 22.64C96.0467 23.02 96.6067 23.4333 95.86 23.88L0 23.89C2.52667 22.19 5.28 19.54 8.26 15.94C13.0933 10.0933 17.04 4.79667 20.1 0.05Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape41&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.6264334548969 30.8390367406574)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M175.558 0.450733C176.245 0.450733 176.568 0.567399 176.528 0.800733C176.494 1.0303 176.388 1.24303 176.226 1.40826C176.065 1.5735 175.855 1.68291 175.628 1.72073C171.935 2.3474 168.581 2.65073 165.568 2.63073C163.998 2.62073 162.798 3.35073 161.188 3.18073C160.808 3.14073 160.445 3.20407 160.098 3.37073L158.488 4.16073C158.195 4.30073 157.958 4.50407 157.778 4.77073C157.045 5.85073 156.111 6.47073 154.978 6.63073C153.258 6.87073 151.491 6.99073 149.678 6.99073C111.858 6.8974 73.5681 6.84073 34.8081 6.82073C28.6781 6.82073 24.4281 9.63073 23.3181 15.9507L0.628115 15.8107C0.50059 15.8104 0.376138 15.7713 0.2713 15.6987C0.166463 15.626 0.0861025 15.5233 0.0409006 15.404C-0.00430136 15.2848 -0.0122487 15.1546 0.0181151 15.0307C2.16812 6.40073 10.0881 -0.0792673 19.0981 0.00073271C53.2181 0.314066 87.8014 0.380733 122.848 0.200733C140.421 0.114066 157.991 0.197399 175.558 0.450733Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape42&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.4462109375 30.8548828125)&quot; fill=&quot;rgb(16,11,10)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M152.24 0L253.08 0.15C253.047 2.17 252.56 3.72667 251.62 4.82C250.867 5.69333 249.93 6.13667 248.81 6.15C221.383 6.39 194.363 6.58667 167.75 6.74C167.283 6.74 167.03 6.97333 166.99 7.44C166.87 8.95333 167.113 10.3433 167.72 11.61C167.847 11.8833 167.89 12.1667 167.85 12.46L167.63 14.18C167.577 14.5867 167.74 14.86 168.12 15C168.573 15.1667 168.867 15.3533 169 15.56L0 15.5C1.11 9.18 5.36 6.37 11.49 6.37C50.25 6.39 88.54 6.44667 126.36 6.54C128.173 6.54 129.94 6.42 131.66 6.18C132.793 6.02 133.727 5.4 134.46 4.32C134.64 4.05333 134.877 3.85 135.17 3.71L136.78 2.92C137.127 2.75333 137.49 2.69 137.87 2.73C139.48 2.9 140.68 2.17 142.25 2.18C145.263 2.2 148.617 1.89667 152.31 1.27C152.537 1.23218 152.746 1.12277 152.908 0.957532C153.07 0.792295 153.175 0.579568 153.21 0.35C153.25 0.116667 152.927 -1.13687e-13 152.24 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape43&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 19.3159081135321 30.86015625)&quot; fill=&quot;rgb(15,11,8)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M86.1197 0C93.6331 3.14 98.2231 7.99667 99.8897 14.57C99.9181 14.684 99.9111 14.804 99.8698 14.914C99.8285 15.024 99.7547 15.1189 99.6583 15.186C99.5618 15.2532 99.4472 15.2894 99.3297 15.29L2.03972 15.41C1.90639 15.2033 1.61306 15.0167 1.15972 14.85C0.779725 14.71 0.616391 14.4367 0.669725 14.03L0.889725 12.31C0.929725 12.0167 0.886391 11.7333 0.759725 11.46C0.153058 10.1933 -0.0902752 8.80333 0.0297248 7.29C0.0697248 6.82333 0.323058 6.59 0.789725 6.59C27.4031 6.43667 54.4231 6.24 81.8497 6C82.9697 5.98667 83.9064 5.54333 84.6597 4.67C85.5997 3.57667 86.0864 2.02 86.1197 0Z&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt;&lt;div class=&quot;w-16 h-16&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;fill-[${rgbColor} w-16 h-16&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 36 36&quot;&gt; &lt;defs&gt;&lt;/defs&gt; &lt;path id=&quot;shape0&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 10.393984646722 3.24851063866497)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M384.119 800.308C389.392 800.401 395.079 800.381 401.179 800.248C405.299 800.161 408.469 800.568 410.689 801.468C415.949 803.598 420.779 810.198 420.289 816.268C419.669 823.858 412.349 829.318 404.999 829.328C277.499 829.355 146.952 829.355 13.3589 829.328C8.63888 829.328 4.09888 825.978 1.87888 822.058C-2.73112 813.888 1.52888 803.918 10.4389 801.028C11.9855 800.528 13.9555 800.285 16.3489 800.298C22.1289 800.338 27.6889 800.265 33.0289 800.078C33.1769 800.076 33.3188 800.017 33.4263 799.913C33.5337 799.809 33.5989 799.668 33.6089 799.518C33.7489 797.391 34.0889 795.351 34.6289 793.398C38.5755 779.138 46.7822 768.285 59.2489 760.838C67.2389 756.068 77.9989 753.418 87.8689 753.798C91.7089 753.938 95.6189 754.578 99.3589 753.338C121.612 745.945 138.126 732.518 148.899 713.058C160.649 691.848 162.149 664.098 156.689 640.298C150.949 615.338 135.539 594.358 113.659 581.418C104.759 576.151 97.1322 571.378 90.7789 567.098C79.8722 559.751 69.4389 550.391 59.4789 539.018C41.7922 518.825 28.7222 496.301 20.2689 471.448C13.2089 450.695 9.41555 429.945 8.88888 409.198C8.39555 389.938 9.51888 370.588 12.2589 351.148C15.7689 326.188 18.7489 301.968 22.2689 277.258C23.1955 270.798 23.9055 264.308 24.3989 257.788C25.2922 245.915 26.1489 234.441 26.9689 223.368C28.2189 206.548 28.2189 189.968 28.2289 172.948C28.229 172.665 28.1641 172.386 28.0392 172.133C27.9143 171.88 27.7328 171.659 27.5089 171.488C4.71888 154.278 -3.35112 123.728 10.2489 97.8679C21.8189 75.8479 44.3589 62.0579 69.5789 63.3579C72.9922 63.5379 76.3389 64.1179 79.6189 65.0979C79.7826 65.1468 79.9567 65.1513 80.1235 65.1109C80.2903 65.0705 80.4439 64.9867 80.5689 64.8679C95.3422 50.8279 113.322 44.9613 134.509 47.2679C134.656 47.2852 134.804 47.2536 134.932 47.1778C135.061 47.102 135.161 46.9862 135.219 46.8479C136.972 42.6213 139.372 38.5079 142.419 34.5079C153.299 20.2379 166.749 9.32792 184.089 3.97792C204.569 -2.34875 224.312 -1.12875 243.319 7.63792C258.599 14.6779 272.559 26.6579 280.469 41.6579C280.596 41.9046 280.792 41.9846 281.059 41.8979C289.839 38.9646 299.389 37.9446 309.709 38.8379C326.729 40.3079 342.309 50.4379 353.989 63.2879C354.516 63.8679 355.166 64.1746 355.939 64.2079C361.419 64.4546 366.656 65.5513 371.649 67.4979C392.199 75.5079 406.519 91.1379 411.669 112.968C413.189 119.421 413.456 125.841 412.469 132.228C409.882 148.975 401.956 162.205 388.689 171.918C387.729 172.628 387.729 173.468 387.719 174.528C387.586 191.895 387.899 207.108 388.659 220.168C389.549 235.238 390.999 253.908 393.189 270.758C396.622 297.205 400.169 324.231 403.829 351.838C404.689 358.351 405.536 366.615 406.369 376.628C407.042 384.655 407.406 391.321 407.459 396.628C407.679 420.268 404.476 443.035 397.849 464.928C386.419 502.718 363.929 536.538 333.029 561.268C324.009 568.498 312.959 575.088 302.869 581.488C297.502 584.888 292.979 588.131 289.299 591.218C265.139 611.508 255.039 640.758 256.429 672.398C258.039 709.018 277.959 738.488 312.639 751.718C317.389 753.528 321.449 754.508 326.659 754.038C338.269 753.008 349.089 755.608 359.129 762.058C371.639 770.088 381.589 784.038 383.299 799.558C383.352 800.045 383.626 800.295 384.119 800.308ZM34.9389 123.938C34.6255 130.038 36.5689 135.461 40.7689 140.208C42.9155 142.635 45.5089 143.855 48.5489 143.868C57.4489 143.895 67.6722 143.898 79.2189 143.878C80.8589 143.878 81.9889 142.308 82.5389 140.958C82.6855 140.585 82.6522 140.231 82.4389 139.898C80.5522 136.978 80.8189 134.321 83.2389 131.928C87.7189 127.508 91.8289 130.808 94.8789 134.678C97.7389 138.308 103.749 143.708 108.819 143.768C117.746 143.855 126.882 143.871 136.229 143.818C142.909 143.768 150.429 136.098 154.769 131.618C156.269 130.068 158.029 129.188 160.259 129.608C164.159 130.328 166.106 132.778 166.099 136.958C166.099 138.248 165.299 139.248 164.549 140.218C164.261 140.59 164.13 141.06 164.184 141.527C164.239 141.994 164.474 142.422 164.839 142.718C166.006 143.678 167.326 144.148 168.799 144.128C196.979 143.828 224.629 143.751 251.749 143.898C253.509 143.905 255.106 143.581 256.539 142.928C256.721 142.847 256.872 142.708 256.969 142.533C257.065 142.358 257.101 142.155 257.073 141.955C257.044 141.756 256.951 141.571 256.809 141.428C253.879 138.498 254.059 132.908 257.859 130.608C262.999 127.498 266.539 130.248 269.939 133.818C274.619 138.718 280.959 143.828 287.779 143.838C296.859 143.865 305.789 143.868 314.569 143.848C321.399 143.828 328.259 136.098 332.759 131.638C335.086 129.338 337.459 128.821 339.879 130.088C343.819 132.161 344.612 135.195 342.259 139.188C342.08 139.495 341.983 139.844 341.98 140.198C341.976 140.552 342.066 140.901 342.239 141.208C343.319 143.118 344.959 144.088 347.179 144.068C354.066 144.001 361.086 143.928 368.239 143.848C370.352 143.821 372.149 143.235 373.629 142.088C379.589 137.488 382.416 131.278 382.109 123.458C381.969 109.928 371.589 99.2079 359.169 95.4779C358.953 95.4151 358.724 95.4137 358.51 95.4738C358.296 95.534 358.105 95.6534 357.959 95.8179C355.212 98.9446 351.706 100.435 347.439 100.288C341.069 100.068 338.009 96.4579 335.789 91.1479C332.202 82.5946 326.232 76.3279 317.879 72.3479C307.626 67.4546 296.802 67.5779 285.409 72.7179C282.069 74.2179 279.519 77.4279 276.309 79.4679C269.159 84.0279 261.339 79.8879 260.179 71.8979C258.606 61.0979 253.279 51.6813 244.199 43.6479C217.109 19.6679 175.399 28.6579 160.839 61.6279C158.766 66.3279 157.699 70.8946 157.639 75.3279C157.559 80.8679 155.339 86.2279 149.929 88.1679C144.262 90.2146 139.372 89.0513 135.259 84.6779C133.749 83.0679 132.859 81.0279 131.499 79.3379C131.286 79.0646 131.012 78.8779 130.679 78.7779C128.472 78.1113 126.346 77.8213 124.299 77.9079C113.326 78.3813 104.429 83.1579 97.6089 92.2379C94.2189 96.7479 94.0089 102.468 90.0089 106.458C86.8589 109.588 81.6689 110.618 77.7089 108.488C73.0155 105.968 70.9422 101.938 71.4889 96.3979C71.5755 95.5313 71.1922 95.0446 70.3389 94.9379C59.7789 93.5446 50.8422 96.5046 43.5289 103.818C38.0555 109.291 35.1922 115.998 34.9389 123.938ZM70.3189 172.868L60.5489 172.868C60.0022 172.868 59.7255 173.141 59.7189 173.688C59.4855 194.395 58.5655 214.878 56.9589 235.138C56.6655 238.818 56.5355 242.431 56.5689 245.978C56.5689 246.378 56.7689 246.578 57.1689 246.578L287.389 246.598L306.739 246.558L315.789 246.558C316.622 246.558 317.009 246.145 316.949 245.318C315.196 221.491 313.862 197.675 312.949 173.868C312.939 173.596 312.822 173.339 312.625 173.151C312.427 172.963 312.163 172.858 311.889 172.858L302.559 172.868L102.799 172.818L85.9489 172.788ZM345.659 172.918L336.369 172.938C335.276 172.938 334.742 173.485 334.769 174.578C335.302 197.585 336.822 220.561 339.329 243.508C339.429 244.421 339.629 245.291 339.929 246.118C339.981 246.258 340.075 246.379 340.199 246.463C340.322 246.547 340.469 246.591 340.619 246.588L349.349 246.478L358.959 246.388C359.056 246.388 359.152 246.362 359.234 246.311C359.317 246.259 359.384 246.186 359.427 246.099C359.47 246.012 359.488 245.915 359.479 245.818C358.169 231.648 357.729 217.678 356.929 203.398C356.396 193.905 356.209 183.971 356.369 173.598C356.371 173.466 356.337 173.335 356.273 173.221C356.208 173.106 356.114 173.011 356.001 172.945C355.888 172.88 355.759 172.846 355.629 172.848ZM285.139 272.498L66.0789 272.778L56.5789 272.838C56.2688 272.842 55.9676 272.941 55.7169 273.122C55.4662 273.302 55.2782 273.556 55.1789 273.848C53.5922 278.475 52.3889 283.555 51.5689 289.088C50.7689 294.528 50.0622 299.925 49.4489 305.278C45.8889 336.418 40.7589 367.688 40.1089 398.048C39.6822 418.115 42.5555 438.068 48.7289 457.908C57.0789 484.768 71.6889 508.708 92.4189 527.918C99.6455 535.011 106.386 540.555 112.639 544.548C120.992 549.888 128.172 554.048 134.179 557.028C152.646 566.188 172.619 571.811 194.099 573.898C204.712 574.931 216.622 574.575 229.829 572.828C240.356 571.415 249.986 569.291 258.719 566.458C291.679 555.758 320.169 534.368 341.689 507.238C357.689 487.038 368.109 461.898 373.119 436.298C376.719 417.938 377.099 398.938 375.549 380.068C373.189 351.368 369.499 324.108 365.409 293.848C364.422 286.581 363.209 279.731 361.769 273.298C361.729 273.128 361.634 272.976 361.499 272.867C361.365 272.758 361.199 272.699 361.029 272.698ZM175.049 601.798L173.779 601.438C173.706 601.418 173.627 601.42 173.555 601.444C173.482 601.467 173.419 601.512 173.372 601.571C173.326 601.631 173.299 601.702 173.295 601.776C173.29 601.851 173.309 601.925 173.349 601.988C181.216 615.461 186.096 629.798 187.989 644.998C191.409 672.498 189.379 702.208 176.579 727.128C176.519 727.245 176.501 727.378 176.529 727.506C176.556 727.635 176.626 727.75 176.728 727.832C176.831 727.914 176.958 727.959 177.089 727.958L184.889 727.958L212.439 727.998L239.709 727.978C239.797 727.978 239.883 727.947 239.952 727.892C240.021 727.837 240.069 727.76 240.088 727.674C240.108 727.588 240.097 727.497 240.059 727.418C237.179 721.278 233.859 715.348 231.849 708.858C226.049 690.188 225.419 668.538 227.059 648.518C228.539 630.531 233.812 615.041 242.879 602.048C243.406 601.301 243.229 601.051 242.349 601.298C237.362 602.725 232.109 603.628 226.589 604.008C209.329 605.188 192.149 604.451 175.049 601.798ZM222.789 744.938L176.989 744.988L164.659 745.098C164.465 745.098 164.274 745.14 164.1 745.221C163.925 745.302 163.771 745.421 163.649 745.568C156.089 754.508 148.589 762.038 139.249 767.968C138.469 768.461 138.542 768.711 139.469 768.718L156.889 768.828L252.749 768.818C260.109 768.858 267.559 768.855 275.099 768.808C276.206 768.801 277.269 768.665 278.289 768.398C278.709 768.285 278.732 768.118 278.359 767.898C268.546 762.031 260.359 754.481 253.799 745.248C253.572 744.935 253.266 744.781 252.879 744.788ZM86.8189 800.748L255.819 800.808L353.109 800.688C353.226 800.687 353.341 800.651 353.437 800.584C353.534 800.517 353.608 800.422 353.649 800.312C353.69 800.202 353.697 800.082 353.669 799.968C352.002 793.395 347.412 788.538 339.899 785.398L239.059 785.248C221.492 784.995 203.922 784.911 186.349 784.998C151.302 785.178 116.719 785.111 82.5989 784.798C73.5889 784.718 65.6689 791.198 63.5189 799.828C63.4885 799.952 63.4965 800.082 63.5417 800.201C63.5869 800.32 63.6672 800.423 63.7721 800.496C63.8769 800.568 64.0014 800.608 64.1289 800.608Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape1&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6223046875 4.3066710451255)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.17 93.3591L341.7 94.8091C341.347 94.9025 341.043 95.0758 340.79 95.3291C334.81 101.209 327.56 101.079 319.06 100.739C316.15 100.619 313.98 99.6891 312.72 96.9491C310.21 91.4791 305.03 84.9891 298.07 88.5091C296.217 89.4491 294.677 90.6225 293.45 92.0291C288.01 98.2791 282.29 103.559 274.1 105.299C270.267 106.112 266.1 106.416 261.6 106.209C253.04 105.819 244.67 101.199 239.15 94.8491C232.37 87.0391 226.88 84.2491 219.24 92.9691C214.89 97.9391 209.89 101.049 202.97 101.219C196.37 101.379 189.917 101.426 183.61 101.359C182.93 101.352 182.43 100.989 182.11 100.269C182.01 100.04 181.975 99.7876 182.008 99.5391C182.042 99.2906 182.143 99.0554 182.3 98.8591C183.04 97.9325 183.813 97.0725 184.62 96.2791C187.09 93.8491 185.64 89.9291 183.51 87.8291C180.65 85.0091 175.91 85.9891 173.39 88.9391C172.23 90.2925 171.17 91.6391 170.21 92.9791C163.5 102.299 152.67 101.929 142.47 100.679C134.9 99.7591 131.64 94.3891 126.62 89.6591C123.633 86.8525 120.593 86.8391 117.5 89.6191C112.63 93.9791 108.24 99.7591 102.47 102.719C88.07 110.129 72.61 106.679 62.57 94.0391C58.62 89.0591 52.95 85.2191 47.21 90.7591C44.54 93.3491 43.94 96.9991 40.53 99.0891C36.59 101.509 29.55 101.139 24.26 101.029C18.64 100.899 13.25 100.999 9.85 97.1991C7.82 94.9191 4 93.8291 2.11 96.9691C1.02333 98.7691 0.446667 98.6225 0.38 96.5291C0.366667 95.9891 0.24 95.0925 0 93.8391C0.253333 85.8991 3.11667 79.1925 8.59 73.7191C15.9033 66.4058 24.84 63.4458 35.4 64.8391C36.2533 64.9458 36.6367 65.4325 36.55 66.2991C36.0033 71.8391 38.0767 75.8691 42.77 78.3891C46.73 80.5191 51.92 79.4891 55.07 76.3591C59.07 72.3691 59.28 66.6491 62.67 62.1391C69.49 53.0591 78.3867 48.2825 89.36 47.8091C91.4067 47.7225 93.5333 48.0125 95.74 48.6791C96.0733 48.7791 96.3467 48.9658 96.56 49.2391C97.92 50.9291 98.81 52.9691 100.32 54.5791C104.433 58.9525 109.323 60.1158 114.99 58.0691C120.4 56.1291 122.62 50.7691 122.7 45.2291C122.76 40.7958 123.827 36.2291 125.9 31.5291C140.46 -1.44087 182.17 -10.4309 209.26 13.5491C218.34 21.5825 223.667 30.9991 225.24 41.7991C226.4 49.7891 234.22 53.9291 241.37 49.3691C244.58 47.3291 247.13 44.1191 250.47 42.6191C261.863 37.4791 272.687 37.3558 282.94 42.2491C291.293 46.2291 297.263 52.4958 300.85 61.0491C303.07 66.3591 306.13 69.9691 312.5 70.1891C316.767 70.3358 320.273 68.8458 323.02 65.7191C323.166 65.5546 323.357 65.4352 323.571 65.3751C323.785 65.3149 324.014 65.3163 324.23 65.3791C336.65 69.1091 347.03 79.8291 347.17 93.3591Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape2&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6211575655465 7.33540715628013)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.203 7.20842C347.509 15.0284 344.683 21.2384 338.723 25.8384C337.243 26.9851 335.446 27.5718 333.333 27.5984C326.179 27.6784 319.159 27.7518 312.273 27.8184C310.053 27.8384 308.413 26.8684 307.333 24.9584C307.159 24.651 307.07 24.3028 307.074 23.9484C307.077 23.594 307.173 23.2458 307.353 22.9384C309.706 18.9451 308.913 15.9118 304.973 13.8384C302.553 12.5718 300.179 13.0884 297.853 15.3884C293.353 19.8484 286.493 27.5784 279.663 27.5984C270.883 27.6184 261.953 27.6151 252.873 27.5884C246.053 27.5784 239.713 22.4684 235.033 17.5684C231.633 13.9984 228.093 11.2484 222.953 14.3584C219.153 16.6584 218.973 22.2484 221.903 25.1784C222.045 25.3214 222.137 25.5067 222.166 25.706C222.195 25.9053 222.159 26.108 222.062 26.2834C221.966 26.4588 221.815 26.5975 221.633 26.6784C220.199 27.3318 218.603 27.6551 216.843 27.6484C189.723 27.5018 162.073 27.5784 133.893 27.8784C132.419 27.8984 131.099 27.4284 129.933 26.4684C129.567 26.1723 129.332 25.7446 129.278 25.2775C129.224 24.8105 129.355 24.3403 129.643 23.9684C130.393 22.9984 131.193 21.9984 131.193 20.7084C131.199 16.5284 129.253 14.0784 125.353 13.3584C123.123 12.9384 121.363 13.8184 119.863 15.3684C115.523 19.8484 108.003 27.5184 101.323 27.5684C91.976 27.6218 82.8393 27.6051 73.9126 27.5184C68.8426 27.4584 62.8326 22.0584 59.9726 18.4284C56.9226 14.5584 52.8126 11.2584 48.3326 15.6784C45.9126 18.0718 45.646 20.7284 47.5326 23.6484C47.746 23.9818 47.7793 24.3351 47.6326 24.7084C47.0826 26.0584 45.9526 27.6284 44.3126 27.6284C32.766 27.6484 22.5426 27.6451 13.6426 27.6184C10.6026 27.6051 8.0093 26.3851 5.86263 23.9584C1.66263 19.2118 -0.280704 13.7884 0.0326292 7.68842C0.272629 8.94175 0.399296 9.83842 0.412629 10.3784C0.479296 12.4718 1.05596 12.6184 2.14263 10.8184C4.03263 7.67842 7.85263 8.76842 9.88263 11.0484C13.2826 14.8484 18.6726 14.7484 24.2926 14.8784C29.5826 14.9884 36.6226 15.3584 40.5626 12.9384C43.9726 10.8484 44.5726 7.19842 47.2426 4.60842C52.9826 -0.931581 58.6526 2.90842 62.6026 7.88842C72.6426 20.5284 88.1026 23.9784 102.503 16.5684C108.273 13.6084 112.663 7.82842 117.533 3.46842C120.626 0.688419 123.666 0.701752 126.653 3.50842C131.673 8.23842 134.933 13.6084 142.503 14.5284C152.703 15.7784 163.533 16.1484 170.243 6.82842C171.203 5.48842 172.263 4.14175 173.423 2.78842C175.943 -0.161581 180.683 -1.14158 183.543 1.67842C185.673 3.77842 187.123 7.69842 184.653 10.1284C183.846 10.9218 183.073 11.7818 182.333 12.7084C182.175 12.9047 182.074 13.1399 182.041 13.3884C182.007 13.6369 182.043 13.8894 182.143 14.1184C182.463 14.8384 182.963 15.2018 183.643 15.2084C189.949 15.2751 196.403 15.2284 203.003 15.0684C209.923 14.8984 214.923 11.7884 219.273 6.81842C226.913 -1.90158 232.403 0.888419 239.183 8.69842C244.703 15.0484 253.073 19.6684 261.633 20.0584C266.133 20.2651 270.299 19.9618 274.133 19.1484C282.323 17.4084 288.043 12.1284 293.483 5.87842C294.709 4.47175 296.249 3.29842 298.103 2.35842C305.063 -1.16158 310.243 5.32842 312.753 10.7984C314.013 13.5384 316.183 14.4684 319.093 14.5884C327.593 14.9284 334.843 15.0584 340.823 9.17842C341.076 8.92509 341.379 8.75175 341.733 8.65842Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape3&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.7941352600339 9.3230859375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M17.6779 0C16.5513 11.84 15.9213 19.36 15.7879 22.56C15.3079 33.9733 14.6346 46.28 13.7679 59.48C13.6013 62.04 13.1046 63.7467 12.2779 64.6C8.55793 68.45 -0.30207 67.53 0.00793038 61.06C1.34793 33.3133 2.02793 12.9867 2.04793 0.08Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape4&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9413128810975 9.32414062500001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M201.657 0.05C201.63 7.10333 201.687 11.5967 201.827 13.53C203.28 33.53 204.617 53.6 205.837 73.74L186.487 73.78L193.557 73.61C193.714 73.6076 193.867 73.5609 193.998 73.4752C194.129 73.3896 194.234 73.2685 194.299 73.126C194.364 72.9835 194.388 72.8254 194.367 72.67C193.367 64.75 192.894 56.7733 192.947 48.74C196.9 43.82 196.69 38.93 192.317 34.07C191.537 32.47 191.137 31.2867 191.117 30.52C190.984 25.7933 191.01 21.2667 191.197 16.94C191.213 16.5684 191.128 16.1993 190.951 15.872C190.773 15.5446 190.51 15.2711 190.189 15.0807C189.868 14.8902 189.501 14.7897 189.127 14.79L153.317 14.9C152.777 12.9667 151.747 11.28 150.227 9.84C148.927 8.60667 147.257 7.7 145.217 7.12C138.364 5.17333 133.557 7.71667 130.797 14.75C116.39 14.8967 101.944 14.9467 87.4571 14.9C61.1271 14.81 34.7871 15.13 8.5371 15.06C6.00377 15.0533 4.15377 14.7633 2.9871 14.19C0.773767 13.11 -0.209566 11.2233 0.0371003 8.53C0.150434 7.29667 0.770434 4.45333 1.8971 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape5&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.5460546875 9.32519283839548)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M3.69 73.6301L0 0.0700704L9.97 7.03745e-05C10.1004 -0.00175254 10.2289 0.031869 10.3421 0.0974247C10.4553 0.16298 10.5492 0.258107 10.6139 0.372872C10.6786 0.487637 10.7118 0.617903 10.71 0.75007C10.55 11.1234 10.7367 21.0567 11.27 30.5501C12.07 44.8301 12.51 58.8001 13.82 72.9701C13.8293 73.0668 13.8114 73.1643 13.7681 73.2514C13.7249 73.3384 13.6581 73.4116 13.5754 73.4627C13.4926 73.5137 13.3972 73.5405 13.3 73.5401Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape6&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.3825550063776 9.3230859375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M13.7551 0.08C13.7351 12.9867 13.0551 33.3133 11.7151 61.06C11.4051 67.53 20.2651 68.45 23.9851 64.6C24.8118 63.7467 25.3084 62.04 25.4751 59.48C26.3418 46.28 27.0151 33.9733 27.4951 22.56C27.6284 19.36 28.2584 11.84 29.3851 0L46.2351 0.03C45.1084 4.48333 44.4884 7.32667 44.3751 8.56C44.1284 11.2533 45.1118 13.14 47.3251 14.22C48.4918 14.7933 50.3418 15.0833 52.8751 15.09C79.1251 15.16 105.465 14.84 131.795 14.93C146.282 14.9767 160.728 14.9267 175.135 14.78C174.568 20.8133 176.498 24.9267 180.925 27.12C183.338 28.3133 185.805 28.72 188.325 28.34C194.755 27.36 198.095 21.26 197.655 14.93L233.465 14.82C233.839 14.8197 234.206 14.9202 234.527 15.1107C234.848 15.3011 235.111 15.5746 235.289 15.902C235.466 16.2293 235.551 16.5984 235.535 16.97C235.348 21.2967 235.322 25.8233 235.455 30.55C235.475 31.3167 235.875 32.5 236.655 34.1C232.788 31.5133 229.168 30.99 225.795 32.53C211.935 38.83 224.195 59.55 237.285 48.77C237.232 56.8033 237.705 64.78 238.705 72.7C238.726 72.8554 238.702 73.0135 238.637 73.156C238.572 73.2985 238.467 73.4196 238.336 73.5052C238.205 73.5909 238.052 73.6376 237.895 73.64L230.825 73.81L0.605102 73.79C0.205102 73.79 0.00510204 73.59 0.00510204 73.19C-0.0282313 69.6433 0.101769 66.03 0.395102 62.35C2.00177 42.09 2.92177 21.6067 3.1551 0.9C3.16177 0.353333 3.43844 0.08 3.9851 0.08ZM127.005 36.5C127.005 34.413 126.456 32.3624 125.412 30.555C124.369 28.7476 122.867 27.2464 121.06 26.203C119.253 25.1595 117.202 24.61 115.115 24.61C111.963 24.61 108.937 25.8635 106.708 28.0925C104.479 30.3215 103.225 33.3478 103.225 36.5C103.225 39.6522 104.479 42.6785 106.708 44.9075C108.937 47.1365 111.963 48.39 115.115 48.39C117.202 48.39 119.253 47.8405 121.06 46.797C122.867 45.7536 124.369 44.2524 125.412 42.445C126.456 40.6376 127.005 38.587 127.005 36.5ZM75.9704 37.4184C76.0574 34.3019 74.8637 31.2741 72.6541 29.007C70.4445 26.7398 67.3954 25.4143 64.1835 25.3246C62.057 25.2652 59.9523 25.7501 58.0818 26.7303C56.2114 27.7105 54.6403 29.152 53.5271 30.9092C52.414 32.6664 51.7974 34.6782 51.7398 36.7416C51.6528 39.8581 52.8465 42.8859 55.0561 45.153C57.2657 47.4202 60.3148 48.7457 63.5267 48.8354C65.6532 48.8948 67.7579 48.4099 69.6284 47.4297C71.4988 46.4495 73.0699 45.008 74.1831 43.2508C75.2962 41.4936 75.9128 39.4818 75.9704 37.4184ZM183.874 50.7982C183.856 49.4819 183.468 48.1937 182.749 47.0635C182.03 45.9334 181.006 45.0007 179.779 44.3595C178.552 43.7184 177.166 43.3911 175.76 43.4107C173.637 43.4404 171.61 44.2595 170.128 45.6863C168.646 47.1131 167.828 49.0336 167.856 51.0218C167.874 52.3381 168.262 53.6263 168.981 54.7565C169.7 55.8866 170.725 56.8193 171.951 57.4605C173.178 58.1016 174.564 58.4289 175.97 58.4093C178.093 58.3796 180.121 57.5605 181.603 56.1337C183.084 54.7069 183.902 52.7864 183.874 50.7982Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape7&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.0305953125001 9.32554685349047)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.0064 0.0100006L9.3364 6.11826e-07C9.61064 -0.000292647 9.87453 0.104847 10.0721 0.293135C10.2697 0.481423 10.3861 0.738544 10.3964 1.01C11.3097 24.8167 12.6431 48.6333 14.3964 72.46C14.4564 73.2867 14.0697 73.7 13.2364 73.7L4.1864 73.7C2.9664 53.56 1.62973 33.49 0.1764 13.49C0.0364 11.5567 -0.0202667 7.06333 0.0064 0.0100006Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape8&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1631696428572 9.32765624999999)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M10.891 0L14.581 73.56L5.85095 73.67C5.70139 73.6731 5.55452 73.6294 5.43088 73.5452C5.30724 73.461 5.21287 73.3403 5.16095 73.2C4.86095 72.3733 4.66095 71.5033 4.56095 70.59C2.05429 47.6433 0.534286 24.6667 0.000952381 1.66C-0.0257143 0.566667 0.507619 0.02 1.60095 0.02Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape9&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.5362571970961 9.55219950584632)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.6165 8.41299C23.0565 14.743 19.7165 20.843 13.2865 21.823C10.7665 22.203 8.2998 21.7963 5.88646 20.603C1.4598 18.4097 -0.470205 14.2963 0.0964619 8.26299C2.85646 1.22966 7.66313 -1.31367 14.5165 0.632992C16.5565 1.21299 18.2265 2.11966 19.5265 3.35299C21.0465 4.79299 22.0765 6.47966 22.6165 8.41299Z&quot;&gt;&lt;/path&gt; &lt;circle id=&quot;shape10&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.0115625 10.18828125)&quot; r=&quot;11.89&quot; cx=&quot;11.89&quot; cy=&quot;11.89&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape11&quot; transform=&quot;matrix(0.0351425431068875 0.000981620111375468 -0.000981620111375468 0.0351425431068875 14.2130771675543 10.2015061448131)&quot; rx=&quot;12.12&quot; ry=&quot;11.76&quot; cx=&quot;12.12&quot; cy=&quot;11.76&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape12&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 20.1057469902912 10.4364122450525)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M16.9732 2.43205C21.3465 7.29205 21.5565 12.1821 17.6032 17.1021C4.5132 27.8821 -7.7468 7.16205 6.1132 0.862052C9.48653 -0.677948 13.1065 -0.154615 16.9732 2.43205Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape13&quot; transform=&quot;matrix(0.0351528231097021 -0.000490857902548076 0.000490857902548076 0.0351528231097021 18.2800569526222 10.8531762234766)&quot; rx=&quot;8.01&quot; ry=&quot;7.5&quot; cx=&quot;8.01&quot; cy=&quot;7.5&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape14&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.47390625 12.828515625)&quot; fill=&quot;rgb(7,6,6)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0 300.33C1.52 298.69 3.53 298.057 6.03 298.43C6.10297 298.443 6.17377 298.447 6.24 298.44C6.65333 298.413 6.88667 298.26 6.94 297.98C7 297.66 7.19333 297.493 7.52 297.48L10.29 297.39C10.4233 297.383 10.5567 297.367 10.69 297.34C11.0167 297.267 11.1733 297.127 11.16 296.92C11.1467 296.7 11.2467 296.563 11.46 296.51C12.1467 296.337 12.7433 295.997 13.25 295.49C13.49 295.257 13.58 294.973 13.52 294.64C13.1333 292.653 12.8767 290.647 12.75 288.62C12.69 287.79 12.27 287.35 11.7 286.83C11.4533 286.603 11.3933 286.337 11.52 286.03C11.8533 285.197 11.6767 284.573 10.99 284.16C10.7367 284 10.46 283.923 10.16 283.93L6.56 284.02C15.1 281.92 21.0833 280.04 24.51 278.38C27.5033 276.927 30.4033 275.357 33.21 273.67C33.319 273.603 33.3974 273.495 33.4282 273.371C33.4589 273.246 33.4397 273.115 33.3746 273.004C33.3096 272.894 33.2037 272.813 33.08 272.78C32.5067 272.62 31.9433 272.67 31.39 272.93C63.5767 260.003 88.4967 238.95 106.15 209.77C109.223 204.703 112.093 199 114.76 192.66C118.06 184.807 120.343 178.587 121.61 174C123.097 168.613 124.457 162.397 125.69 155.35C126.657 149.857 126.873 144.25 126.34 138.53C127.853 138.57 128.907 138.097 129.5 137.11C131.56 133.67 131.433 130.473 129.12 127.52C128.24 126.39 127.07 126.39 125.77 126.38C120.017 126.347 114.427 126.37 109 126.45C108.613 125.77 108.27 125.09 107.97 124.41C107.69 123.77 107.527 123.037 107.48 122.21C106.953 112.977 106.213 103.723 105.26 94.45C110.127 94.5633 114.617 94.5833 118.73 94.51C121.27 94.47 123.93 94.86 126 93.31C128.053 91.77 128.717 89.61 127.99 86.83C127.23 83.89 124.98 82.2967 121.24 82.05L120.9 72.32C124.973 70.3667 126.23 67.5767 124.67 63.95C123.697 61.6833 121.82 60.52 119.04 60.46C117.273 58.24 116.223 56.5633 115.89 55.43C113.43 47.1033 110.547 38.9133 107.24 30.86C106.947 30.1467 107 29.0333 107.4 27.52C109.087 27.4933 110.883 27.5267 112.79 27.62C115.45 27.7533 117.403 26.9667 118.65 25.26C121.02 22.01 120.02 17.98 116.55 16.23C115.597 15.75 114.193 15.5133 112.34 15.52C107.533 15.54 102.823 15.4767 98.21 15.33C97.6033 13.9433 96.9433 12.6033 96.23 11.31C94.38 7.96 93.99 4.82 92.56 1.46C92.4467 1.18667 92.5067 0.963333 92.74 0.79L93.19 0.46C93.4567 0.273333 93.4267 0.176667 93.1 0.17L55.31 0L131.2 0.2C131.371 0.200762 131.536 0.26037 131.671 0.369176C131.805 0.477981 131.9 0.629779 131.94 0.8C133.38 7.23333 134.593 14.0833 135.58 21.35C139.67 51.61 143.36 78.87 145.72 107.57C147.27 126.44 146.89 145.44 143.29 163.8C138.28 189.4 127.86 214.54 111.86 234.74C90.34 261.87 61.85 283.26 28.89 293.96C20.1567 296.793 10.5267 298.917 0 300.33Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape15&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.2758764491296 12.828515625)&quot; fill=&quot;rgb(15,11,8)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M231.61 0L269.4 0.17C269.726 0.176667 269.756 0.273333 269.49 0.46L269.04 0.79C268.806 0.963333 268.746 1.18667 268.86 1.46C270.29 4.82 270.68 7.96 272.53 11.31C273.243 12.6033 273.903 13.9433 274.51 15.33C268.76 17.07 269.07 27.78 275.82 27.53C278.38 27.43 281.006 27.4267 283.7 27.52C283.3 29.0333 283.246 30.1467 283.54 30.86C286.846 38.9133 289.73 47.1033 292.19 55.43C292.523 56.5633 293.573 58.24 295.34 60.46C290.98 60.76 286.806 61.0267 282.82 61.26C277.7 61.56 274.45 67.2 278.08 71.26C278.86 72.1333 280.413 72.6 282.74 72.66C287.386 72.7733 292.206 72.66 297.2 72.32L297.54 82.05C293.013 81.9567 288.443 81.9633 283.83 82.07C281.84 82.11 280.61 82.75 279.5 84.26C276.44 88.44 277.126 91.8367 281.56 94.45C282.513 103.723 283.253 112.977 283.78 122.21C283.826 123.037 283.99 123.77 284.27 124.41C284.57 125.09 284.913 125.77 285.3 126.45C282.193 127.497 280.633 129.463 280.62 132.35C280.613 134.79 281.763 136.753 284.07 138.24C281.93 156.593 277.493 173.123 270.76 187.83C261.606 207.817 247.22 225.063 227.6 239.57C218.546 246.263 208.406 252.023 197.18 256.85C191.52 259.28 187.21 264.45 191.61 270.42C195.03 275.03 202.58 274.56 207.69 272.93C208.243 272.67 208.806 272.62 209.38 272.78C209.503 272.813 209.609 272.894 209.674 273.004C209.739 273.115 209.758 273.246 209.728 273.371C209.697 273.495 209.619 273.603 209.51 273.67C206.703 275.357 203.803 276.927 200.81 278.38C197.383 280.04 191.4 281.92 182.86 284.02C165.386 287.427 148.786 288.113 133.06 286.08C116.433 283.94 99.2895 279.17 81.6295 271.77C75.1162 269.043 68.6828 266.14 62.3295 263.06C54.3762 259.2 46.8962 254.463 39.8895 248.85C40.5695 248.377 41.3595 247.947 42.2595 247.56C44.5695 246.55 46.3695 244.3 44.1695 241.99C29.1962 226.303 18.1928 209.247 11.1595 190.82C1.95285 166.687 -1.55715 141.62 0.629514 115.62C2.01618 99.0867 3.45618 82.5733 4.94951 66.08C5.49618 59.9533 6.20618 53.32 7.07951 46.18C8.95285 30.8733 10.7762 15.5733 12.5495 0.28ZM230.747 11.7302C228.758 9.7412 226.058 8.62261 223.245 8.62261C220.432 8.62261 217.731 9.7412 215.742 11.7302L213.89 13.5829C211.901 15.5719 210.782 18.2724 210.782 21.0853C210.782 23.8982 211.901 26.5987 213.89 28.5877L215.092 29.7898C217.081 31.7788 219.781 32.8974 222.594 32.8974C225.407 32.8974 228.108 31.7788 230.097 29.7898L231.949 27.9371C233.938 25.9481 235.057 23.2476 235.057 20.4347C235.057 17.6218 233.938 14.9213 231.949 12.9323ZM47.1595 186.78C39.7128 170.84 35.7195 154.833 35.1795 138.76C34.9528 131.94 35.0895 124.72 35.5895 117.1C37.1495 93.44 39.2662 67.4833 41.9395 39.23C42.3395 35.0167 42.6262 30.7267 42.7995 26.36C43.4195 10.9 25.2095 12.45 24.4195 25.69C23.0462 48.79 21.1195 72.2233 18.6395 95.99C17.6595 105.337 16.9995 114.63 16.6595 123.87C16.3328 132.65 16.6595 140.653 17.6395 147.88C19.5062 161.707 22.9728 175.147 28.0395 188.2C29.1795 191.153 30.6662 194.07 32.4995 196.95C35.2995 201.37 41.5395 202.72 45.3395 198.89C48.7328 195.483 49.3395 191.447 47.1595 186.78ZM87.1943 37.8021C86.8236 36.4743 85.902 35.3574 84.6342 34.6994C83.3663 34.0413 81.8534 33.8945 80.4311 34.2916C79.0088 34.6887 77.7908 35.598 77.0472 36.8177C76.3037 38.0374 76.094 39.4701 76.4647 40.7979C76.8355 42.1257 77.757 43.2426 79.0249 43.9006C80.2927 44.5587 81.8056 44.7055 83.2279 44.3084C84.6502 43.9113 85.8682 43.002 86.6118 41.7823C87.3554 40.5626 87.565 39.1299 87.1943 37.8021ZM242.9 63.3691C242.905 60.5116 242.14 57.7024 240.682 55.2252C239.224 52.7479 237.124 50.6888 234.594 49.2556C232.064 47.8225 229.192 47.0651 226.268 47.06C223.344 47.0549 220.469 47.8022 217.934 49.2266C215.399 50.6509 213.292 52.7027 211.826 55.1748C210.359 57.6469 209.585 60.4534 209.58 63.3109C209.575 66.1684 210.34 68.9776 211.797 71.4548C213.255 73.9321 215.355 75.9912 217.885 77.4244C220.415 78.8575 223.287 79.6149 226.211 79.62C229.135 79.6251 232.01 78.8778 234.545 77.4534C237.08 76.0291 239.187 73.9773 240.653 71.5052C242.12 69.0331 242.895 66.2266 242.9 63.3691ZM85.9041 71.8823C88.1531 72.912 90.7367 72.9736 93.0816 72.0534C95.4266 71.1333 97.3455 69.3049 98.4127 66.9739C99.1193 65.4306 99.4215 63.7348 99.2889 62.0574C99.1563 60.38 98.5935 58.7796 97.6572 57.4176C96.721 56.0556 95.4439 54.9794 93.9549 54.2977C91.7059 53.268 89.1223 53.2064 86.7774 54.1266C84.4325 55.0467 82.5135 56.8751 81.4463 59.2061C80.7398 60.7494 80.4375 62.4452 80.5701 64.1226C80.7028 65.8 81.2656 67.4004 82.2018 68.7624C83.1381 70.1244 84.4151 71.2006 85.9041 71.8823ZM60.6086 105.171C63.2448 106.638 66.3725 106.974 69.2978 106.105C72.223 105.236 74.7122 103.231 76.213 100.535C77.7138 97.8381 78.1063 94.6659 77.3035 91.7217C76.5007 88.7775 74.5666 86.2966 71.9304 84.8293C69.2942 83.362 66.1665 83.0257 63.2413 83.8948C60.316 84.7639 57.8268 86.7691 56.326 89.4655C54.8252 92.1619 54.4327 95.3341 55.2355 98.2783C56.0384 101.222 57.9724 103.703 60.6086 105.171ZM187.08 98.11C187.08 96.1959 186.318 94.3582 184.965 93.0047C183.611 91.6512 181.774 90.89 179.86 90.89C177.945 90.89 176.108 91.6512 174.754 93.0047C173.401 94.3582 172.64 96.1959 172.64 98.11C172.64 100.024 173.401 101.862 174.754 103.215C176.108 104.569 177.945 105.33 179.86 105.33C181.127 105.33 182.372 104.996 183.47 104.363C184.567 103.729 185.479 102.817 186.112 101.72C186.746 100.623 187.08 99.3773 187.08 98.11ZM234.564 99.0027C233.705 97.863 232.551 96.9774 231.217 96.4351C229.883 95.8929 228.416 95.7129 226.964 95.9133C225.513 96.1138 224.127 96.6877 222.947 97.5771C221.766 98.4665 220.833 99.6405 220.24 100.981C219.647 102.321 219.416 103.78 219.57 105.212C219.723 106.644 220.256 107.998 221.115 109.137C221.974 110.277 223.128 111.163 224.462 111.705C225.796 112.247 227.263 112.427 228.715 112.227C230.166 112.026 231.552 111.452 232.732 110.563C233.913 109.673 234.846 108.499 235.439 107.159C236.032 105.819 236.263 104.36 236.109 102.928C235.956 101.496 235.423 100.142 234.564 99.0027ZM47.9695 214.56C45.1695 220.83 50.0195 225.32 54.0495 229.45C57.6895 233.19 61.8995 236.09 66.6995 232.86C71.8895 229.38 72.0595 223.24 67.9795 218.66C64.2095 214.41 60.6395 209.6 54.3295 209.99C51.4095 210.17 49.1195 211.99 47.9695 214.56Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape16&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.8026079545455 12.838359375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M26.0114 0C24.238 15.2933 22.4147 30.5933 20.5414 45.9C19.668 53.04 18.958 59.6733 18.4114 65.8C16.918 82.2933 15.478 98.8067 14.0914 115.34C11.9047 141.34 15.4147 166.407 24.6214 190.54C31.6547 208.967 42.658 226.023 57.6314 241.71C59.8314 244.02 58.0314 246.27 55.7214 247.28C54.8214 247.667 54.0314 248.097 53.3514 248.57C51.9014 250.07 52.3314 253.14 52.3514 255.14C31.6214 235.93 17.0114 211.99 8.66137 185.13C2.48804 165.29 -0.385293 145.337 0.0413737 125.27C0.691374 94.91 5.82137 63.64 9.38137 32.5C9.99471 27.1467 10.7014 21.75 11.5014 16.31C12.3214 10.7767 13.5247 5.69667 15.1114 1.07C15.2107 0.778294 15.3987 0.524438 15.6494 0.343583C15.9001 0.162728 16.2013 0.0636261 16.5114 0.06Z&quot;&gt;&lt;/path&gt; &lt;rect id=&quot;shape17&quot; transform=&quot;matrix(0.0248592227760896 -0.0248592227760896 0.0248592227760896 0.0248592227760896 19.531681996495 13.569794617477)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; width=&quot;23.84&quot; height=&quot;22.92&quot; rx=&quot;10.61&quot; ry=&quot;10.61&quot;&gt;&lt;/rect&gt; &lt;path id=&quot;shape18&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.857255859375 13.3649990428515)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M30.6225 171.52C32.8025 176.187 32.1958 180.223 28.8025 183.63C25.0025 187.46 18.7625 186.11 15.9625 181.69C14.1292 178.81 12.6425 175.893 11.5025 172.94C6.43583 159.887 2.96917 146.447 1.1025 132.62C0.1225 125.393 -0.204167 117.39 0.1225 108.61C0.4625 99.37 1.1225 90.0767 2.1025 80.73C4.5825 56.9634 6.50917 33.53 7.8825 10.43C8.6725 -2.80997 26.8825 -4.35997 26.2625 11.1C26.0892 15.4667 25.8025 19.7567 25.4025 23.97C22.7292 52.2234 20.6125 78.18 19.0525 101.84C18.5525 109.46 18.4158 116.68 18.6425 123.5C19.1825 139.573 23.1758 155.58 30.6225 171.52Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape19&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.7841415488515 13.3674609375)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.0522 0C8.66553 0.146667 13.3755 0.21 18.1822 0.19C20.0355 0.183333 21.4389 0.42 22.3922 0.9C25.8622 2.65 26.8622 6.68 24.4922 9.93C23.2455 11.6367 21.2922 12.4233 18.6322 12.29C16.7255 12.1967 14.9289 12.1633 13.2422 12.19C10.5489 12.0967 7.9222 12.1 5.3622 12.2C-1.3878 12.45 -1.6978 1.74 4.0522 0Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape20&quot; transform=&quot;matrix(0.0338611839889802 -0.00945421244350544 0.00945421244350544 0.0338611839889802 14.9149266129752 14.0867380565676)&quot; rx=&quot;5.57&quot; ry=&quot;5.2&quot; cx=&quot;5.57&quot; cy=&quot;5.2&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape21&quot; transform=&quot;matrix(0.0351561964539828 6.13592003636124e-05 -6.13592003636124e-05 0.0351561964539828 19.6449060698586 14.4819473774511)&quot; rx=&quot;16.66&quot; ry=&quot;16.28&quot; cx=&quot;16.66&quot; cy=&quot;16.28&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape22&quot; transform=&quot;matrix(-0.0146348716029047 0.031965331958686 -0.031965331958686 -0.0146348716029047 15.8772166930746 14.8739620295146)&quot; rx=&quot;9.67&quot; ry=&quot;9.33&quot; cx=&quot;9.67&quot; cy=&quot;9.33&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape23&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.997793706651 14.9540625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M18.805 0C21.585 0.06 23.4616 1.22333 24.435 3.49C25.995 7.11667 24.7383 9.90667 20.665 11.86C15.6716 12.2 10.8516 12.3133 6.20498 12.2C3.87831 12.14 2.32498 11.6733 1.54498 10.8C-2.08502 6.74 1.16498 1.1 6.28498 0.8C10.2716 0.566667 14.445 0.3 18.805 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape24&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.0361349190606 15.7107890625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M19.9144 0.0653333C23.6544 0.312 25.9044 1.90533 26.6644 4.84533C27.3911 7.62533 26.7277 9.78533 24.6744 11.3253C22.6044 12.8753 19.9444 12.4853 17.4044 12.5253C13.2911 12.5987 8.80105 12.5787 3.93438 12.4653C-0.498949 9.852 -1.18562 6.45533 1.87438 2.27533C2.98438 0.765333 4.21438 0.125333 6.20438 0.0853333C10.8177 -0.0213333 15.3877 -0.028 19.9144 0.0653333Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape25&quot; transform=&quot;matrix(-0.0170977282180133 0.0307185547160906 -0.0307185547160906 -0.0170977282180133 15.1542587716268 16.0053675452257)&quot; rx=&quot;11.64&quot; ry=&quot;11.38&quot; cx=&quot;11.64&quot; cy=&quot;11.38&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;circle id=&quot;shape26&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.345234375 16.0238671875)&quot; r=&quot;7.22&quot; cx=&quot;7.22&quot; cy=&quot;7.22&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape27&quot; transform=&quot;matrix(0.0280770296501001 -0.0211575594076892 0.0211575594076892 0.0280770296501001 19.8774398273616 16.4371069616574)&quot; rx=&quot;8.42&quot; ry=&quot;8.13&quot; cx=&quot;8.42&quot; cy=&quot;8.13&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape28&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1414052368516 17.2710454963236)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.02 12.1647L3.45003 11.8747C1.14336 10.388 -0.00663785 8.42471 2.88184e-05 5.98471C0.0133622 3.09804 1.57336 1.13137 4.68003 0.0847059C10.1067 0.00470588 15.6967 -0.0186275 21.45 0.0147059C22.75 0.0247059 23.92 0.0247059 24.8 1.15471C27.1134 4.10804 27.24 7.30471 25.18 10.7447C24.5867 11.7314 23.5334 12.2047 22.02 12.1647Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape29&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.9485123620206 17.688515625)&quot; fill=&quot;rgb(8,7,7)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M94.2701 0L112.84 0.29C113.373 6.01 113.157 11.6167 112.19 17.11C110.957 24.1567 109.597 30.3733 108.11 35.76C106.843 40.3467 104.56 46.5667 101.26 54.42C98.5934 60.76 95.7234 66.4633 92.6501 71.53C74.9968 100.71 50.0768 121.763 17.8901 134.69C12.7801 136.32 5.23009 136.79 1.81009 132.18C-2.58991 126.21 1.72009 121.04 7.38009 118.61C18.6068 113.783 28.7468 108.023 37.8001 101.33C57.4201 86.8233 71.8068 69.5767 80.9601 49.59C87.6934 34.8833 92.1301 18.3533 94.2701 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape30&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9331058615201 20.210194296345)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.830544 4.59225C1.98054 2.02225 4.27054 0.202251 7.19054 0.0222511C13.5005 -0.367749 17.0705 4.44225 20.8405 8.69225C24.9205 13.2723 24.7505 19.4123 19.5605 22.8923C14.7605 26.1223 10.5505 23.2223 6.91054 19.4823C2.88054 15.3523 -1.96946 10.8623 0.830544 4.59225Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape31&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.6404577789765 21.5771484375)&quot; fill=&quot;rgb(8,7,7)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.07476 0C8.08142 5.61333 15.5614 10.35 23.5148 14.21C29.8681 17.29 36.3014 20.1933 42.8148 22.92C60.4748 30.32 77.6181 35.09 94.2448 37.23C109.971 39.2633 126.571 38.5767 144.045 35.17L147.645 35.08C147.945 35.0733 148.221 35.15 148.475 35.31C149.161 35.7233 149.338 36.3467 149.005 37.18C148.878 37.4867 148.938 37.7533 149.185 37.98C149.755 38.5 150.175 38.94 150.235 39.77C150.361 41.7967 150.618 43.8033 151.005 45.79C151.065 46.1233 150.975 46.4067 150.735 46.64C150.228 47.1467 149.631 47.4867 148.945 47.66C148.731 47.7133 148.631 47.85 148.645 48.07C148.658 48.2767 148.501 48.4167 148.175 48.49C148.041 48.5167 147.908 48.5333 147.775 48.54L145.005 48.63C144.678 48.6433 144.485 48.81 144.425 49.13C144.371 49.41 144.138 49.5633 143.725 49.59C143.659 49.5967 143.588 49.5933 143.515 49.58C141.015 49.2067 139.005 49.84 137.485 51.48C124.278 53.2267 112.368 53.5833 101.755 52.55C80.2748 50.4633 60.3014 44.84 41.8348 35.68C35.8281 32.7 28.6481 28.54 20.2948 23.2C14.0414 19.2067 7.30142 13.6633 0.0747565 6.57C0.0547565 4.57 -0.375243 1.5 1.07476 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape32&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.548046875 24.3846604970638)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M37.39 126.792L36.84 125.732C36.6867 125.445 36.61 125.139 36.61 124.812L36.29 50.1519C39.97 50.1319 42.74 50.0419 44.93 47.3519C46.0567 45.9652 46.4067 44.4152 45.98 42.7019C44.81 38.0219 40.08 37.5119 35.72 37.6019L35.91 26.2919C40.16 26.9019 44.77 27.8519 48.81 25.9619C52.26 24.3519 53.31 20.2319 50.85 17.2519C48.51 14.4319 45.36 14.2119 41.99 14.2719C35.7567 14.3852 29.3167 14.4052 22.67 14.3319C19.49 14.3019 16.81 15.9619 15.14 18.6319C15.2 16.6619 12.86 15.6819 11.44 14.7519C10.6133 14.2119 9.90667 13.5852 9.32 12.8719C6.57333 9.53188 3.78 6.23188 0.94 2.97188C0.46 2.41855 0.146667 1.62521 0 0.591879C17.1 3.24521 34.28 3.98188 51.54 2.80188C57.06 2.42188 62.3133 1.51855 67.3 0.0918792C68.18 -0.154787 68.3567 0.0952125 67.83 0.841879C58.7633 13.8352 53.49 29.3252 52.01 47.3119C50.37 67.3319 51 88.9819 56.8 107.652C58.81 114.142 62.13 120.072 65.01 126.212C65.0485 126.291 65.0589 126.382 65.0394 126.468C65.02 126.554 64.9718 126.631 64.9029 126.686C64.834 126.741 64.7483 126.772 64.66 126.772Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape33&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.486355851717 24.3923298330305)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.75477 0.373729C1.90143 1.40706 2.21477 2.2004 2.69477 2.75373C5.53477 6.01373 8.3281 9.31373 11.0748 12.6537C11.6614 13.3671 12.3681 13.9937 13.1948 14.5337C14.6148 15.4637 16.9548 16.4437 16.8948 18.4137L16.5848 19.0537C15.9714 19.3604 15.6748 19.8204 15.6948 20.4337C15.8148 23.3437 16.3448 26.1237 18.0248 28.6937C19.9714 31.6737 22.1714 34.5471 24.6248 37.3137C19.6548 39.6737 18.5548 46.9937 24.3448 49.3137C24.1981 53.2071 24.2048 57.1237 24.3648 61.0637C24.5581 65.7371 24.5748 69.6437 24.4148 72.7837C24.2014 77.0371 23.9914 81.3304 23.7848 85.6637C23.1248 99.8304 19.6748 113.244 13.4348 125.904C13.2814 126.21 13.0314 126.384 12.6848 126.424L11.5948 126.534L3.79477 126.534C3.66373 126.534 3.5364 126.49 3.43437 126.408C3.33234 126.325 3.26171 126.21 3.23447 126.082C3.20722 125.954 3.22499 125.82 3.28477 125.704C16.0848 100.784 18.1148 71.0737 14.6948 43.5737C12.8014 28.3737 7.92143 14.0371 0.0547669 0.563729C0.0152725 0.50031 -0.00361813 0.426609 0.000572506 0.352292C0.00476314 0.277975 0.0318434 0.20644 0.0782619 0.147067C0.12468 0.0876949 0.188315 0.0431997 0.26082 0.0194171C0.333326 -0.0043654 0.411387 -0.00634806 0.484767 0.0137292Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape34&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.0617214476865 24.8861307529877)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M21.2988 12.0278C16.7455 11.8878 12.1288 11.8545 7.44881 11.9278C4.74215 11.9678 2.94548 11.7312 2.05881 11.2178C0.238812 10.1645 -0.374521 8.0945 0.218812 5.00784L0.528812 4.36784C2.19881 1.69784 4.87881 0.0378364 8.05881 0.0678364C14.7055 0.14117 21.1455 0.12117 27.3788 0.00783636C30.7488 -0.0521636 33.8988 0.167836 36.2388 2.98784C38.6988 5.96784 37.6488 10.0878 34.1988 11.6978C30.1588 13.5878 25.5488 12.6378 21.2988 12.0278Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape35&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.038091694079 25.0621875000001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.890947 0C0.297614 3.08667 0.910947 5.15667 2.73095 6.21C3.61761 6.72333 5.41428 6.96 8.12095 6.92C12.8009 6.84667 17.4176 6.88 21.9709 7.02L21.7809 18.33L8.93095 18.26C6.47761 15.4933 4.27761 12.62 2.33095 9.64C0.650947 7.07 0.120947 4.29 0.000947368 1.38C-0.0190526 0.766667 0.277614 0.306667 0.890947 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape36&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.2047130847683 25.704140625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.19149 0L17.0415 0.07C21.4015 -0.02 26.1315 0.49 27.3015 5.17C27.7282 6.88333 27.3782 8.43333 26.2515 9.82C24.0615 12.51 21.2915 12.6 17.6115 12.62L3.91149 12C-1.87851 9.68 -0.778506 2.36 4.19149 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape37&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.893984375 26.126015625)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M12.75 0L26.45 0.62L26.77 75.28C26.77 75.6067 26.8467 75.9133 27 76.2L27.55 77.26L0 77.22L1.09 77.11C1.43667 77.07 1.68667 76.8967 1.84 76.59C8.08 63.93 11.53 50.5167 12.19 36.35C12.3967 32.0167 12.6067 27.7233 12.82 23.47C12.98 20.33 12.9633 16.4233 12.77 11.75C12.61 7.81 12.6033 3.89333 12.75 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape38&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.22640625 29.4324536132813)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M29.96 24.0302C30.7067 23.5835 30.1467 23.1702 28.28 22.7902C27.96 22.7235 27.6733 22.5835 27.42 22.3702C24.9333 20.2235 22.8967 18.7069 21.31 17.8202C12.91 13.1069 5.80667 7.21687 0 0.150208L30.09 0.000208333C30.4767 -0.00645833 30.7833 0.146875 31.01 0.460208C37.57 9.69354 45.7567 17.2435 55.57 23.1102C55.9433 23.3302 55.92 23.4969 55.5 23.6102C54.48 23.8769 53.4167 24.0135 52.31 24.0202C44.77 24.0669 37.32 24.0702 29.96 24.0302Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape39&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.2706541442871 29.4394921875)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M38.2747 0C35.2147 4.74667 31.2681 10.0433 26.4347 15.89C23.4547 19.49 20.7014 22.14 18.1747 23.84L0.754727 23.73C-0.17194 23.7233 -0.245273 23.4733 0.534727 22.98C9.87473 17.05 17.3747 9.52 24.9347 0.58C25.0571 0.432797 25.211 0.314351 25.3856 0.233119C25.5601 0.151886 25.7511 0.109846 25.9447 0.11Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape40&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.909609375 29.437734375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M65.9 0C71.7067 7.06667 78.81 12.9567 87.21 17.67C88.7967 18.5567 90.8333 20.0733 93.32 22.22C93.5733 22.4333 93.86 22.5733 94.18 22.64C96.0467 23.02 96.6067 23.4333 95.86 23.88L0 23.89C2.52667 22.19 5.28 19.54 8.26 15.94C13.0933 10.0933 17.04 4.79667 20.1 0.05Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape41&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.6264334548969 30.8390367406574)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M175.558 0.450733C176.245 0.450733 176.568 0.567399 176.528 0.800733C176.494 1.0303 176.388 1.24303 176.226 1.40826C176.065 1.5735 175.855 1.68291 175.628 1.72073C171.935 2.3474 168.581 2.65073 165.568 2.63073C163.998 2.62073 162.798 3.35073 161.188 3.18073C160.808 3.14073 160.445 3.20407 160.098 3.37073L158.488 4.16073C158.195 4.30073 157.958 4.50407 157.778 4.77073C157.045 5.85073 156.111 6.47073 154.978 6.63073C153.258 6.87073 151.491 6.99073 149.678 6.99073C111.858 6.8974 73.5681 6.84073 34.8081 6.82073C28.6781 6.82073 24.4281 9.63073 23.3181 15.9507L0.628115 15.8107C0.50059 15.8104 0.376138 15.7713 0.2713 15.6987C0.166463 15.626 0.0861025 15.5233 0.0409006 15.404C-0.00430136 15.2848 -0.0122487 15.1546 0.0181151 15.0307C2.16812 6.40073 10.0881 -0.0792673 19.0981 0.00073271C53.2181 0.314066 87.8014 0.380733 122.848 0.200733C140.421 0.114066 157.991 0.197399 175.558 0.450733Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape42&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.4462109375 30.8548828125)&quot; fill=&quot;rgb(15,11,8)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M152.24 0L253.08 0.15C253.047 2.17 252.56 3.72667 251.62 4.82C250.867 5.69333 249.93 6.13667 248.81 6.15C221.383 6.39 194.363 6.58667 167.75 6.74C167.283 6.74 167.03 6.97333 166.99 7.44C166.87 8.95333 167.113 10.3433 167.72 11.61C167.847 11.8833 167.89 12.1667 167.85 12.46L167.63 14.18C167.577 14.5867 167.74 14.86 168.12 15C168.573 15.1667 168.867 15.3533 169 15.56L0 15.5C1.11 9.18 5.36 6.37 11.49 6.37C50.25 6.39 88.54 6.44667 126.36 6.54C128.173 6.54 129.94 6.42 131.66 6.18C132.793 6.02 133.727 5.4 134.46 4.32C134.64 4.05333 134.877 3.85 135.17 3.71L136.78 2.92C137.127 2.75333 137.49 2.69 137.87 2.73C139.48 2.9 140.68 2.17 142.25 2.18C145.263 2.2 148.617 1.89667 152.31 1.27C152.537 1.23218 152.746 1.12277 152.908 0.957532C153.07 0.792295 153.175 0.579568 153.21 0.35C153.25 0.116667 152.927 -1.13687e-13 152.24 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape43&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 19.3159081135321 30.86015625)&quot; fill=&quot;rgb(8,7,7)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M86.1197 0C93.6331 3.14 98.2231 7.99667 99.8897 14.57C99.9181 14.684 99.9111 14.804 99.8698 14.914C99.8285 15.024 99.7547 15.1189 99.6583 15.186C99.5618 15.2532 99.4472 15.2894 99.3297 15.29L2.03972 15.41C1.90639 15.2033 1.61306 15.0167 1.15972 14.85C0.779725 14.71 0.616391 14.4367 0.669725 14.03L0.889725 12.31C0.929725 12.0167 0.886391 11.7333 0.759725 11.46C0.153058 10.1933 -0.0902752 8.80333 0.0297248 7.29C0.0697248 6.82333 0.323058 6.59 0.789725 6.59C27.4031 6.43667 54.4231 6.24 81.8497 6C82.9697 5.98667 83.9064 5.54333 84.6597 4.67C85.5997 3.57667 86.0864 2.02 86.1197 0Z&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt;&lt;div class=&quot;w-16 h-16&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;fill-[${rgbColor} w-16 h-16&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 36 36&quot;&gt; &lt;defs&gt;&lt;/defs&gt; &lt;path id=&quot;shape0&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 10.393984646722 3.24851063866497)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M384.119 800.308C389.392 800.401 395.079 800.381 401.179 800.248C405.299 800.161 408.469 800.568 410.689 801.468C415.949 803.598 420.779 810.198 420.289 816.268C419.669 823.858 412.349 829.318 404.999 829.328C277.499 829.355 146.952 829.355 13.3589 829.328C8.63888 829.328 4.09888 825.978 1.87888 822.058C-2.73112 813.888 1.52888 803.918 10.4389 801.028C11.9855 800.528 13.9555 800.285 16.3489 800.298C22.1289 800.338 27.6889 800.265 33.0289 800.078C33.1769 800.076 33.3188 800.017 33.4263 799.913C33.5337 799.809 33.5989 799.668 33.6089 799.518C33.7489 797.391 34.0889 795.351 34.6289 793.398C38.5755 779.138 46.7822 768.285 59.2489 760.838C67.2389 756.068 77.9989 753.418 87.8689 753.798C91.7089 753.938 95.6189 754.578 99.3589 753.338C121.612 745.945 138.126 732.518 148.899 713.058C160.649 691.848 162.149 664.098 156.689 640.298C150.949 615.338 135.539 594.358 113.659 581.418C104.759 576.151 97.1322 571.378 90.7789 567.098C79.8722 559.751 69.4389 550.391 59.4789 539.018C41.7922 518.825 28.7222 496.301 20.2689 471.448C13.2089 450.695 9.41555 429.945 8.88888 409.198C8.39555 389.938 9.51888 370.588 12.2589 351.148C15.7689 326.188 18.7489 301.968 22.2689 277.258C23.1955 270.798 23.9055 264.308 24.3989 257.788C25.2922 245.915 26.1489 234.441 26.9689 223.368C28.2189 206.548 28.2189 189.968 28.2289 172.948C28.229 172.665 28.1641 172.386 28.0392 172.133C27.9143 171.88 27.7328 171.659 27.5089 171.488C4.71888 154.278 -3.35112 123.728 10.2489 97.8679C21.8189 75.8479 44.3589 62.0579 69.5789 63.3579C72.9922 63.5379 76.3389 64.1179 79.6189 65.0979C79.7826 65.1468 79.9567 65.1513 80.1235 65.1109C80.2903 65.0705 80.4439 64.9867 80.5689 64.8679C95.3422 50.8279 113.322 44.9613 134.509 47.2679C134.656 47.2852 134.804 47.2536 134.932 47.1778C135.061 47.102 135.161 46.9862 135.219 46.8479C136.972 42.6213 139.372 38.5079 142.419 34.5079C153.299 20.2379 166.749 9.32792 184.089 3.97792C204.569 -2.34875 224.312 -1.12875 243.319 7.63792C258.599 14.6779 272.559 26.6579 280.469 41.6579C280.596 41.9046 280.792 41.9846 281.059 41.8979C289.839 38.9646 299.389 37.9446 309.709 38.8379C326.729 40.3079 342.309 50.4379 353.989 63.2879C354.516 63.8679 355.166 64.1746 355.939 64.2079C361.419 64.4546 366.656 65.5513 371.649 67.4979C392.199 75.5079 406.519 91.1379 411.669 112.968C413.189 119.421 413.456 125.841 412.469 132.228C409.882 148.975 401.956 162.205 388.689 171.918C387.729 172.628 387.729 173.468 387.719 174.528C387.586 191.895 387.899 207.108 388.659 220.168C389.549 235.238 390.999 253.908 393.189 270.758C396.622 297.205 400.169 324.231 403.829 351.838C404.689 358.351 405.536 366.615 406.369 376.628C407.042 384.655 407.406 391.321 407.459 396.628C407.679 420.268 404.476 443.035 397.849 464.928C386.419 502.718 363.929 536.538 333.029 561.268C324.009 568.498 312.959 575.088 302.869 581.488C297.502 584.888 292.979 588.131 289.299 591.218C265.139 611.508 255.039 640.758 256.429 672.398C258.039 709.018 277.959 738.488 312.639 751.718C317.389 753.528 321.449 754.508 326.659 754.038C338.269 753.008 349.089 755.608 359.129 762.058C371.639 770.088 381.589 784.038 383.299 799.558C383.352 800.045 383.626 800.295 384.119 800.308ZM34.9389 123.938C34.6255 130.038 36.5689 135.461 40.7689 140.208C42.9155 142.635 45.5089 143.855 48.5489 143.868C57.4489 143.895 67.6722 143.898 79.2189 143.878C80.8589 143.878 81.9889 142.308 82.5389 140.958C82.6855 140.585 82.6522 140.231 82.4389 139.898C80.5522 136.978 80.8189 134.321 83.2389 131.928C87.7189 127.508 91.8289 130.808 94.8789 134.678C97.7389 138.308 103.749 143.708 108.819 143.768C117.746 143.855 126.882 143.871 136.229 143.818C142.909 143.768 150.429 136.098 154.769 131.618C156.269 130.068 158.029 129.188 160.259 129.608C164.159 130.328 166.106 132.778 166.099 136.958C166.099 138.248 165.299 139.248 164.549 140.218C164.261 140.59 164.13 141.06 164.184 141.527C164.239 141.994 164.474 142.422 164.839 142.718C166.006 143.678 167.326 144.148 168.799 144.128C196.979 143.828 224.629 143.751 251.749 143.898C253.509 143.905 255.106 143.581 256.539 142.928C256.721 142.847 256.872 142.708 256.969 142.533C257.065 142.358 257.101 142.155 257.073 141.955C257.044 141.756 256.951 141.571 256.809 141.428C253.879 138.498 254.059 132.908 257.859 130.608C262.999 127.498 266.539 130.248 269.939 133.818C274.619 138.718 280.959 143.828 287.779 143.838C296.859 143.865 305.789 143.868 314.569 143.848C321.399 143.828 328.259 136.098 332.759 131.638C335.086 129.338 337.459 128.821 339.879 130.088C343.819 132.161 344.612 135.195 342.259 139.188C342.08 139.495 341.983 139.844 341.98 140.198C341.976 140.552 342.066 140.901 342.239 141.208C343.319 143.118 344.959 144.088 347.179 144.068C354.066 144.001 361.086 143.928 368.239 143.848C370.352 143.821 372.149 143.235 373.629 142.088C379.589 137.488 382.416 131.278 382.109 123.458C381.969 109.928 371.589 99.2079 359.169 95.4779C358.953 95.4151 358.724 95.4137 358.51 95.4738C358.296 95.534 358.105 95.6534 357.959 95.8179C355.212 98.9446 351.706 100.435 347.439 100.288C341.069 100.068 338.009 96.4579 335.789 91.1479C332.202 82.5946 326.232 76.3279 317.879 72.3479C307.626 67.4546 296.802 67.5779 285.409 72.7179C282.069 74.2179 279.519 77.4279 276.309 79.4679C269.159 84.0279 261.339 79.8879 260.179 71.8979C258.606 61.0979 253.279 51.6813 244.199 43.6479C217.109 19.6679 175.399 28.6579 160.839 61.6279C158.766 66.3279 157.699 70.8946 157.639 75.3279C157.559 80.8679 155.339 86.2279 149.929 88.1679C144.262 90.2146 139.372 89.0513 135.259 84.6779C133.749 83.0679 132.859 81.0279 131.499 79.3379C131.286 79.0646 131.012 78.8779 130.679 78.7779C128.472 78.1113 126.346 77.8213 124.299 77.9079C113.326 78.3813 104.429 83.1579 97.6089 92.2379C94.2189 96.7479 94.0089 102.468 90.0089 106.458C86.8589 109.588 81.6689 110.618 77.7089 108.488C73.0155 105.968 70.9422 101.938 71.4889 96.3979C71.5755 95.5313 71.1922 95.0446 70.3389 94.9379C59.7789 93.5446 50.8422 96.5046 43.5289 103.818C38.0555 109.291 35.1922 115.998 34.9389 123.938ZM70.3189 172.868L60.5489 172.868C60.0022 172.868 59.7255 173.141 59.7189 173.688C59.4855 194.395 58.5655 214.878 56.9589 235.138C56.6655 238.818 56.5355 242.431 56.5689 245.978C56.5689 246.378 56.7689 246.578 57.1689 246.578L287.389 246.598L306.739 246.558L315.789 246.558C316.622 246.558 317.009 246.145 316.949 245.318C315.196 221.491 313.862 197.675 312.949 173.868C312.939 173.596 312.822 173.339 312.625 173.151C312.427 172.963 312.163 172.858 311.889 172.858L302.559 172.868L102.799 172.818L85.9489 172.788ZM345.659 172.918L336.369 172.938C335.276 172.938 334.742 173.485 334.769 174.578C335.302 197.585 336.822 220.561 339.329 243.508C339.429 244.421 339.629 245.291 339.929 246.118C339.981 246.258 340.075 246.379 340.199 246.463C340.322 246.547 340.469 246.591 340.619 246.588L349.349 246.478L358.959 246.388C359.056 246.388 359.152 246.362 359.234 246.311C359.317 246.259 359.384 246.186 359.427 246.099C359.47 246.012 359.488 245.915 359.479 245.818C358.169 231.648 357.729 217.678 356.929 203.398C356.396 193.905 356.209 183.971 356.369 173.598C356.371 173.466 356.337 173.335 356.273 173.221C356.208 173.106 356.114 173.011 356.001 172.945C355.888 172.88 355.759 172.846 355.629 172.848ZM285.139 272.498L66.0789 272.778L56.5789 272.838C56.2688 272.842 55.9676 272.941 55.7169 273.122C55.4662 273.302 55.2782 273.556 55.1789 273.848C53.5922 278.475 52.3889 283.555 51.5689 289.088C50.7689 294.528 50.0622 299.925 49.4489 305.278C45.8889 336.418 40.7589 367.688 40.1089 398.048C39.6822 418.115 42.5555 438.068 48.7289 457.908C57.0789 484.768 71.6889 508.708 92.4189 527.918C99.6455 535.011 106.386 540.555 112.639 544.548C120.992 549.888 128.172 554.048 134.179 557.028C152.646 566.188 172.619 571.811 194.099 573.898C204.712 574.931 216.622 574.575 229.829 572.828C240.356 571.415 249.986 569.291 258.719 566.458C291.679 555.758 320.169 534.368 341.689 507.238C357.689 487.038 368.109 461.898 373.119 436.298C376.719 417.938 377.099 398.938 375.549 380.068C373.189 351.368 369.499 324.108 365.409 293.848C364.422 286.581 363.209 279.731 361.769 273.298C361.729 273.128 361.634 272.976 361.499 272.867C361.365 272.758 361.199 272.699 361.029 272.698ZM175.049 601.798L173.779 601.438C173.706 601.418 173.627 601.42 173.555 601.444C173.482 601.467 173.419 601.512 173.372 601.571C173.326 601.631 173.299 601.702 173.295 601.776C173.29 601.851 173.309 601.925 173.349 601.988C181.216 615.461 186.096 629.798 187.989 644.998C191.409 672.498 189.379 702.208 176.579 727.128C176.519 727.245 176.501 727.378 176.529 727.506C176.556 727.635 176.626 727.75 176.728 727.832C176.831 727.914 176.958 727.959 177.089 727.958L184.889 727.958L212.439 727.998L239.709 727.978C239.797 727.978 239.883 727.947 239.952 727.892C240.021 727.837 240.069 727.76 240.088 727.674C240.108 727.588 240.097 727.497 240.059 727.418C237.179 721.278 233.859 715.348 231.849 708.858C226.049 690.188 225.419 668.538 227.059 648.518C228.539 630.531 233.812 615.041 242.879 602.048C243.406 601.301 243.229 601.051 242.349 601.298C237.362 602.725 232.109 603.628 226.589 604.008C209.329 605.188 192.149 604.451 175.049 601.798ZM222.789 744.938L176.989 744.988L164.659 745.098C164.465 745.098 164.274 745.14 164.1 745.221C163.925 745.302 163.771 745.421 163.649 745.568C156.089 754.508 148.589 762.038 139.249 767.968C138.469 768.461 138.542 768.711 139.469 768.718L156.889 768.828L252.749 768.818C260.109 768.858 267.559 768.855 275.099 768.808C276.206 768.801 277.269 768.665 278.289 768.398C278.709 768.285 278.732 768.118 278.359 767.898C268.546 762.031 260.359 754.481 253.799 745.248C253.572 744.935 253.266 744.781 252.879 744.788ZM86.8189 800.748L255.819 800.808L353.109 800.688C353.226 800.687 353.341 800.651 353.437 800.584C353.534 800.517 353.608 800.422 353.649 800.312C353.69 800.202 353.697 800.082 353.669 799.968C352.002 793.395 347.412 788.538 339.899 785.398L239.059 785.248C221.492 784.995 203.922 784.911 186.349 784.998C151.302 785.178 116.719 785.111 82.5989 784.798C73.5889 784.718 65.6689 791.198 63.5189 799.828C63.4885 799.952 63.4965 800.082 63.5417 800.201C63.5869 800.32 63.6672 800.423 63.7721 800.496C63.8769 800.568 64.0014 800.608 64.1289 800.608Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape1&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6223046875 4.3066710451255)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.17 93.3591L341.7 94.8091C341.347 94.9025 341.043 95.0758 340.79 95.3291C334.81 101.209 327.56 101.079 319.06 100.739C316.15 100.619 313.98 99.6891 312.72 96.9491C310.21 91.4791 305.03 84.9891 298.07 88.5091C296.217 89.4491 294.677 90.6225 293.45 92.0291C288.01 98.2791 282.29 103.559 274.1 105.299C270.267 106.112 266.1 106.416 261.6 106.209C253.04 105.819 244.67 101.199 239.15 94.8491C232.37 87.0391 226.88 84.2491 219.24 92.9691C214.89 97.9391 209.89 101.049 202.97 101.219C196.37 101.379 189.917 101.426 183.61 101.359C182.93 101.352 182.43 100.989 182.11 100.269C182.01 100.04 181.975 99.7876 182.008 99.5391C182.042 99.2906 182.143 99.0554 182.3 98.8591C183.04 97.9325 183.813 97.0725 184.62 96.2791C187.09 93.8491 185.64 89.9291 183.51 87.8291C180.65 85.0091 175.91 85.9891 173.39 88.9391C172.23 90.2925 171.17 91.6391 170.21 92.9791C163.5 102.299 152.67 101.929 142.47 100.679C134.9 99.7591 131.64 94.3891 126.62 89.6591C123.633 86.8525 120.593 86.8391 117.5 89.6191C112.63 93.9791 108.24 99.7591 102.47 102.719C88.07 110.129 72.61 106.679 62.57 94.0391C58.62 89.0591 52.95 85.2191 47.21 90.7591C44.54 93.3491 43.94 96.9991 40.53 99.0891C36.59 101.509 29.55 101.139 24.26 101.029C18.64 100.899 13.25 100.999 9.85 97.1991C7.82 94.9191 4 93.8291 2.11 96.9691C1.02333 98.7691 0.446667 98.6225 0.38 96.5291C0.366667 95.9891 0.24 95.0925 0 93.8391C0.253333 85.8991 3.11667 79.1925 8.59 73.7191C15.9033 66.4058 24.84 63.4458 35.4 64.8391C36.2533 64.9458 36.6367 65.4325 36.55 66.2991C36.0033 71.8391 38.0767 75.8691 42.77 78.3891C46.73 80.5191 51.92 79.4891 55.07 76.3591C59.07 72.3691 59.28 66.6491 62.67 62.1391C69.49 53.0591 78.3867 48.2825 89.36 47.8091C91.4067 47.7225 93.5333 48.0125 95.74 48.6791C96.0733 48.7791 96.3467 48.9658 96.56 49.2391C97.92 50.9291 98.81 52.9691 100.32 54.5791C104.433 58.9525 109.323 60.1158 114.99 58.0691C120.4 56.1291 122.62 50.7691 122.7 45.2291C122.76 40.7958 123.827 36.2291 125.9 31.5291C140.46 -1.44087 182.17 -10.4309 209.26 13.5491C218.34 21.5825 223.667 30.9991 225.24 41.7991C226.4 49.7891 234.22 53.9291 241.37 49.3691C244.58 47.3291 247.13 44.1191 250.47 42.6191C261.863 37.4791 272.687 37.3558 282.94 42.2491C291.293 46.2291 297.263 52.4958 300.85 61.0491C303.07 66.3591 306.13 69.9691 312.5 70.1891C316.767 70.3358 320.273 68.8458 323.02 65.7191C323.166 65.5546 323.357 65.4352 323.571 65.3751C323.785 65.3149 324.014 65.3163 324.23 65.3791C336.65 69.1091 347.03 79.8291 347.17 93.3591Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape2&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6211575655465 7.33540715628013)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.203 7.20842C347.509 15.0284 344.683 21.2384 338.723 25.8384C337.243 26.9851 335.446 27.5718 333.333 27.5984C326.179 27.6784 319.159 27.7518 312.273 27.8184C310.053 27.8384 308.413 26.8684 307.333 24.9584C307.159 24.651 307.07 24.3028 307.074 23.9484C307.077 23.594 307.173 23.2458 307.353 22.9384C309.706 18.9451 308.913 15.9118 304.973 13.8384C302.553 12.5718 300.179 13.0884 297.853 15.3884C293.353 19.8484 286.493 27.5784 279.663 27.5984C270.883 27.6184 261.953 27.6151 252.873 27.5884C246.053 27.5784 239.713 22.4684 235.033 17.5684C231.633 13.9984 228.093 11.2484 222.953 14.3584C219.153 16.6584 218.973 22.2484 221.903 25.1784C222.045 25.3214 222.137 25.5067 222.166 25.706C222.195 25.9053 222.159 26.108 222.062 26.2834C221.966 26.4588 221.815 26.5975 221.633 26.6784C220.199 27.3318 218.603 27.6551 216.843 27.6484C189.723 27.5018 162.073 27.5784 133.893 27.8784C132.419 27.8984 131.099 27.4284 129.933 26.4684C129.567 26.1723 129.332 25.7446 129.278 25.2775C129.224 24.8105 129.355 24.3403 129.643 23.9684C130.393 22.9984 131.193 21.9984 131.193 20.7084C131.199 16.5284 129.253 14.0784 125.353 13.3584C123.123 12.9384 121.363 13.8184 119.863 15.3684C115.523 19.8484 108.003 27.5184 101.323 27.5684C91.976 27.6218 82.8393 27.6051 73.9126 27.5184C68.8426 27.4584 62.8326 22.0584 59.9726 18.4284C56.9226 14.5584 52.8126 11.2584 48.3326 15.6784C45.9126 18.0718 45.646 20.7284 47.5326 23.6484C47.746 23.9818 47.7793 24.3351 47.6326 24.7084C47.0826 26.0584 45.9526 27.6284 44.3126 27.6284C32.766 27.6484 22.5426 27.6451 13.6426 27.6184C10.6026 27.6051 8.0093 26.3851 5.86263 23.9584C1.66263 19.2118 -0.280704 13.7884 0.0326292 7.68842C0.272629 8.94175 0.399296 9.83842 0.412629 10.3784C0.479296 12.4718 1.05596 12.6184 2.14263 10.8184C4.03263 7.67842 7.85263 8.76842 9.88263 11.0484C13.2826 14.8484 18.6726 14.7484 24.2926 14.8784C29.5826 14.9884 36.6226 15.3584 40.5626 12.9384C43.9726 10.8484 44.5726 7.19842 47.2426 4.60842C52.9826 -0.931581 58.6526 2.90842 62.6026 7.88842C72.6426 20.5284 88.1026 23.9784 102.503 16.5684C108.273 13.6084 112.663 7.82842 117.533 3.46842C120.626 0.688419 123.666 0.701752 126.653 3.50842C131.673 8.23842 134.933 13.6084 142.503 14.5284C152.703 15.7784 163.533 16.1484 170.243 6.82842C171.203 5.48842 172.263 4.14175 173.423 2.78842C175.943 -0.161581 180.683 -1.14158 183.543 1.67842C185.673 3.77842 187.123 7.69842 184.653 10.1284C183.846 10.9218 183.073 11.7818 182.333 12.7084C182.175 12.9047 182.074 13.1399 182.041 13.3884C182.007 13.6369 182.043 13.8894 182.143 14.1184C182.463 14.8384 182.963 15.2018 183.643 15.2084C189.949 15.2751 196.403 15.2284 203.003 15.0684C209.923 14.8984 214.923 11.7884 219.273 6.81842C226.913 -1.90158 232.403 0.888419 239.183 8.69842C244.703 15.0484 253.073 19.6684 261.633 20.0584C266.133 20.2651 270.299 19.9618 274.133 19.1484C282.323 17.4084 288.043 12.1284 293.483 5.87842C294.709 4.47175 296.249 3.29842 298.103 2.35842C305.063 -1.16158 310.243 5.32842 312.753 10.7984C314.013 13.5384 316.183 14.4684 319.093 14.5884C327.593 14.9284 334.843 15.0584 340.823 9.17842C341.076 8.92509 341.379 8.75175 341.733 8.65842Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape3&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.7941352600339 9.3230859375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M17.6779 0C16.5513 11.84 15.9213 19.36 15.7879 22.56C15.3079 33.9733 14.6346 46.28 13.7679 59.48C13.6013 62.04 13.1046 63.7467 12.2779 64.6C8.55793 68.45 -0.30207 67.53 0.00793038 61.06C1.34793 33.3133 2.02793 12.9867 2.04793 0.08Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape4&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9413128810975 9.32414062500001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M201.657 0.05C201.63 7.10333 201.687 11.5967 201.827 13.53C203.28 33.53 204.617 53.6 205.837 73.74L186.487 73.78L193.557 73.61C193.714 73.6076 193.867 73.5609 193.998 73.4752C194.129 73.3896 194.234 73.2685 194.299 73.126C194.364 72.9835 194.388 72.8254 194.367 72.67C193.367 64.75 192.894 56.7733 192.947 48.74C196.9 43.82 196.69 38.93 192.317 34.07C191.537 32.47 191.137 31.2867 191.117 30.52C190.984 25.7933 191.01 21.2667 191.197 16.94C191.213 16.5684 191.128 16.1993 190.951 15.872C190.773 15.5446 190.51 15.2711 190.189 15.0807C189.868 14.8902 189.501 14.7897 189.127 14.79L153.317 14.9C152.777 12.9667 151.747 11.28 150.227 9.84C148.927 8.60667 147.257 7.7 145.217 7.12C138.364 5.17333 133.557 7.71667 130.797 14.75C116.39 14.8967 101.944 14.9467 87.4571 14.9C61.1271 14.81 34.7871 15.13 8.5371 15.06C6.00377 15.0533 4.15377 14.7633 2.9871 14.19C0.773767 13.11 -0.209566 11.2233 0.0371003 8.53C0.150434 7.29667 0.770434 4.45333 1.8971 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape5&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.5460546875 9.32519283839548)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M3.69 73.6301L0 0.0700704L9.97 7.03745e-05C10.1004 -0.00175254 10.2289 0.031869 10.3421 0.0974247C10.4553 0.16298 10.5492 0.258107 10.6139 0.372872C10.6786 0.487637 10.7118 0.617903 10.71 0.75007C10.55 11.1234 10.7367 21.0567 11.27 30.5501C12.07 44.8301 12.51 58.8001 13.82 72.9701C13.8293 73.0668 13.8114 73.1643 13.7681 73.2514C13.7249 73.3384 13.6581 73.4116 13.5754 73.4627C13.4926 73.5137 13.3972 73.5405 13.3 73.5401Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape6&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.3825550063776 9.3230859375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M13.7551 0.08C13.7351 12.9867 13.0551 33.3133 11.7151 61.06C11.4051 67.53 20.2651 68.45 23.9851 64.6C24.8118 63.7467 25.3084 62.04 25.4751 59.48C26.3418 46.28 27.0151 33.9733 27.4951 22.56C27.6284 19.36 28.2584 11.84 29.3851 0L46.2351 0.03C45.1084 4.48333 44.4884 7.32667 44.3751 8.56C44.1284 11.2533 45.1118 13.14 47.3251 14.22C48.4918 14.7933 50.3418 15.0833 52.8751 15.09C79.1251 15.16 105.465 14.84 131.795 14.93C146.282 14.9767 160.728 14.9267 175.135 14.78C174.568 20.8133 176.498 24.9267 180.925 27.12C183.338 28.3133 185.805 28.72 188.325 28.34C194.755 27.36 198.095 21.26 197.655 14.93L233.465 14.82C233.839 14.8197 234.206 14.9202 234.527 15.1107C234.848 15.3011 235.111 15.5746 235.289 15.902C235.466 16.2293 235.551 16.5984 235.535 16.97C235.348 21.2967 235.322 25.8233 235.455 30.55C235.475 31.3167 235.875 32.5 236.655 34.1C232.788 31.5133 229.168 30.99 225.795 32.53C211.935 38.83 224.195 59.55 237.285 48.77C237.232 56.8033 237.705 64.78 238.705 72.7C238.726 72.8554 238.702 73.0135 238.637 73.156C238.572 73.2985 238.467 73.4196 238.336 73.5052C238.205 73.5909 238.052 73.6376 237.895 73.64L230.825 73.81L0.605102 73.79C0.205102 73.79 0.00510204 73.59 0.00510204 73.19C-0.0282313 69.6433 0.101769 66.03 0.395102 62.35C2.00177 42.09 2.92177 21.6067 3.1551 0.9C3.16177 0.353333 3.43844 0.08 3.9851 0.08ZM127.005 36.5C127.005 34.413 126.456 32.3624 125.412 30.555C124.369 28.7476 122.867 27.2464 121.06 26.203C119.253 25.1595 117.202 24.61 115.115 24.61C111.963 24.61 108.937 25.8635 106.708 28.0925C104.479 30.3215 103.225 33.3478 103.225 36.5C103.225 39.6522 104.479 42.6785 106.708 44.9075C108.937 47.1365 111.963 48.39 115.115 48.39C117.202 48.39 119.253 47.8405 121.06 46.797C122.867 45.7536 124.369 44.2524 125.412 42.445C126.456 40.6376 127.005 38.587 127.005 36.5ZM75.9704 37.4184C76.0574 34.3019 74.8637 31.2741 72.6541 29.007C70.4445 26.7398 67.3954 25.4143 64.1835 25.3246C62.057 25.2652 59.9523 25.7501 58.0818 26.7303C56.2114 27.7105 54.6403 29.152 53.5271 30.9092C52.414 32.6664 51.7974 34.6782 51.7398 36.7416C51.6528 39.8581 52.8465 42.8859 55.0561 45.153C57.2657 47.4202 60.3148 48.7457 63.5267 48.8354C65.6532 48.8948 67.7579 48.4099 69.6284 47.4297C71.4988 46.4495 73.0699 45.008 74.1831 43.2508C75.2962 41.4936 75.9128 39.4818 75.9704 37.4184ZM183.874 50.7982C183.856 49.4819 183.468 48.1937 182.749 47.0635C182.03 45.9334 181.006 45.0007 179.779 44.3595C178.552 43.7184 177.166 43.3911 175.76 43.4107C173.637 43.4404 171.61 44.2595 170.128 45.6863C168.646 47.1131 167.828 49.0336 167.856 51.0218C167.874 52.3381 168.262 53.6263 168.981 54.7565C169.7 55.8866 170.725 56.8193 171.951 57.4605C173.178 58.1016 174.564 58.4289 175.97 58.4093C178.093 58.3796 180.121 57.5605 181.603 56.1337C183.084 54.7069 183.902 52.7864 183.874 50.7982Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape7&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.0305953125001 9.32554685349047)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.0064 0.0100006L9.3364 6.11826e-07C9.61064 -0.000292647 9.87453 0.104847 10.0721 0.293135C10.2697 0.481423 10.3861 0.738544 10.3964 1.01C11.3097 24.8167 12.6431 48.6333 14.3964 72.46C14.4564 73.2867 14.0697 73.7 13.2364 73.7L4.1864 73.7C2.9664 53.56 1.62973 33.49 0.1764 13.49C0.0364 11.5567 -0.0202667 7.06333 0.0064 0.0100006Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape8&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1631696428572 9.32765624999999)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M10.891 0L14.581 73.56L5.85095 73.67C5.70139 73.6731 5.55452 73.6294 5.43088 73.5452C5.30724 73.461 5.21287 73.3403 5.16095 73.2C4.86095 72.3733 4.66095 71.5033 4.56095 70.59C2.05429 47.6433 0.534286 24.6667 0.000952381 1.66C-0.0257143 0.566667 0.507619 0.02 1.60095 0.02Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape9&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.5362571970961 9.55219950584632)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.6165 8.41299C23.0565 14.743 19.7165 20.843 13.2865 21.823C10.7665 22.203 8.2998 21.7963 5.88646 20.603C1.4598 18.4097 -0.470205 14.2963 0.0964619 8.26299C2.85646 1.22966 7.66313 -1.31367 14.5165 0.632992C16.5565 1.21299 18.2265 2.11966 19.5265 3.35299C21.0465 4.79299 22.0765 6.47966 22.6165 8.41299Z&quot;&gt;&lt;/path&gt; &lt;circle id=&quot;shape10&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.0115625 10.18828125)&quot; r=&quot;11.89&quot; cx=&quot;11.89&quot; cy=&quot;11.89&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape11&quot; transform=&quot;matrix(0.0351425431068875 0.000981620111375468 -0.000981620111375468 0.0351425431068875 14.2130771675543 10.2015061448131)&quot; rx=&quot;12.12&quot; ry=&quot;11.76&quot; cx=&quot;12.12&quot; cy=&quot;11.76&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape12&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 20.1057469902912 10.4364122450525)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M16.9732 2.43205C21.3465 7.29205 21.5565 12.1821 17.6032 17.1021C4.5132 27.8821 -7.7468 7.16205 6.1132 0.862052C9.48653 -0.677948 13.1065 -0.154615 16.9732 2.43205Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape13&quot; transform=&quot;matrix(0.0351528231097021 -0.000490857902548076 0.000490857902548076 0.0351528231097021 18.2800569526222 10.8531762234766)&quot; rx=&quot;8.01&quot; ry=&quot;7.5&quot; cx=&quot;8.01&quot; cy=&quot;7.5&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape14&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.47390625 12.828515625)&quot; fill=&quot;rgb(4,5,4)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0 300.33C1.52 298.69 3.53 298.057 6.03 298.43C6.10297 298.443 6.17377 298.447 6.24 298.44C6.65333 298.413 6.88667 298.26 6.94 297.98C7 297.66 7.19333 297.493 7.52 297.48L10.29 297.39C10.4233 297.383 10.5567 297.367 10.69 297.34C11.0167 297.267 11.1733 297.127 11.16 296.92C11.1467 296.7 11.2467 296.563 11.46 296.51C12.1467 296.337 12.7433 295.997 13.25 295.49C13.49 295.257 13.58 294.973 13.52 294.64C13.1333 292.653 12.8767 290.647 12.75 288.62C12.69 287.79 12.27 287.35 11.7 286.83C11.4533 286.603 11.3933 286.337 11.52 286.03C11.8533 285.197 11.6767 284.573 10.99 284.16C10.7367 284 10.46 283.923 10.16 283.93L6.56 284.02C15.1 281.92 21.0833 280.04 24.51 278.38C27.5033 276.927 30.4033 275.357 33.21 273.67C33.319 273.603 33.3974 273.495 33.4282 273.371C33.4589 273.246 33.4397 273.115 33.3746 273.004C33.3096 272.894 33.2037 272.813 33.08 272.78C32.5067 272.62 31.9433 272.67 31.39 272.93C63.5767 260.003 88.4967 238.95 106.15 209.77C109.223 204.703 112.093 199 114.76 192.66C118.06 184.807 120.343 178.587 121.61 174C123.097 168.613 124.457 162.397 125.69 155.35C126.657 149.857 126.873 144.25 126.34 138.53C127.853 138.57 128.907 138.097 129.5 137.11C131.56 133.67 131.433 130.473 129.12 127.52C128.24 126.39 127.07 126.39 125.77 126.38C120.017 126.347 114.427 126.37 109 126.45C108.613 125.77 108.27 125.09 107.97 124.41C107.69 123.77 107.527 123.037 107.48 122.21C106.953 112.977 106.213 103.723 105.26 94.45C110.127 94.5633 114.617 94.5833 118.73 94.51C121.27 94.47 123.93 94.86 126 93.31C128.053 91.77 128.717 89.61 127.99 86.83C127.23 83.89 124.98 82.2967 121.24 82.05L120.9 72.32C124.973 70.3667 126.23 67.5767 124.67 63.95C123.697 61.6833 121.82 60.52 119.04 60.46C117.273 58.24 116.223 56.5633 115.89 55.43C113.43 47.1033 110.547 38.9133 107.24 30.86C106.947 30.1467 107 29.0333 107.4 27.52C109.087 27.4933 110.883 27.5267 112.79 27.62C115.45 27.7533 117.403 26.9667 118.65 25.26C121.02 22.01 120.02 17.98 116.55 16.23C115.597 15.75 114.193 15.5133 112.34 15.52C107.533 15.54 102.823 15.4767 98.21 15.33C97.6033 13.9433 96.9433 12.6033 96.23 11.31C94.38 7.96 93.99 4.82 92.56 1.46C92.4467 1.18667 92.5067 0.963333 92.74 0.79L93.19 0.46C93.4567 0.273333 93.4267 0.176667 93.1 0.17L55.31 0L131.2 0.2C131.371 0.200762 131.536 0.26037 131.671 0.369176C131.805 0.477981 131.9 0.629779 131.94 0.8C133.38 7.23333 134.593 14.0833 135.58 21.35C139.67 51.61 143.36 78.87 145.72 107.57C147.27 126.44 146.89 145.44 143.29 163.8C138.28 189.4 127.86 214.54 111.86 234.74C90.34 261.87 61.85 283.26 28.89 293.96C20.1567 296.793 10.5267 298.917 0 300.33Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape15&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.2758764491296 12.828515625)&quot; fill=&quot;rgb(8,7,7)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M231.61 0L269.4 0.17C269.726 0.176667 269.756 0.273333 269.49 0.46L269.04 0.79C268.806 0.963333 268.746 1.18667 268.86 1.46C270.29 4.82 270.68 7.96 272.53 11.31C273.243 12.6033 273.903 13.9433 274.51 15.33C268.76 17.07 269.07 27.78 275.82 27.53C278.38 27.43 281.006 27.4267 283.7 27.52C283.3 29.0333 283.246 30.1467 283.54 30.86C286.846 38.9133 289.73 47.1033 292.19 55.43C292.523 56.5633 293.573 58.24 295.34 60.46C290.98 60.76 286.806 61.0267 282.82 61.26C277.7 61.56 274.45 67.2 278.08 71.26C278.86 72.1333 280.413 72.6 282.74 72.66C287.386 72.7733 292.206 72.66 297.2 72.32L297.54 82.05C293.013 81.9567 288.443 81.9633 283.83 82.07C281.84 82.11 280.61 82.75 279.5 84.26C276.44 88.44 277.126 91.8367 281.56 94.45C282.513 103.723 283.253 112.977 283.78 122.21C283.826 123.037 283.99 123.77 284.27 124.41C284.57 125.09 284.913 125.77 285.3 126.45C282.193 127.497 280.633 129.463 280.62 132.35C280.613 134.79 281.763 136.753 284.07 138.24C281.93 156.593 277.493 173.123 270.76 187.83C261.606 207.817 247.22 225.063 227.6 239.57C218.546 246.263 208.406 252.023 197.18 256.85C191.52 259.28 187.21 264.45 191.61 270.42C195.03 275.03 202.58 274.56 207.69 272.93C208.243 272.67 208.806 272.62 209.38 272.78C209.503 272.813 209.609 272.894 209.674 273.004C209.739 273.115 209.758 273.246 209.728 273.371C209.697 273.495 209.619 273.603 209.51 273.67C206.703 275.357 203.803 276.927 200.81 278.38C197.383 280.04 191.4 281.92 182.86 284.02C165.386 287.427 148.786 288.113 133.06 286.08C116.433 283.94 99.2895 279.17 81.6295 271.77C75.1162 269.043 68.6828 266.14 62.3295 263.06C54.3762 259.2 46.8962 254.463 39.8895 248.85C40.5695 248.377 41.3595 247.947 42.2595 247.56C44.5695 246.55 46.3695 244.3 44.1695 241.99C29.1962 226.303 18.1928 209.247 11.1595 190.82C1.95285 166.687 -1.55715 141.62 0.629514 115.62C2.01618 99.0867 3.45618 82.5733 4.94951 66.08C5.49618 59.9533 6.20618 53.32 7.07951 46.18C8.95285 30.8733 10.7762 15.5733 12.5495 0.28ZM230.747 11.7302C228.758 9.7412 226.058 8.62261 223.245 8.62261C220.432 8.62261 217.731 9.7412 215.742 11.7302L213.89 13.5829C211.901 15.5719 210.782 18.2724 210.782 21.0853C210.782 23.8982 211.901 26.5987 213.89 28.5877L215.092 29.7898C217.081 31.7788 219.781 32.8974 222.594 32.8974C225.407 32.8974 228.108 31.7788 230.097 29.7898L231.949 27.9371C233.938 25.9481 235.057 23.2476 235.057 20.4347C235.057 17.6218 233.938 14.9213 231.949 12.9323ZM47.1595 186.78C39.7128 170.84 35.7195 154.833 35.1795 138.76C34.9528 131.94 35.0895 124.72 35.5895 117.1C37.1495 93.44 39.2662 67.4833 41.9395 39.23C42.3395 35.0167 42.6262 30.7267 42.7995 26.36C43.4195 10.9 25.2095 12.45 24.4195 25.69C23.0462 48.79 21.1195 72.2233 18.6395 95.99C17.6595 105.337 16.9995 114.63 16.6595 123.87C16.3328 132.65 16.6595 140.653 17.6395 147.88C19.5062 161.707 22.9728 175.147 28.0395 188.2C29.1795 191.153 30.6662 194.07 32.4995 196.95C35.2995 201.37 41.5395 202.72 45.3395 198.89C48.7328 195.483 49.3395 191.447 47.1595 186.78ZM87.1943 37.8021C86.8236 36.4743 85.902 35.3574 84.6342 34.6994C83.3663 34.0413 81.8534 33.8945 80.4311 34.2916C79.0088 34.6887 77.7908 35.598 77.0472 36.8177C76.3037 38.0374 76.094 39.4701 76.4647 40.7979C76.8355 42.1257 77.757 43.2426 79.0249 43.9006C80.2927 44.5587 81.8056 44.7055 83.2279 44.3084C84.6502 43.9113 85.8682 43.002 86.6118 41.7823C87.3554 40.5626 87.565 39.1299 87.1943 37.8021ZM242.9 63.3691C242.905 60.5116 242.14 57.7024 240.682 55.2252C239.224 52.7479 237.124 50.6888 234.594 49.2556C232.064 47.8225 229.192 47.0651 226.268 47.06C223.344 47.0549 220.469 47.8022 217.934 49.2266C215.399 50.6509 213.292 52.7027 211.826 55.1748C210.359 57.6469 209.585 60.4534 209.58 63.3109C209.575 66.1684 210.34 68.9776 211.797 71.4548C213.255 73.9321 215.355 75.9912 217.885 77.4244C220.415 78.8575 223.287 79.6149 226.211 79.62C229.135 79.6251 232.01 78.8778 234.545 77.4534C237.08 76.0291 239.187 73.9773 240.653 71.5052C242.12 69.0331 242.895 66.2266 242.9 63.3691ZM85.9041 71.8823C88.1531 72.912 90.7367 72.9736 93.0816 72.0534C95.4266 71.1333 97.3455 69.3049 98.4127 66.9739C99.1193 65.4306 99.4215 63.7348 99.2889 62.0574C99.1563 60.38 98.5935 58.7796 97.6572 57.4176C96.721 56.0556 95.4439 54.9794 93.9549 54.2977C91.7059 53.268 89.1223 53.2064 86.7774 54.1266C84.4325 55.0467 82.5135 56.8751 81.4463 59.2061C80.7398 60.7494 80.4375 62.4452 80.5701 64.1226C80.7028 65.8 81.2656 67.4004 82.2018 68.7624C83.1381 70.1244 84.4151 71.2006 85.9041 71.8823ZM60.6086 105.171C63.2448 106.638 66.3725 106.974 69.2978 106.105C72.223 105.236 74.7122 103.231 76.213 100.535C77.7138 97.8381 78.1063 94.6659 77.3035 91.7217C76.5007 88.7775 74.5666 86.2966 71.9304 84.8293C69.2942 83.362 66.1665 83.0257 63.2413 83.8948C60.316 84.7639 57.8268 86.7691 56.326 89.4655C54.8252 92.1619 54.4327 95.3341 55.2355 98.2783C56.0384 101.222 57.9724 103.703 60.6086 105.171ZM187.08 98.11C187.08 96.1959 186.318 94.3582 184.965 93.0047C183.611 91.6512 181.774 90.89 179.86 90.89C177.945 90.89 176.108 91.6512 174.754 93.0047C173.401 94.3582 172.64 96.1959 172.64 98.11C172.64 100.024 173.401 101.862 174.754 103.215C176.108 104.569 177.945 105.33 179.86 105.33C181.127 105.33 182.372 104.996 183.47 104.363C184.567 103.729 185.479 102.817 186.112 101.72C186.746 100.623 187.08 99.3773 187.08 98.11ZM234.564 99.0027C233.705 97.863 232.551 96.9774 231.217 96.4351C229.883 95.8929 228.416 95.7129 226.964 95.9133C225.513 96.1138 224.127 96.6877 222.947 97.5771C221.766 98.4665 220.833 99.6405 220.24 100.981C219.647 102.321 219.416 103.78 219.57 105.212C219.723 106.644 220.256 107.998 221.115 109.137C221.974 110.277 223.128 111.163 224.462 111.705C225.796 112.247 227.263 112.427 228.715 112.227C230.166 112.026 231.552 111.452 232.732 110.563C233.913 109.673 234.846 108.499 235.439 107.159C236.032 105.819 236.263 104.36 236.109 102.928C235.956 101.496 235.423 100.142 234.564 99.0027ZM47.9695 214.56C45.1695 220.83 50.0195 225.32 54.0495 229.45C57.6895 233.19 61.8995 236.09 66.6995 232.86C71.8895 229.38 72.0595 223.24 67.9795 218.66C64.2095 214.41 60.6395 209.6 54.3295 209.99C51.4095 210.17 49.1195 211.99 47.9695 214.56Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape16&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.8026079545455 12.838359375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M26.0114 0C24.238 15.2933 22.4147 30.5933 20.5414 45.9C19.668 53.04 18.958 59.6733 18.4114 65.8C16.918 82.2933 15.478 98.8067 14.0914 115.34C11.9047 141.34 15.4147 166.407 24.6214 190.54C31.6547 208.967 42.658 226.023 57.6314 241.71C59.8314 244.02 58.0314 246.27 55.7214 247.28C54.8214 247.667 54.0314 248.097 53.3514 248.57C51.9014 250.07 52.3314 253.14 52.3514 255.14C31.6214 235.93 17.0114 211.99 8.66137 185.13C2.48804 165.29 -0.385293 145.337 0.0413737 125.27C0.691374 94.91 5.82137 63.64 9.38137 32.5C9.99471 27.1467 10.7014 21.75 11.5014 16.31C12.3214 10.7767 13.5247 5.69667 15.1114 1.07C15.2107 0.778294 15.3987 0.524438 15.6494 0.343583C15.9001 0.162728 16.2013 0.0636261 16.5114 0.06Z&quot;&gt;&lt;/path&gt; &lt;rect id=&quot;shape17&quot; transform=&quot;matrix(0.0248592227760896 -0.0248592227760896 0.0248592227760896 0.0248592227760896 19.531681996495 13.569794617477)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; width=&quot;23.84&quot; height=&quot;22.92&quot; rx=&quot;10.61&quot; ry=&quot;10.61&quot;&gt;&lt;/rect&gt; &lt;path id=&quot;shape18&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.857255859375 13.3649990428515)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M30.6225 171.52C32.8025 176.187 32.1958 180.223 28.8025 183.63C25.0025 187.46 18.7625 186.11 15.9625 181.69C14.1292 178.81 12.6425 175.893 11.5025 172.94C6.43583 159.887 2.96917 146.447 1.1025 132.62C0.1225 125.393 -0.204167 117.39 0.1225 108.61C0.4625 99.37 1.1225 90.0767 2.1025 80.73C4.5825 56.9634 6.50917 33.53 7.8825 10.43C8.6725 -2.80997 26.8825 -4.35997 26.2625 11.1C26.0892 15.4667 25.8025 19.7567 25.4025 23.97C22.7292 52.2234 20.6125 78.18 19.0525 101.84C18.5525 109.46 18.4158 116.68 18.6425 123.5C19.1825 139.573 23.1758 155.58 30.6225 171.52Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape19&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.7841415488515 13.3674609375)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.0522 0C8.66553 0.146667 13.3755 0.21 18.1822 0.19C20.0355 0.183333 21.4389 0.42 22.3922 0.9C25.8622 2.65 26.8622 6.68 24.4922 9.93C23.2455 11.6367 21.2922 12.4233 18.6322 12.29C16.7255 12.1967 14.9289 12.1633 13.2422 12.19C10.5489 12.0967 7.9222 12.1 5.3622 12.2C-1.3878 12.45 -1.6978 1.74 4.0522 0Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape20&quot; transform=&quot;matrix(0.0338611839889802 -0.00945421244350544 0.00945421244350544 0.0338611839889802 14.9149266129752 14.0867380565676)&quot; rx=&quot;5.57&quot; ry=&quot;5.2&quot; cx=&quot;5.57&quot; cy=&quot;5.2&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape21&quot; transform=&quot;matrix(0.0351561964539828 6.13592003636124e-05 -6.13592003636124e-05 0.0351561964539828 19.6449060698586 14.4819473774511)&quot; rx=&quot;16.66&quot; ry=&quot;16.28&quot; cx=&quot;16.66&quot; cy=&quot;16.28&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape22&quot; transform=&quot;matrix(-0.0146348716029047 0.031965331958686 -0.031965331958686 -0.0146348716029047 15.8772166930746 14.8739620295146)&quot; rx=&quot;9.67&quot; ry=&quot;9.33&quot; cx=&quot;9.67&quot; cy=&quot;9.33&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape23&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.997793706651 14.9540625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M18.805 0C21.585 0.06 23.4616 1.22333 24.435 3.49C25.995 7.11667 24.7383 9.90667 20.665 11.86C15.6716 12.2 10.8516 12.3133 6.20498 12.2C3.87831 12.14 2.32498 11.6733 1.54498 10.8C-2.08502 6.74 1.16498 1.1 6.28498 0.8C10.2716 0.566667 14.445 0.3 18.805 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape24&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.0361349190606 15.7107890625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M19.9144 0.0653333C23.6544 0.312 25.9044 1.90533 26.6644 4.84533C27.3911 7.62533 26.7277 9.78533 24.6744 11.3253C22.6044 12.8753 19.9444 12.4853 17.4044 12.5253C13.2911 12.5987 8.80105 12.5787 3.93438 12.4653C-0.498949 9.852 -1.18562 6.45533 1.87438 2.27533C2.98438 0.765333 4.21438 0.125333 6.20438 0.0853333C10.8177 -0.0213333 15.3877 -0.028 19.9144 0.0653333Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape25&quot; transform=&quot;matrix(-0.0170977282180133 0.0307185547160906 -0.0307185547160906 -0.0170977282180133 15.1542587716268 16.0053675452257)&quot; rx=&quot;11.64&quot; ry=&quot;11.38&quot; cx=&quot;11.64&quot; cy=&quot;11.38&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;circle id=&quot;shape26&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.345234375 16.0238671875)&quot; r=&quot;7.22&quot; cx=&quot;7.22&quot; cy=&quot;7.22&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape27&quot; transform=&quot;matrix(0.0280770296501001 -0.0211575594076892 0.0211575594076892 0.0280770296501001 19.8774398273616 16.4371069616574)&quot; rx=&quot;8.42&quot; ry=&quot;8.13&quot; cx=&quot;8.42&quot; cy=&quot;8.13&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape28&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1414052368516 17.2710454963236)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.02 12.1647L3.45003 11.8747C1.14336 10.388 -0.00663785 8.42471 2.88184e-05 5.98471C0.0133622 3.09804 1.57336 1.13137 4.68003 0.0847059C10.1067 0.00470588 15.6967 -0.0186275 21.45 0.0147059C22.75 0.0247059 23.92 0.0247059 24.8 1.15471C27.1134 4.10804 27.24 7.30471 25.18 10.7447C24.5867 11.7314 23.5334 12.2047 22.02 12.1647Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape29&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.9485123620206 17.688515625)&quot; fill=&quot;rgb(7,6,6)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M94.2701 0L112.84 0.29C113.373 6.01 113.157 11.6167 112.19 17.11C110.957 24.1567 109.597 30.3733 108.11 35.76C106.843 40.3467 104.56 46.5667 101.26 54.42C98.5934 60.76 95.7234 66.4633 92.6501 71.53C74.9968 100.71 50.0768 121.763 17.8901 134.69C12.7801 136.32 5.23009 136.79 1.81009 132.18C-2.58991 126.21 1.72009 121.04 7.38009 118.61C18.6068 113.783 28.7468 108.023 37.8001 101.33C57.4201 86.8233 71.8068 69.5767 80.9601 49.59C87.6934 34.8833 92.1301 18.3533 94.2701 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape30&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9331058615201 20.210194296345)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.830544 4.59225C1.98054 2.02225 4.27054 0.202251 7.19054 0.0222511C13.5005 -0.367749 17.0705 4.44225 20.8405 8.69225C24.9205 13.2723 24.7505 19.4123 19.5605 22.8923C14.7605 26.1223 10.5505 23.2223 6.91054 19.4823C2.88054 15.3523 -1.96946 10.8623 0.830544 4.59225Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape31&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.6404577789765 21.5771484375)&quot; fill=&quot;rgb(7,6,6)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.07476 0C8.08142 5.61333 15.5614 10.35 23.5148 14.21C29.8681 17.29 36.3014 20.1933 42.8148 22.92C60.4748 30.32 77.6181 35.09 94.2448 37.23C109.971 39.2633 126.571 38.5767 144.045 35.17L147.645 35.08C147.945 35.0733 148.221 35.15 148.475 35.31C149.161 35.7233 149.338 36.3467 149.005 37.18C148.878 37.4867 148.938 37.7533 149.185 37.98C149.755 38.5 150.175 38.94 150.235 39.77C150.361 41.7967 150.618 43.8033 151.005 45.79C151.065 46.1233 150.975 46.4067 150.735 46.64C150.228 47.1467 149.631 47.4867 148.945 47.66C148.731 47.7133 148.631 47.85 148.645 48.07C148.658 48.2767 148.501 48.4167 148.175 48.49C148.041 48.5167 147.908 48.5333 147.775 48.54L145.005 48.63C144.678 48.6433 144.485 48.81 144.425 49.13C144.371 49.41 144.138 49.5633 143.725 49.59C143.659 49.5967 143.588 49.5933 143.515 49.58C141.015 49.2067 139.005 49.84 137.485 51.48C124.278 53.2267 112.368 53.5833 101.755 52.55C80.2748 50.4633 60.3014 44.84 41.8348 35.68C35.8281 32.7 28.6481 28.54 20.2948 23.2C14.0414 19.2067 7.30142 13.6633 0.0747565 6.57C0.0547565 4.57 -0.375243 1.5 1.07476 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape32&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.548046875 24.3846604970638)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M37.39 126.792L36.84 125.732C36.6867 125.445 36.61 125.139 36.61 124.812L36.29 50.1519C39.97 50.1319 42.74 50.0419 44.93 47.3519C46.0567 45.9652 46.4067 44.4152 45.98 42.7019C44.81 38.0219 40.08 37.5119 35.72 37.6019L35.91 26.2919C40.16 26.9019 44.77 27.8519 48.81 25.9619C52.26 24.3519 53.31 20.2319 50.85 17.2519C48.51 14.4319 45.36 14.2119 41.99 14.2719C35.7567 14.3852 29.3167 14.4052 22.67 14.3319C19.49 14.3019 16.81 15.9619 15.14 18.6319C15.2 16.6619 12.86 15.6819 11.44 14.7519C10.6133 14.2119 9.90667 13.5852 9.32 12.8719C6.57333 9.53188 3.78 6.23188 0.94 2.97188C0.46 2.41855 0.146667 1.62521 0 0.591879C17.1 3.24521 34.28 3.98188 51.54 2.80188C57.06 2.42188 62.3133 1.51855 67.3 0.0918792C68.18 -0.154787 68.3567 0.0952125 67.83 0.841879C58.7633 13.8352 53.49 29.3252 52.01 47.3119C50.37 67.3319 51 88.9819 56.8 107.652C58.81 114.142 62.13 120.072 65.01 126.212C65.0485 126.291 65.0589 126.382 65.0394 126.468C65.02 126.554 64.9718 126.631 64.9029 126.686C64.834 126.741 64.7483 126.772 64.66 126.772Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape33&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.486355851717 24.3923298330305)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.75477 0.373729C1.90143 1.40706 2.21477 2.2004 2.69477 2.75373C5.53477 6.01373 8.3281 9.31373 11.0748 12.6537C11.6614 13.3671 12.3681 13.9937 13.1948 14.5337C14.6148 15.4637 16.9548 16.4437 16.8948 18.4137L16.5848 19.0537C15.9714 19.3604 15.6748 19.8204 15.6948 20.4337C15.8148 23.3437 16.3448 26.1237 18.0248 28.6937C19.9714 31.6737 22.1714 34.5471 24.6248 37.3137C19.6548 39.6737 18.5548 46.9937 24.3448 49.3137C24.1981 53.2071 24.2048 57.1237 24.3648 61.0637C24.5581 65.7371 24.5748 69.6437 24.4148 72.7837C24.2014 77.0371 23.9914 81.3304 23.7848 85.6637C23.1248 99.8304 19.6748 113.244 13.4348 125.904C13.2814 126.21 13.0314 126.384 12.6848 126.424L11.5948 126.534L3.79477 126.534C3.66373 126.534 3.5364 126.49 3.43437 126.408C3.33234 126.325 3.26171 126.21 3.23447 126.082C3.20722 125.954 3.22499 125.82 3.28477 125.704C16.0848 100.784 18.1148 71.0737 14.6948 43.5737C12.8014 28.3737 7.92143 14.0371 0.0547669 0.563729C0.0152725 0.50031 -0.00361813 0.426609 0.000572506 0.352292C0.00476314 0.277975 0.0318434 0.20644 0.0782619 0.147067C0.12468 0.0876949 0.188315 0.0431997 0.26082 0.0194171C0.333326 -0.0043654 0.411387 -0.00634806 0.484767 0.0137292Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape34&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.0617214476865 24.8861307529877)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M21.2988 12.0278C16.7455 11.8878 12.1288 11.8545 7.44881 11.9278C4.74215 11.9678 2.94548 11.7312 2.05881 11.2178C0.238812 10.1645 -0.374521 8.0945 0.218812 5.00784L0.528812 4.36784C2.19881 1.69784 4.87881 0.0378364 8.05881 0.0678364C14.7055 0.14117 21.1455 0.12117 27.3788 0.00783636C30.7488 -0.0521636 33.8988 0.167836 36.2388 2.98784C38.6988 5.96784 37.6488 10.0878 34.1988 11.6978C30.1588 13.5878 25.5488 12.6378 21.2988 12.0278Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape35&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.038091694079 25.0621875000001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.890947 0C0.297614 3.08667 0.910947 5.15667 2.73095 6.21C3.61761 6.72333 5.41428 6.96 8.12095 6.92C12.8009 6.84667 17.4176 6.88 21.9709 7.02L21.7809 18.33L8.93095 18.26C6.47761 15.4933 4.27761 12.62 2.33095 9.64C0.650947 7.07 0.120947 4.29 0.000947368 1.38C-0.0190526 0.766667 0.277614 0.306667 0.890947 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape36&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.2047130847683 25.704140625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.19149 0L17.0415 0.07C21.4015 -0.02 26.1315 0.49 27.3015 5.17C27.7282 6.88333 27.3782 8.43333 26.2515 9.82C24.0615 12.51 21.2915 12.6 17.6115 12.62L3.91149 12C-1.87851 9.68 -0.778506 2.36 4.19149 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape37&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.893984375 26.126015625)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M12.75 0L26.45 0.62L26.77 75.28C26.77 75.6067 26.8467 75.9133 27 76.2L27.55 77.26L0 77.22L1.09 77.11C1.43667 77.07 1.68667 76.8967 1.84 76.59C8.08 63.93 11.53 50.5167 12.19 36.35C12.3967 32.0167 12.6067 27.7233 12.82 23.47C12.98 20.33 12.9633 16.4233 12.77 11.75C12.61 7.81 12.6033 3.89333 12.75 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape38&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.22640625 29.4324536132813)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M29.96 24.0302C30.7067 23.5835 30.1467 23.1702 28.28 22.7902C27.96 22.7235 27.6733 22.5835 27.42 22.3702C24.9333 20.2235 22.8967 18.7069 21.31 17.8202C12.91 13.1069 5.80667 7.21687 0 0.150208L30.09 0.000208333C30.4767 -0.00645833 30.7833 0.146875 31.01 0.460208C37.57 9.69354 45.7567 17.2435 55.57 23.1102C55.9433 23.3302 55.92 23.4969 55.5 23.6102C54.48 23.8769 53.4167 24.0135 52.31 24.0202C44.77 24.0669 37.32 24.0702 29.96 24.0302Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape39&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.2706541442871 29.4394921875)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M38.2747 0C35.2147 4.74667 31.2681 10.0433 26.4347 15.89C23.4547 19.49 20.7014 22.14 18.1747 23.84L0.754727 23.73C-0.17194 23.7233 -0.245273 23.4733 0.534727 22.98C9.87473 17.05 17.3747 9.52 24.9347 0.58C25.0571 0.432797 25.211 0.314351 25.3856 0.233119C25.5601 0.151886 25.7511 0.109846 25.9447 0.11Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape40&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.909609375 29.437734375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M65.9 0C71.7067 7.06667 78.81 12.9567 87.21 17.67C88.7967 18.5567 90.8333 20.0733 93.32 22.22C93.5733 22.4333 93.86 22.5733 94.18 22.64C96.0467 23.02 96.6067 23.4333 95.86 23.88L0 23.89C2.52667 22.19 5.28 19.54 8.26 15.94C13.0933 10.0933 17.04 4.79667 20.1 0.05Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape41&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.6264334548969 30.8390367406574)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M175.558 0.450733C176.245 0.450733 176.568 0.567399 176.528 0.800733C176.494 1.0303 176.388 1.24303 176.226 1.40826C176.065 1.5735 175.855 1.68291 175.628 1.72073C171.935 2.3474 168.581 2.65073 165.568 2.63073C163.998 2.62073 162.798 3.35073 161.188 3.18073C160.808 3.14073 160.445 3.20407 160.098 3.37073L158.488 4.16073C158.195 4.30073 157.958 4.50407 157.778 4.77073C157.045 5.85073 156.111 6.47073 154.978 6.63073C153.258 6.87073 151.491 6.99073 149.678 6.99073C111.858 6.8974 73.5681 6.84073 34.8081 6.82073C28.6781 6.82073 24.4281 9.63073 23.3181 15.9507L0.628115 15.8107C0.50059 15.8104 0.376138 15.7713 0.2713 15.6987C0.166463 15.626 0.0861025 15.5233 0.0409006 15.404C-0.00430136 15.2848 -0.0122487 15.1546 0.0181151 15.0307C2.16812 6.40073 10.0881 -0.0792673 19.0981 0.00073271C53.2181 0.314066 87.8014 0.380733 122.848 0.200733C140.421 0.114066 157.991 0.197399 175.558 0.450733Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape42&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.4462109375 30.8548828125)&quot; fill=&quot;rgb(8,7,7)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M152.24 0L253.08 0.15C253.047 2.17 252.56 3.72667 251.62 4.82C250.867 5.69333 249.93 6.13667 248.81 6.15C221.383 6.39 194.363 6.58667 167.75 6.74C167.283 6.74 167.03 6.97333 166.99 7.44C166.87 8.95333 167.113 10.3433 167.72 11.61C167.847 11.8833 167.89 12.1667 167.85 12.46L167.63 14.18C167.577 14.5867 167.74 14.86 168.12 15C168.573 15.1667 168.867 15.3533 169 15.56L0 15.5C1.11 9.18 5.36 6.37 11.49 6.37C50.25 6.39 88.54 6.44667 126.36 6.54C128.173 6.54 129.94 6.42 131.66 6.18C132.793 6.02 133.727 5.4 134.46 4.32C134.64 4.05333 134.877 3.85 135.17 3.71L136.78 2.92C137.127 2.75333 137.49 2.69 137.87 2.73C139.48 2.9 140.68 2.17 142.25 2.18C145.263 2.2 148.617 1.89667 152.31 1.27C152.537 1.23218 152.746 1.12277 152.908 0.957532C153.07 0.792295 153.175 0.579568 153.21 0.35C153.25 0.116667 152.927 -1.13687e-13 152.24 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape43&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 19.3159081135321 30.86015625)&quot; fill=&quot;rgb(7,6,6)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M86.1197 0C93.6331 3.14 98.2231 7.99667 99.8897 14.57C99.9181 14.684 99.9111 14.804 99.8698 14.914C99.8285 15.024 99.7547 15.1189 99.6583 15.186C99.5618 15.2532 99.4472 15.2894 99.3297 15.29L2.03972 15.41C1.90639 15.2033 1.61306 15.0167 1.15972 14.85C0.779725 14.71 0.616391 14.4367 0.669725 14.03L0.889725 12.31C0.929725 12.0167 0.886391 11.7333 0.759725 11.46C0.153058 10.1933 -0.0902752 8.80333 0.0297248 7.29C0.0697248 6.82333 0.323058 6.59 0.789725 6.59C27.4031 6.43667 54.4231 6.24 81.8497 6C82.9697 5.98667 83.9064 5.54333 84.6597 4.67C85.5997 3.57667 86.0864 2.02 86.1197 0Z&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt;&lt;div class=&quot;w-16 h-16&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;fill-[${rgbColor} w-16 h-16&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 36 36&quot;&gt; &lt;defs&gt;&lt;/defs&gt; &lt;path id=&quot;shape0&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 10.393984646722 3.24851063866497)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M384.119 800.308C389.392 800.401 395.079 800.381 401.179 800.248C405.299 800.161 408.469 800.568 410.689 801.468C415.949 803.598 420.779 810.198 420.289 816.268C419.669 823.858 412.349 829.318 404.999 829.328C277.499 829.355 146.952 829.355 13.3589 829.328C8.63888 829.328 4.09888 825.978 1.87888 822.058C-2.73112 813.888 1.52888 803.918 10.4389 801.028C11.9855 800.528 13.9555 800.285 16.3489 800.298C22.1289 800.338 27.6889 800.265 33.0289 800.078C33.1769 800.076 33.3188 800.017 33.4263 799.913C33.5337 799.809 33.5989 799.668 33.6089 799.518C33.7489 797.391 34.0889 795.351 34.6289 793.398C38.5755 779.138 46.7822 768.285 59.2489 760.838C67.2389 756.068 77.9989 753.418 87.8689 753.798C91.7089 753.938 95.6189 754.578 99.3589 753.338C121.612 745.945 138.126 732.518 148.899 713.058C160.649 691.848 162.149 664.098 156.689 640.298C150.949 615.338 135.539 594.358 113.659 581.418C104.759 576.151 97.1322 571.378 90.7789 567.098C79.8722 559.751 69.4389 550.391 59.4789 539.018C41.7922 518.825 28.7222 496.301 20.2689 471.448C13.2089 450.695 9.41555 429.945 8.88888 409.198C8.39555 389.938 9.51888 370.588 12.2589 351.148C15.7689 326.188 18.7489 301.968 22.2689 277.258C23.1955 270.798 23.9055 264.308 24.3989 257.788C25.2922 245.915 26.1489 234.441 26.9689 223.368C28.2189 206.548 28.2189 189.968 28.2289 172.948C28.229 172.665 28.1641 172.386 28.0392 172.133C27.9143 171.88 27.7328 171.659 27.5089 171.488C4.71888 154.278 -3.35112 123.728 10.2489 97.8679C21.8189 75.8479 44.3589 62.0579 69.5789 63.3579C72.9922 63.5379 76.3389 64.1179 79.6189 65.0979C79.7826 65.1468 79.9567 65.1513 80.1235 65.1109C80.2903 65.0705 80.4439 64.9867 80.5689 64.8679C95.3422 50.8279 113.322 44.9613 134.509 47.2679C134.656 47.2852 134.804 47.2536 134.932 47.1778C135.061 47.102 135.161 46.9862 135.219 46.8479C136.972 42.6213 139.372 38.5079 142.419 34.5079C153.299 20.2379 166.749 9.32792 184.089 3.97792C204.569 -2.34875 224.312 -1.12875 243.319 7.63792C258.599 14.6779 272.559 26.6579 280.469 41.6579C280.596 41.9046 280.792 41.9846 281.059 41.8979C289.839 38.9646 299.389 37.9446 309.709 38.8379C326.729 40.3079 342.309 50.4379 353.989 63.2879C354.516 63.8679 355.166 64.1746 355.939 64.2079C361.419 64.4546 366.656 65.5513 371.649 67.4979C392.199 75.5079 406.519 91.1379 411.669 112.968C413.189 119.421 413.456 125.841 412.469 132.228C409.882 148.975 401.956 162.205 388.689 171.918C387.729 172.628 387.729 173.468 387.719 174.528C387.586 191.895 387.899 207.108 388.659 220.168C389.549 235.238 390.999 253.908 393.189 270.758C396.622 297.205 400.169 324.231 403.829 351.838C404.689 358.351 405.536 366.615 406.369 376.628C407.042 384.655 407.406 391.321 407.459 396.628C407.679 420.268 404.476 443.035 397.849 464.928C386.419 502.718 363.929 536.538 333.029 561.268C324.009 568.498 312.959 575.088 302.869 581.488C297.502 584.888 292.979 588.131 289.299 591.218C265.139 611.508 255.039 640.758 256.429 672.398C258.039 709.018 277.959 738.488 312.639 751.718C317.389 753.528 321.449 754.508 326.659 754.038C338.269 753.008 349.089 755.608 359.129 762.058C371.639 770.088 381.589 784.038 383.299 799.558C383.352 800.045 383.626 800.295 384.119 800.308ZM34.9389 123.938C34.6255 130.038 36.5689 135.461 40.7689 140.208C42.9155 142.635 45.5089 143.855 48.5489 143.868C57.4489 143.895 67.6722 143.898 79.2189 143.878C80.8589 143.878 81.9889 142.308 82.5389 140.958C82.6855 140.585 82.6522 140.231 82.4389 139.898C80.5522 136.978 80.8189 134.321 83.2389 131.928C87.7189 127.508 91.8289 130.808 94.8789 134.678C97.7389 138.308 103.749 143.708 108.819 143.768C117.746 143.855 126.882 143.871 136.229 143.818C142.909 143.768 150.429 136.098 154.769 131.618C156.269 130.068 158.029 129.188 160.259 129.608C164.159 130.328 166.106 132.778 166.099 136.958C166.099 138.248 165.299 139.248 164.549 140.218C164.261 140.59 164.13 141.06 164.184 141.527C164.239 141.994 164.474 142.422 164.839 142.718C166.006 143.678 167.326 144.148 168.799 144.128C196.979 143.828 224.629 143.751 251.749 143.898C253.509 143.905 255.106 143.581 256.539 142.928C256.721 142.847 256.872 142.708 256.969 142.533C257.065 142.358 257.101 142.155 257.073 141.955C257.044 141.756 256.951 141.571 256.809 141.428C253.879 138.498 254.059 132.908 257.859 130.608C262.999 127.498 266.539 130.248 269.939 133.818C274.619 138.718 280.959 143.828 287.779 143.838C296.859 143.865 305.789 143.868 314.569 143.848C321.399 143.828 328.259 136.098 332.759 131.638C335.086 129.338 337.459 128.821 339.879 130.088C343.819 132.161 344.612 135.195 342.259 139.188C342.08 139.495 341.983 139.844 341.98 140.198C341.976 140.552 342.066 140.901 342.239 141.208C343.319 143.118 344.959 144.088 347.179 144.068C354.066 144.001 361.086 143.928 368.239 143.848C370.352 143.821 372.149 143.235 373.629 142.088C379.589 137.488 382.416 131.278 382.109 123.458C381.969 109.928 371.589 99.2079 359.169 95.4779C358.953 95.4151 358.724 95.4137 358.51 95.4738C358.296 95.534 358.105 95.6534 357.959 95.8179C355.212 98.9446 351.706 100.435 347.439 100.288C341.069 100.068 338.009 96.4579 335.789 91.1479C332.202 82.5946 326.232 76.3279 317.879 72.3479C307.626 67.4546 296.802 67.5779 285.409 72.7179C282.069 74.2179 279.519 77.4279 276.309 79.4679C269.159 84.0279 261.339 79.8879 260.179 71.8979C258.606 61.0979 253.279 51.6813 244.199 43.6479C217.109 19.6679 175.399 28.6579 160.839 61.6279C158.766 66.3279 157.699 70.8946 157.639 75.3279C157.559 80.8679 155.339 86.2279 149.929 88.1679C144.262 90.2146 139.372 89.0513 135.259 84.6779C133.749 83.0679 132.859 81.0279 131.499 79.3379C131.286 79.0646 131.012 78.8779 130.679 78.7779C128.472 78.1113 126.346 77.8213 124.299 77.9079C113.326 78.3813 104.429 83.1579 97.6089 92.2379C94.2189 96.7479 94.0089 102.468 90.0089 106.458C86.8589 109.588 81.6689 110.618 77.7089 108.488C73.0155 105.968 70.9422 101.938 71.4889 96.3979C71.5755 95.5313 71.1922 95.0446 70.3389 94.9379C59.7789 93.5446 50.8422 96.5046 43.5289 103.818C38.0555 109.291 35.1922 115.998 34.9389 123.938ZM70.3189 172.868L60.5489 172.868C60.0022 172.868 59.7255 173.141 59.7189 173.688C59.4855 194.395 58.5655 214.878 56.9589 235.138C56.6655 238.818 56.5355 242.431 56.5689 245.978C56.5689 246.378 56.7689 246.578 57.1689 246.578L287.389 246.598L306.739 246.558L315.789 246.558C316.622 246.558 317.009 246.145 316.949 245.318C315.196 221.491 313.862 197.675 312.949 173.868C312.939 173.596 312.822 173.339 312.625 173.151C312.427 172.963 312.163 172.858 311.889 172.858L302.559 172.868L102.799 172.818L85.9489 172.788ZM345.659 172.918L336.369 172.938C335.276 172.938 334.742 173.485 334.769 174.578C335.302 197.585 336.822 220.561 339.329 243.508C339.429 244.421 339.629 245.291 339.929 246.118C339.981 246.258 340.075 246.379 340.199 246.463C340.322 246.547 340.469 246.591 340.619 246.588L349.349 246.478L358.959 246.388C359.056 246.388 359.152 246.362 359.234 246.311C359.317 246.259 359.384 246.186 359.427 246.099C359.47 246.012 359.488 245.915 359.479 245.818C358.169 231.648 357.729 217.678 356.929 203.398C356.396 193.905 356.209 183.971 356.369 173.598C356.371 173.466 356.337 173.335 356.273 173.221C356.208 173.106 356.114 173.011 356.001 172.945C355.888 172.88 355.759 172.846 355.629 172.848ZM285.139 272.498L66.0789 272.778L56.5789 272.838C56.2688 272.842 55.9676 272.941 55.7169 273.122C55.4662 273.302 55.2782 273.556 55.1789 273.848C53.5922 278.475 52.3889 283.555 51.5689 289.088C50.7689 294.528 50.0622 299.925 49.4489 305.278C45.8889 336.418 40.7589 367.688 40.1089 398.048C39.6822 418.115 42.5555 438.068 48.7289 457.908C57.0789 484.768 71.6889 508.708 92.4189 527.918C99.6455 535.011 106.386 540.555 112.639 544.548C120.992 549.888 128.172 554.048 134.179 557.028C152.646 566.188 172.619 571.811 194.099 573.898C204.712 574.931 216.622 574.575 229.829 572.828C240.356 571.415 249.986 569.291 258.719 566.458C291.679 555.758 320.169 534.368 341.689 507.238C357.689 487.038 368.109 461.898 373.119 436.298C376.719 417.938 377.099 398.938 375.549 380.068C373.189 351.368 369.499 324.108 365.409 293.848C364.422 286.581 363.209 279.731 361.769 273.298C361.729 273.128 361.634 272.976 361.499 272.867C361.365 272.758 361.199 272.699 361.029 272.698ZM175.049 601.798L173.779 601.438C173.706 601.418 173.627 601.42 173.555 601.444C173.482 601.467 173.419 601.512 173.372 601.571C173.326 601.631 173.299 601.702 173.295 601.776C173.29 601.851 173.309 601.925 173.349 601.988C181.216 615.461 186.096 629.798 187.989 644.998C191.409 672.498 189.379 702.208 176.579 727.128C176.519 727.245 176.501 727.378 176.529 727.506C176.556 727.635 176.626 727.75 176.728 727.832C176.831 727.914 176.958 727.959 177.089 727.958L184.889 727.958L212.439 727.998L239.709 727.978C239.797 727.978 239.883 727.947 239.952 727.892C240.021 727.837 240.069 727.76 240.088 727.674C240.108 727.588 240.097 727.497 240.059 727.418C237.179 721.278 233.859 715.348 231.849 708.858C226.049 690.188 225.419 668.538 227.059 648.518C228.539 630.531 233.812 615.041 242.879 602.048C243.406 601.301 243.229 601.051 242.349 601.298C237.362 602.725 232.109 603.628 226.589 604.008C209.329 605.188 192.149 604.451 175.049 601.798ZM222.789 744.938L176.989 744.988L164.659 745.098C164.465 745.098 164.274 745.14 164.1 745.221C163.925 745.302 163.771 745.421 163.649 745.568C156.089 754.508 148.589 762.038 139.249 767.968C138.469 768.461 138.542 768.711 139.469 768.718L156.889 768.828L252.749 768.818C260.109 768.858 267.559 768.855 275.099 768.808C276.206 768.801 277.269 768.665 278.289 768.398C278.709 768.285 278.732 768.118 278.359 767.898C268.546 762.031 260.359 754.481 253.799 745.248C253.572 744.935 253.266 744.781 252.879 744.788ZM86.8189 800.748L255.819 800.808L353.109 800.688C353.226 800.687 353.341 800.651 353.437 800.584C353.534 800.517 353.608 800.422 353.649 800.312C353.69 800.202 353.697 800.082 353.669 799.968C352.002 793.395 347.412 788.538 339.899 785.398L239.059 785.248C221.492 784.995 203.922 784.911 186.349 784.998C151.302 785.178 116.719 785.111 82.5989 784.798C73.5889 784.718 65.6689 791.198 63.5189 799.828C63.4885 799.952 63.4965 800.082 63.5417 800.201C63.5869 800.32 63.6672 800.423 63.7721 800.496C63.8769 800.568 64.0014 800.608 64.1289 800.608Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape1&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6223046875 4.3066710451255)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.17 93.3591L341.7 94.8091C341.347 94.9025 341.043 95.0758 340.79 95.3291C334.81 101.209 327.56 101.079 319.06 100.739C316.15 100.619 313.98 99.6891 312.72 96.9491C310.21 91.4791 305.03 84.9891 298.07 88.5091C296.217 89.4491 294.677 90.6225 293.45 92.0291C288.01 98.2791 282.29 103.559 274.1 105.299C270.267 106.112 266.1 106.416 261.6 106.209C253.04 105.819 244.67 101.199 239.15 94.8491C232.37 87.0391 226.88 84.2491 219.24 92.9691C214.89 97.9391 209.89 101.049 202.97 101.219C196.37 101.379 189.917 101.426 183.61 101.359C182.93 101.352 182.43 100.989 182.11 100.269C182.01 100.04 181.975 99.7876 182.008 99.5391C182.042 99.2906 182.143 99.0554 182.3 98.8591C183.04 97.9325 183.813 97.0725 184.62 96.2791C187.09 93.8491 185.64 89.9291 183.51 87.8291C180.65 85.0091 175.91 85.9891 173.39 88.9391C172.23 90.2925 171.17 91.6391 170.21 92.9791C163.5 102.299 152.67 101.929 142.47 100.679C134.9 99.7591 131.64 94.3891 126.62 89.6591C123.633 86.8525 120.593 86.8391 117.5 89.6191C112.63 93.9791 108.24 99.7591 102.47 102.719C88.07 110.129 72.61 106.679 62.57 94.0391C58.62 89.0591 52.95 85.2191 47.21 90.7591C44.54 93.3491 43.94 96.9991 40.53 99.0891C36.59 101.509 29.55 101.139 24.26 101.029C18.64 100.899 13.25 100.999 9.85 97.1991C7.82 94.9191 4 93.8291 2.11 96.9691C1.02333 98.7691 0.446667 98.6225 0.38 96.5291C0.366667 95.9891 0.24 95.0925 0 93.8391C0.253333 85.8991 3.11667 79.1925 8.59 73.7191C15.9033 66.4058 24.84 63.4458 35.4 64.8391C36.2533 64.9458 36.6367 65.4325 36.55 66.2991C36.0033 71.8391 38.0767 75.8691 42.77 78.3891C46.73 80.5191 51.92 79.4891 55.07 76.3591C59.07 72.3691 59.28 66.6491 62.67 62.1391C69.49 53.0591 78.3867 48.2825 89.36 47.8091C91.4067 47.7225 93.5333 48.0125 95.74 48.6791C96.0733 48.7791 96.3467 48.9658 96.56 49.2391C97.92 50.9291 98.81 52.9691 100.32 54.5791C104.433 58.9525 109.323 60.1158 114.99 58.0691C120.4 56.1291 122.62 50.7691 122.7 45.2291C122.76 40.7958 123.827 36.2291 125.9 31.5291C140.46 -1.44087 182.17 -10.4309 209.26 13.5491C218.34 21.5825 223.667 30.9991 225.24 41.7991C226.4 49.7891 234.22 53.9291 241.37 49.3691C244.58 47.3291 247.13 44.1191 250.47 42.6191C261.863 37.4791 272.687 37.3558 282.94 42.2491C291.293 46.2291 297.263 52.4958 300.85 61.0491C303.07 66.3591 306.13 69.9691 312.5 70.1891C316.767 70.3358 320.273 68.8458 323.02 65.7191C323.166 65.5546 323.357 65.4352 323.571 65.3751C323.785 65.3149 324.014 65.3163 324.23 65.3791C336.65 69.1091 347.03 79.8291 347.17 93.3591Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape2&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6211575655465 7.33540715628013)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.203 7.20842C347.509 15.0284 344.683 21.2384 338.723 25.8384C337.243 26.9851 335.446 27.5718 333.333 27.5984C326.179 27.6784 319.159 27.7518 312.273 27.8184C310.053 27.8384 308.413 26.8684 307.333 24.9584C307.159 24.651 307.07 24.3028 307.074 23.9484C307.077 23.594 307.173 23.2458 307.353 22.9384C309.706 18.9451 308.913 15.9118 304.973 13.8384C302.553 12.5718 300.179 13.0884 297.853 15.3884C293.353 19.8484 286.493 27.5784 279.663 27.5984C270.883 27.6184 261.953 27.6151 252.873 27.5884C246.053 27.5784 239.713 22.4684 235.033 17.5684C231.633 13.9984 228.093 11.2484 222.953 14.3584C219.153 16.6584 218.973 22.2484 221.903 25.1784C222.045 25.3214 222.137 25.5067 222.166 25.706C222.195 25.9053 222.159 26.108 222.062 26.2834C221.966 26.4588 221.815 26.5975 221.633 26.6784C220.199 27.3318 218.603 27.6551 216.843 27.6484C189.723 27.5018 162.073 27.5784 133.893 27.8784C132.419 27.8984 131.099 27.4284 129.933 26.4684C129.567 26.1723 129.332 25.7446 129.278 25.2775C129.224 24.8105 129.355 24.3403 129.643 23.9684C130.393 22.9984 131.193 21.9984 131.193 20.7084C131.199 16.5284 129.253 14.0784 125.353 13.3584C123.123 12.9384 121.363 13.8184 119.863 15.3684C115.523 19.8484 108.003 27.5184 101.323 27.5684C91.976 27.6218 82.8393 27.6051 73.9126 27.5184C68.8426 27.4584 62.8326 22.0584 59.9726 18.4284C56.9226 14.5584 52.8126 11.2584 48.3326 15.6784C45.9126 18.0718 45.646 20.7284 47.5326 23.6484C47.746 23.9818 47.7793 24.3351 47.6326 24.7084C47.0826 26.0584 45.9526 27.6284 44.3126 27.6284C32.766 27.6484 22.5426 27.6451 13.6426 27.6184C10.6026 27.6051 8.0093 26.3851 5.86263 23.9584C1.66263 19.2118 -0.280704 13.7884 0.0326292 7.68842C0.272629 8.94175 0.399296 9.83842 0.412629 10.3784C0.479296 12.4718 1.05596 12.6184 2.14263 10.8184C4.03263 7.67842 7.85263 8.76842 9.88263 11.0484C13.2826 14.8484 18.6726 14.7484 24.2926 14.8784C29.5826 14.9884 36.6226 15.3584 40.5626 12.9384C43.9726 10.8484 44.5726 7.19842 47.2426 4.60842C52.9826 -0.931581 58.6526 2.90842 62.6026 7.88842C72.6426 20.5284 88.1026 23.9784 102.503 16.5684C108.273 13.6084 112.663 7.82842 117.533 3.46842C120.626 0.688419 123.666 0.701752 126.653 3.50842C131.673 8.23842 134.933 13.6084 142.503 14.5284C152.703 15.7784 163.533 16.1484 170.243 6.82842C171.203 5.48842 172.263 4.14175 173.423 2.78842C175.943 -0.161581 180.683 -1.14158 183.543 1.67842C185.673 3.77842 187.123 7.69842 184.653 10.1284C183.846 10.9218 183.073 11.7818 182.333 12.7084C182.175 12.9047 182.074 13.1399 182.041 13.3884C182.007 13.6369 182.043 13.8894 182.143 14.1184C182.463 14.8384 182.963 15.2018 183.643 15.2084C189.949 15.2751 196.403 15.2284 203.003 15.0684C209.923 14.8984 214.923 11.7884 219.273 6.81842C226.913 -1.90158 232.403 0.888419 239.183 8.69842C244.703 15.0484 253.073 19.6684 261.633 20.0584C266.133 20.2651 270.299 19.9618 274.133 19.1484C282.323 17.4084 288.043 12.1284 293.483 5.87842C294.709 4.47175 296.249 3.29842 298.103 2.35842C305.063 -1.16158 310.243 5.32842 312.753 10.7984C314.013 13.5384 316.183 14.4684 319.093 14.5884C327.593 14.9284 334.843 15.0584 340.823 9.17842C341.076 8.92509 341.379 8.75175 341.733 8.65842Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape3&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.7941352600339 9.3230859375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M17.6779 0C16.5513 11.84 15.9213 19.36 15.7879 22.56C15.3079 33.9733 14.6346 46.28 13.7679 59.48C13.6013 62.04 13.1046 63.7467 12.2779 64.6C8.55793 68.45 -0.30207 67.53 0.00793038 61.06C1.34793 33.3133 2.02793 12.9867 2.04793 0.08Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape4&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9413128810975 9.32414062500001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M201.657 0.05C201.63 7.10333 201.687 11.5967 201.827 13.53C203.28 33.53 204.617 53.6 205.837 73.74L186.487 73.78L193.557 73.61C193.714 73.6076 193.867 73.5609 193.998 73.4752C194.129 73.3896 194.234 73.2685 194.299 73.126C194.364 72.9835 194.388 72.8254 194.367 72.67C193.367 64.75 192.894 56.7733 192.947 48.74C196.9 43.82 196.69 38.93 192.317 34.07C191.537 32.47 191.137 31.2867 191.117 30.52C190.984 25.7933 191.01 21.2667 191.197 16.94C191.213 16.5684 191.128 16.1993 190.951 15.872C190.773 15.5446 190.51 15.2711 190.189 15.0807C189.868 14.8902 189.501 14.7897 189.127 14.79L153.317 14.9C152.777 12.9667 151.747 11.28 150.227 9.84C148.927 8.60667 147.257 7.7 145.217 7.12C138.364 5.17333 133.557 7.71667 130.797 14.75C116.39 14.8967 101.944 14.9467 87.4571 14.9C61.1271 14.81 34.7871 15.13 8.5371 15.06C6.00377 15.0533 4.15377 14.7633 2.9871 14.19C0.773767 13.11 -0.209566 11.2233 0.0371003 8.53C0.150434 7.29667 0.770434 4.45333 1.8971 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape5&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.5460546875 9.32519283839548)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M3.69 73.6301L0 0.0700704L9.97 7.03745e-05C10.1004 -0.00175254 10.2289 0.031869 10.3421 0.0974247C10.4553 0.16298 10.5492 0.258107 10.6139 0.372872C10.6786 0.487637 10.7118 0.617903 10.71 0.75007C10.55 11.1234 10.7367 21.0567 11.27 30.5501C12.07 44.8301 12.51 58.8001 13.82 72.9701C13.8293 73.0668 13.8114 73.1643 13.7681 73.2514C13.7249 73.3384 13.6581 73.4116 13.5754 73.4627C13.4926 73.5137 13.3972 73.5405 13.3 73.5401Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape6&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.3825550063776 9.3230859375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M13.7551 0.08C13.7351 12.9867 13.0551 33.3133 11.7151 61.06C11.4051 67.53 20.2651 68.45 23.9851 64.6C24.8118 63.7467 25.3084 62.04 25.4751 59.48C26.3418 46.28 27.0151 33.9733 27.4951 22.56C27.6284 19.36 28.2584 11.84 29.3851 0L46.2351 0.03C45.1084 4.48333 44.4884 7.32667 44.3751 8.56C44.1284 11.2533 45.1118 13.14 47.3251 14.22C48.4918 14.7933 50.3418 15.0833 52.8751 15.09C79.1251 15.16 105.465 14.84 131.795 14.93C146.282 14.9767 160.728 14.9267 175.135 14.78C174.568 20.8133 176.498 24.9267 180.925 27.12C183.338 28.3133 185.805 28.72 188.325 28.34C194.755 27.36 198.095 21.26 197.655 14.93L233.465 14.82C233.839 14.8197 234.206 14.9202 234.527 15.1107C234.848 15.3011 235.111 15.5746 235.289 15.902C235.466 16.2293 235.551 16.5984 235.535 16.97C235.348 21.2967 235.322 25.8233 235.455 30.55C235.475 31.3167 235.875 32.5 236.655 34.1C232.788 31.5133 229.168 30.99 225.795 32.53C211.935 38.83 224.195 59.55 237.285 48.77C237.232 56.8033 237.705 64.78 238.705 72.7C238.726 72.8554 238.702 73.0135 238.637 73.156C238.572 73.2985 238.467 73.4196 238.336 73.5052C238.205 73.5909 238.052 73.6376 237.895 73.64L230.825 73.81L0.605102 73.79C0.205102 73.79 0.00510204 73.59 0.00510204 73.19C-0.0282313 69.6433 0.101769 66.03 0.395102 62.35C2.00177 42.09 2.92177 21.6067 3.1551 0.9C3.16177 0.353333 3.43844 0.08 3.9851 0.08ZM127.005 36.5C127.005 34.413 126.456 32.3624 125.412 30.555C124.369 28.7476 122.867 27.2464 121.06 26.203C119.253 25.1595 117.202 24.61 115.115 24.61C111.963 24.61 108.937 25.8635 106.708 28.0925C104.479 30.3215 103.225 33.3478 103.225 36.5C103.225 39.6522 104.479 42.6785 106.708 44.9075C108.937 47.1365 111.963 48.39 115.115 48.39C117.202 48.39 119.253 47.8405 121.06 46.797C122.867 45.7536 124.369 44.2524 125.412 42.445C126.456 40.6376 127.005 38.587 127.005 36.5ZM75.9704 37.4184C76.0574 34.3019 74.8637 31.2741 72.6541 29.007C70.4445 26.7398 67.3954 25.4143 64.1835 25.3246C62.057 25.2652 59.9523 25.7501 58.0818 26.7303C56.2114 27.7105 54.6403 29.152 53.5271 30.9092C52.414 32.6664 51.7974 34.6782 51.7398 36.7416C51.6528 39.8581 52.8465 42.8859 55.0561 45.153C57.2657 47.4202 60.3148 48.7457 63.5267 48.8354C65.6532 48.8948 67.7579 48.4099 69.6284 47.4297C71.4988 46.4495 73.0699 45.008 74.1831 43.2508C75.2962 41.4936 75.9128 39.4818 75.9704 37.4184ZM183.874 50.7982C183.856 49.4819 183.468 48.1937 182.749 47.0635C182.03 45.9334 181.006 45.0007 179.779 44.3595C178.552 43.7184 177.166 43.3911 175.76 43.4107C173.637 43.4404 171.61 44.2595 170.128 45.6863C168.646 47.1131 167.828 49.0336 167.856 51.0218C167.874 52.3381 168.262 53.6263 168.981 54.7565C169.7 55.8866 170.725 56.8193 171.951 57.4605C173.178 58.1016 174.564 58.4289 175.97 58.4093C178.093 58.3796 180.121 57.5605 181.603 56.1337C183.084 54.7069 183.902 52.7864 183.874 50.7982Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape7&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.0305953125001 9.32554685349047)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.0064 0.0100006L9.3364 6.11826e-07C9.61064 -0.000292647 9.87453 0.104847 10.0721 0.293135C10.2697 0.481423 10.3861 0.738544 10.3964 1.01C11.3097 24.8167 12.6431 48.6333 14.3964 72.46C14.4564 73.2867 14.0697 73.7 13.2364 73.7L4.1864 73.7C2.9664 53.56 1.62973 33.49 0.1764 13.49C0.0364 11.5567 -0.0202667 7.06333 0.0064 0.0100006Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape8&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1631696428572 9.32765624999999)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M10.891 0L14.581 73.56L5.85095 73.67C5.70139 73.6731 5.55452 73.6294 5.43088 73.5452C5.30724 73.461 5.21287 73.3403 5.16095 73.2C4.86095 72.3733 4.66095 71.5033 4.56095 70.59C2.05429 47.6433 0.534286 24.6667 0.000952381 1.66C-0.0257143 0.566667 0.507619 0.02 1.60095 0.02Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape9&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.5362571970961 9.55219950584632)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.6165 8.41299C23.0565 14.743 19.7165 20.843 13.2865 21.823C10.7665 22.203 8.2998 21.7963 5.88646 20.603C1.4598 18.4097 -0.470205 14.2963 0.0964619 8.26299C2.85646 1.22966 7.66313 -1.31367 14.5165 0.632992C16.5565 1.21299 18.2265 2.11966 19.5265 3.35299C21.0465 4.79299 22.0765 6.47966 22.6165 8.41299Z&quot;&gt;&lt;/path&gt; &lt;circle id=&quot;shape10&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.0115625 10.18828125)&quot; r=&quot;11.89&quot; cx=&quot;11.89&quot; cy=&quot;11.89&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape11&quot; transform=&quot;matrix(0.0351425431068875 0.000981620111375468 -0.000981620111375468 0.0351425431068875 14.2130771675543 10.2015061448131)&quot; rx=&quot;12.12&quot; ry=&quot;11.76&quot; cx=&quot;12.12&quot; cy=&quot;11.76&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape12&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 20.1057469902912 10.4364122450525)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M16.9732 2.43205C21.3465 7.29205 21.5565 12.1821 17.6032 17.1021C4.5132 27.8821 -7.7468 7.16205 6.1132 0.862052C9.48653 -0.677948 13.1065 -0.154615 16.9732 2.43205Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape13&quot; transform=&quot;matrix(0.0351528231097021 -0.000490857902548076 0.000490857902548076 0.0351528231097021 18.2800569526222 10.8531762234766)&quot; rx=&quot;8.01&quot; ry=&quot;7.5&quot; cx=&quot;8.01&quot; cy=&quot;7.5&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape14&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.47390625 12.828515625)&quot; fill=&quot;rgb(3,4,3)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0 300.33C1.52 298.69 3.53 298.057 6.03 298.43C6.10297 298.443 6.17377 298.447 6.24 298.44C6.65333 298.413 6.88667 298.26 6.94 297.98C7 297.66 7.19333 297.493 7.52 297.48L10.29 297.39C10.4233 297.383 10.5567 297.367 10.69 297.34C11.0167 297.267 11.1733 297.127 11.16 296.92C11.1467 296.7 11.2467 296.563 11.46 296.51C12.1467 296.337 12.7433 295.997 13.25 295.49C13.49 295.257 13.58 294.973 13.52 294.64C13.1333 292.653 12.8767 290.647 12.75 288.62C12.69 287.79 12.27 287.35 11.7 286.83C11.4533 286.603 11.3933 286.337 11.52 286.03C11.8533 285.197 11.6767 284.573 10.99 284.16C10.7367 284 10.46 283.923 10.16 283.93L6.56 284.02C15.1 281.92 21.0833 280.04 24.51 278.38C27.5033 276.927 30.4033 275.357 33.21 273.67C33.319 273.603 33.3974 273.495 33.4282 273.371C33.4589 273.246 33.4397 273.115 33.3746 273.004C33.3096 272.894 33.2037 272.813 33.08 272.78C32.5067 272.62 31.9433 272.67 31.39 272.93C63.5767 260.003 88.4967 238.95 106.15 209.77C109.223 204.703 112.093 199 114.76 192.66C118.06 184.807 120.343 178.587 121.61 174C123.097 168.613 124.457 162.397 125.69 155.35C126.657 149.857 126.873 144.25 126.34 138.53C127.853 138.57 128.907 138.097 129.5 137.11C131.56 133.67 131.433 130.473 129.12 127.52C128.24 126.39 127.07 126.39 125.77 126.38C120.017 126.347 114.427 126.37 109 126.45C108.613 125.77 108.27 125.09 107.97 124.41C107.69 123.77 107.527 123.037 107.48 122.21C106.953 112.977 106.213 103.723 105.26 94.45C110.127 94.5633 114.617 94.5833 118.73 94.51C121.27 94.47 123.93 94.86 126 93.31C128.053 91.77 128.717 89.61 127.99 86.83C127.23 83.89 124.98 82.2967 121.24 82.05L120.9 72.32C124.973 70.3667 126.23 67.5767 124.67 63.95C123.697 61.6833 121.82 60.52 119.04 60.46C117.273 58.24 116.223 56.5633 115.89 55.43C113.43 47.1033 110.547 38.9133 107.24 30.86C106.947 30.1467 107 29.0333 107.4 27.52C109.087 27.4933 110.883 27.5267 112.79 27.62C115.45 27.7533 117.403 26.9667 118.65 25.26C121.02 22.01 120.02 17.98 116.55 16.23C115.597 15.75 114.193 15.5133 112.34 15.52C107.533 15.54 102.823 15.4767 98.21 15.33C97.6033 13.9433 96.9433 12.6033 96.23 11.31C94.38 7.96 93.99 4.82 92.56 1.46C92.4467 1.18667 92.5067 0.963333 92.74 0.79L93.19 0.46C93.4567 0.273333 93.4267 0.176667 93.1 0.17L55.31 0L131.2 0.2C131.371 0.200762 131.536 0.26037 131.671 0.369176C131.805 0.477981 131.9 0.629779 131.94 0.8C133.38 7.23333 134.593 14.0833 135.58 21.35C139.67 51.61 143.36 78.87 145.72 107.57C147.27 126.44 146.89 145.44 143.29 163.8C138.28 189.4 127.86 214.54 111.86 234.74C90.34 261.87 61.85 283.26 28.89 293.96C20.1567 296.793 10.5267 298.917 0 300.33Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape15&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.2758764491296 12.828515625)&quot; fill=&quot;rgb(7,6,6)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M231.61 0L269.4 0.17C269.726 0.176667 269.756 0.273333 269.49 0.46L269.04 0.79C268.806 0.963333 268.746 1.18667 268.86 1.46C270.29 4.82 270.68 7.96 272.53 11.31C273.243 12.6033 273.903 13.9433 274.51 15.33C268.76 17.07 269.07 27.78 275.82 27.53C278.38 27.43 281.006 27.4267 283.7 27.52C283.3 29.0333 283.246 30.1467 283.54 30.86C286.846 38.9133 289.73 47.1033 292.19 55.43C292.523 56.5633 293.573 58.24 295.34 60.46C290.98 60.76 286.806 61.0267 282.82 61.26C277.7 61.56 274.45 67.2 278.08 71.26C278.86 72.1333 280.413 72.6 282.74 72.66C287.386 72.7733 292.206 72.66 297.2 72.32L297.54 82.05C293.013 81.9567 288.443 81.9633 283.83 82.07C281.84 82.11 280.61 82.75 279.5 84.26C276.44 88.44 277.126 91.8367 281.56 94.45C282.513 103.723 283.253 112.977 283.78 122.21C283.826 123.037 283.99 123.77 284.27 124.41C284.57 125.09 284.913 125.77 285.3 126.45C282.193 127.497 280.633 129.463 280.62 132.35C280.613 134.79 281.763 136.753 284.07 138.24C281.93 156.593 277.493 173.123 270.76 187.83C261.606 207.817 247.22 225.063 227.6 239.57C218.546 246.263 208.406 252.023 197.18 256.85C191.52 259.28 187.21 264.45 191.61 270.42C195.03 275.03 202.58 274.56 207.69 272.93C208.243 272.67 208.806 272.62 209.38 272.78C209.503 272.813 209.609 272.894 209.674 273.004C209.739 273.115 209.758 273.246 209.728 273.371C209.697 273.495 209.619 273.603 209.51 273.67C206.703 275.357 203.803 276.927 200.81 278.38C197.383 280.04 191.4 281.92 182.86 284.02C165.386 287.427 148.786 288.113 133.06 286.08C116.433 283.94 99.2895 279.17 81.6295 271.77C75.1162 269.043 68.6828 266.14 62.3295 263.06C54.3762 259.2 46.8962 254.463 39.8895 248.85C40.5695 248.377 41.3595 247.947 42.2595 247.56C44.5695 246.55 46.3695 244.3 44.1695 241.99C29.1962 226.303 18.1928 209.247 11.1595 190.82C1.95285 166.687 -1.55715 141.62 0.629514 115.62C2.01618 99.0867 3.45618 82.5733 4.94951 66.08C5.49618 59.9533 6.20618 53.32 7.07951 46.18C8.95285 30.8733 10.7762 15.5733 12.5495 0.28ZM230.747 11.7302C228.758 9.7412 226.058 8.62261 223.245 8.62261C220.432 8.62261 217.731 9.7412 215.742 11.7302L213.89 13.5829C211.901 15.5719 210.782 18.2724 210.782 21.0853C210.782 23.8982 211.901 26.5987 213.89 28.5877L215.092 29.7898C217.081 31.7788 219.781 32.8974 222.594 32.8974C225.407 32.8974 228.108 31.7788 230.097 29.7898L231.949 27.9371C233.938 25.9481 235.057 23.2476 235.057 20.4347C235.057 17.6218 233.938 14.9213 231.949 12.9323ZM47.1595 186.78C39.7128 170.84 35.7195 154.833 35.1795 138.76C34.9528 131.94 35.0895 124.72 35.5895 117.1C37.1495 93.44 39.2662 67.4833 41.9395 39.23C42.3395 35.0167 42.6262 30.7267 42.7995 26.36C43.4195 10.9 25.2095 12.45 24.4195 25.69C23.0462 48.79 21.1195 72.2233 18.6395 95.99C17.6595 105.337 16.9995 114.63 16.6595 123.87C16.3328 132.65 16.6595 140.653 17.6395 147.88C19.5062 161.707 22.9728 175.147 28.0395 188.2C29.1795 191.153 30.6662 194.07 32.4995 196.95C35.2995 201.37 41.5395 202.72 45.3395 198.89C48.7328 195.483 49.3395 191.447 47.1595 186.78ZM87.1943 37.8021C86.8236 36.4743 85.902 35.3574 84.6342 34.6994C83.3663 34.0413 81.8534 33.8945 80.4311 34.2916C79.0088 34.6887 77.7908 35.598 77.0472 36.8177C76.3037 38.0374 76.094 39.4701 76.4647 40.7979C76.8355 42.1257 77.757 43.2426 79.0249 43.9006C80.2927 44.5587 81.8056 44.7055 83.2279 44.3084C84.6502 43.9113 85.8682 43.002 86.6118 41.7823C87.3554 40.5626 87.565 39.1299 87.1943 37.8021ZM242.9 63.3691C242.905 60.5116 242.14 57.7024 240.682 55.2252C239.224 52.7479 237.124 50.6888 234.594 49.2556C232.064 47.8225 229.192 47.0651 226.268 47.06C223.344 47.0549 220.469 47.8022 217.934 49.2266C215.399 50.6509 213.292 52.7027 211.826 55.1748C210.359 57.6469 209.585 60.4534 209.58 63.3109C209.575 66.1684 210.34 68.9776 211.797 71.4548C213.255 73.9321 215.355 75.9912 217.885 77.4244C220.415 78.8575 223.287 79.6149 226.211 79.62C229.135 79.6251 232.01 78.8778 234.545 77.4534C237.08 76.0291 239.187 73.9773 240.653 71.5052C242.12 69.0331 242.895 66.2266 242.9 63.3691ZM85.9041 71.8823C88.1531 72.912 90.7367 72.9736 93.0816 72.0534C95.4266 71.1333 97.3455 69.3049 98.4127 66.9739C99.1193 65.4306 99.4215 63.7348 99.2889 62.0574C99.1563 60.38 98.5935 58.7796 97.6572 57.4176C96.721 56.0556 95.4439 54.9794 93.9549 54.2977C91.7059 53.268 89.1223 53.2064 86.7774 54.1266C84.4325 55.0467 82.5135 56.8751 81.4463 59.2061C80.7398 60.7494 80.4375 62.4452 80.5701 64.1226C80.7028 65.8 81.2656 67.4004 82.2018 68.7624C83.1381 70.1244 84.4151 71.2006 85.9041 71.8823ZM60.6086 105.171C63.2448 106.638 66.3725 106.974 69.2978 106.105C72.223 105.236 74.7122 103.231 76.213 100.535C77.7138 97.8381 78.1063 94.6659 77.3035 91.7217C76.5007 88.7775 74.5666 86.2966 71.9304 84.8293C69.2942 83.362 66.1665 83.0257 63.2413 83.8948C60.316 84.7639 57.8268 86.7691 56.326 89.4655C54.8252 92.1619 54.4327 95.3341 55.2355 98.2783C56.0384 101.222 57.9724 103.703 60.6086 105.171ZM187.08 98.11C187.08 96.1959 186.318 94.3582 184.965 93.0047C183.611 91.6512 181.774 90.89 179.86 90.89C177.945 90.89 176.108 91.6512 174.754 93.0047C173.401 94.3582 172.64 96.1959 172.64 98.11C172.64 100.024 173.401 101.862 174.754 103.215C176.108 104.569 177.945 105.33 179.86 105.33C181.127 105.33 182.372 104.996 183.47 104.363C184.567 103.729 185.479 102.817 186.112 101.72C186.746 100.623 187.08 99.3773 187.08 98.11ZM234.564 99.0027C233.705 97.863 232.551 96.9774 231.217 96.4351C229.883 95.8929 228.416 95.7129 226.964 95.9133C225.513 96.1138 224.127 96.6877 222.947 97.5771C221.766 98.4665 220.833 99.6405 220.24 100.981C219.647 102.321 219.416 103.78 219.57 105.212C219.723 106.644 220.256 107.998 221.115 109.137C221.974 110.277 223.128 111.163 224.462 111.705C225.796 112.247 227.263 112.427 228.715 112.227C230.166 112.026 231.552 111.452 232.732 110.563C233.913 109.673 234.846 108.499 235.439 107.159C236.032 105.819 236.263 104.36 236.109 102.928C235.956 101.496 235.423 100.142 234.564 99.0027ZM47.9695 214.56C45.1695 220.83 50.0195 225.32 54.0495 229.45C57.6895 233.19 61.8995 236.09 66.6995 232.86C71.8895 229.38 72.0595 223.24 67.9795 218.66C64.2095 214.41 60.6395 209.6 54.3295 209.99C51.4095 210.17 49.1195 211.99 47.9695 214.56Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape16&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.8026079545455 12.838359375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M26.0114 0C24.238 15.2933 22.4147 30.5933 20.5414 45.9C19.668 53.04 18.958 59.6733 18.4114 65.8C16.918 82.2933 15.478 98.8067 14.0914 115.34C11.9047 141.34 15.4147 166.407 24.6214 190.54C31.6547 208.967 42.658 226.023 57.6314 241.71C59.8314 244.02 58.0314 246.27 55.7214 247.28C54.8214 247.667 54.0314 248.097 53.3514 248.57C51.9014 250.07 52.3314 253.14 52.3514 255.14C31.6214 235.93 17.0114 211.99 8.66137 185.13C2.48804 165.29 -0.385293 145.337 0.0413737 125.27C0.691374 94.91 5.82137 63.64 9.38137 32.5C9.99471 27.1467 10.7014 21.75 11.5014 16.31C12.3214 10.7767 13.5247 5.69667 15.1114 1.07C15.2107 0.778294 15.3987 0.524438 15.6494 0.343583C15.9001 0.162728 16.2013 0.0636261 16.5114 0.06Z&quot;&gt;&lt;/path&gt; &lt;rect id=&quot;shape17&quot; transform=&quot;matrix(0.0248592227760896 -0.0248592227760896 0.0248592227760896 0.0248592227760896 19.531681996495 13.569794617477)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; width=&quot;23.84&quot; height=&quot;22.92&quot; rx=&quot;10.61&quot; ry=&quot;10.61&quot;&gt;&lt;/rect&gt; &lt;path id=&quot;shape18&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.857255859375 13.3649990428515)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M30.6225 171.52C32.8025 176.187 32.1958 180.223 28.8025 183.63C25.0025 187.46 18.7625 186.11 15.9625 181.69C14.1292 178.81 12.6425 175.893 11.5025 172.94C6.43583 159.887 2.96917 146.447 1.1025 132.62C0.1225 125.393 -0.204167 117.39 0.1225 108.61C0.4625 99.37 1.1225 90.0767 2.1025 80.73C4.5825 56.9634 6.50917 33.53 7.8825 10.43C8.6725 -2.80997 26.8825 -4.35997 26.2625 11.1C26.0892 15.4667 25.8025 19.7567 25.4025 23.97C22.7292 52.2234 20.6125 78.18 19.0525 101.84C18.5525 109.46 18.4158 116.68 18.6425 123.5C19.1825 139.573 23.1758 155.58 30.6225 171.52Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape19&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.7841415488515 13.3674609375)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.0522 0C8.66553 0.146667 13.3755 0.21 18.1822 0.19C20.0355 0.183333 21.4389 0.42 22.3922 0.9C25.8622 2.65 26.8622 6.68 24.4922 9.93C23.2455 11.6367 21.2922 12.4233 18.6322 12.29C16.7255 12.1967 14.9289 12.1633 13.2422 12.19C10.5489 12.0967 7.9222 12.1 5.3622 12.2C-1.3878 12.45 -1.6978 1.74 4.0522 0Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape20&quot; transform=&quot;matrix(0.0338611839889802 -0.00945421244350544 0.00945421244350544 0.0338611839889802 14.9149266129752 14.0867380565676)&quot; rx=&quot;5.57&quot; ry=&quot;5.2&quot; cx=&quot;5.57&quot; cy=&quot;5.2&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape21&quot; transform=&quot;matrix(0.0351561964539828 6.13592003636124e-05 -6.13592003636124e-05 0.0351561964539828 19.6449060698586 14.4819473774511)&quot; rx=&quot;16.66&quot; ry=&quot;16.28&quot; cx=&quot;16.66&quot; cy=&quot;16.28&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape22&quot; transform=&quot;matrix(-0.0146348716029047 0.031965331958686 -0.031965331958686 -0.0146348716029047 15.8772166930746 14.8739620295146)&quot; rx=&quot;9.67&quot; ry=&quot;9.33&quot; cx=&quot;9.67&quot; cy=&quot;9.33&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape23&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.997793706651 14.9540625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M18.805 0C21.585 0.06 23.4616 1.22333 24.435 3.49C25.995 7.11667 24.7383 9.90667 20.665 11.86C15.6716 12.2 10.8516 12.3133 6.20498 12.2C3.87831 12.14 2.32498 11.6733 1.54498 10.8C-2.08502 6.74 1.16498 1.1 6.28498 0.8C10.2716 0.566667 14.445 0.3 18.805 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape24&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.0361349190606 15.7107890625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M19.9144 0.0653333C23.6544 0.312 25.9044 1.90533 26.6644 4.84533C27.3911 7.62533 26.7277 9.78533 24.6744 11.3253C22.6044 12.8753 19.9444 12.4853 17.4044 12.5253C13.2911 12.5987 8.80105 12.5787 3.93438 12.4653C-0.498949 9.852 -1.18562 6.45533 1.87438 2.27533C2.98438 0.765333 4.21438 0.125333 6.20438 0.0853333C10.8177 -0.0213333 15.3877 -0.028 19.9144 0.0653333Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape25&quot; transform=&quot;matrix(-0.0170977282180133 0.0307185547160906 -0.0307185547160906 -0.0170977282180133 15.1542587716268 16.0053675452257)&quot; rx=&quot;11.64&quot; ry=&quot;11.38&quot; cx=&quot;11.64&quot; cy=&quot;11.38&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;circle id=&quot;shape26&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.345234375 16.0238671875)&quot; r=&quot;7.22&quot; cx=&quot;7.22&quot; cy=&quot;7.22&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape27&quot; transform=&quot;matrix(0.0280770296501001 -0.0211575594076892 0.0211575594076892 0.0280770296501001 19.8774398273616 16.4371069616574)&quot; rx=&quot;8.42&quot; ry=&quot;8.13&quot; cx=&quot;8.42&quot; cy=&quot;8.13&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape28&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1414052368516 17.2710454963236)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.02 12.1647L3.45003 11.8747C1.14336 10.388 -0.00663785 8.42471 2.88184e-05 5.98471C0.0133622 3.09804 1.57336 1.13137 4.68003 0.0847059C10.1067 0.00470588 15.6967 -0.0186275 21.45 0.0147059C22.75 0.0247059 23.92 0.0247059 24.8 1.15471C27.1134 4.10804 27.24 7.30471 25.18 10.7447C24.5867 11.7314 23.5334 12.2047 22.02 12.1647Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape29&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.9485123620206 17.688515625)&quot; fill=&quot;rgb(4,5,4)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M94.2701 0L112.84 0.29C113.373 6.01 113.157 11.6167 112.19 17.11C110.957 24.1567 109.597 30.3733 108.11 35.76C106.843 40.3467 104.56 46.5667 101.26 54.42C98.5934 60.76 95.7234 66.4633 92.6501 71.53C74.9968 100.71 50.0768 121.763 17.8901 134.69C12.7801 136.32 5.23009 136.79 1.81009 132.18C-2.58991 126.21 1.72009 121.04 7.38009 118.61C18.6068 113.783 28.7468 108.023 37.8001 101.33C57.4201 86.8233 71.8068 69.5767 80.9601 49.59C87.6934 34.8833 92.1301 18.3533 94.2701 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape30&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9331058615201 20.210194296345)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.830544 4.59225C1.98054 2.02225 4.27054 0.202251 7.19054 0.0222511C13.5005 -0.367749 17.0705 4.44225 20.8405 8.69225C24.9205 13.2723 24.7505 19.4123 19.5605 22.8923C14.7605 26.1223 10.5505 23.2223 6.91054 19.4823C2.88054 15.3523 -1.96946 10.8623 0.830544 4.59225Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape31&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.6404577789765 21.5771484375)&quot; fill=&quot;rgb(4,5,4)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.07476 0C8.08142 5.61333 15.5614 10.35 23.5148 14.21C29.8681 17.29 36.3014 20.1933 42.8148 22.92C60.4748 30.32 77.6181 35.09 94.2448 37.23C109.971 39.2633 126.571 38.5767 144.045 35.17L147.645 35.08C147.945 35.0733 148.221 35.15 148.475 35.31C149.161 35.7233 149.338 36.3467 149.005 37.18C148.878 37.4867 148.938 37.7533 149.185 37.98C149.755 38.5 150.175 38.94 150.235 39.77C150.361 41.7967 150.618 43.8033 151.005 45.79C151.065 46.1233 150.975 46.4067 150.735 46.64C150.228 47.1467 149.631 47.4867 148.945 47.66C148.731 47.7133 148.631 47.85 148.645 48.07C148.658 48.2767 148.501 48.4167 148.175 48.49C148.041 48.5167 147.908 48.5333 147.775 48.54L145.005 48.63C144.678 48.6433 144.485 48.81 144.425 49.13C144.371 49.41 144.138 49.5633 143.725 49.59C143.659 49.5967 143.588 49.5933 143.515 49.58C141.015 49.2067 139.005 49.84 137.485 51.48C124.278 53.2267 112.368 53.5833 101.755 52.55C80.2748 50.4633 60.3014 44.84 41.8348 35.68C35.8281 32.7 28.6481 28.54 20.2948 23.2C14.0414 19.2067 7.30142 13.6633 0.0747565 6.57C0.0547565 4.57 -0.375243 1.5 1.07476 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape32&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.548046875 24.3846604970638)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M37.39 126.792L36.84 125.732C36.6867 125.445 36.61 125.139 36.61 124.812L36.29 50.1519C39.97 50.1319 42.74 50.0419 44.93 47.3519C46.0567 45.9652 46.4067 44.4152 45.98 42.7019C44.81 38.0219 40.08 37.5119 35.72 37.6019L35.91 26.2919C40.16 26.9019 44.77 27.8519 48.81 25.9619C52.26 24.3519 53.31 20.2319 50.85 17.2519C48.51 14.4319 45.36 14.2119 41.99 14.2719C35.7567 14.3852 29.3167 14.4052 22.67 14.3319C19.49 14.3019 16.81 15.9619 15.14 18.6319C15.2 16.6619 12.86 15.6819 11.44 14.7519C10.6133 14.2119 9.90667 13.5852 9.32 12.8719C6.57333 9.53188 3.78 6.23188 0.94 2.97188C0.46 2.41855 0.146667 1.62521 0 0.591879C17.1 3.24521 34.28 3.98188 51.54 2.80188C57.06 2.42188 62.3133 1.51855 67.3 0.0918792C68.18 -0.154787 68.3567 0.0952125 67.83 0.841879C58.7633 13.8352 53.49 29.3252 52.01 47.3119C50.37 67.3319 51 88.9819 56.8 107.652C58.81 114.142 62.13 120.072 65.01 126.212C65.0485 126.291 65.0589 126.382 65.0394 126.468C65.02 126.554 64.9718 126.631 64.9029 126.686C64.834 126.741 64.7483 126.772 64.66 126.772Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape33&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.486355851717 24.3923298330305)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.75477 0.373729C1.90143 1.40706 2.21477 2.2004 2.69477 2.75373C5.53477 6.01373 8.3281 9.31373 11.0748 12.6537C11.6614 13.3671 12.3681 13.9937 13.1948 14.5337C14.6148 15.4637 16.9548 16.4437 16.8948 18.4137L16.5848 19.0537C15.9714 19.3604 15.6748 19.8204 15.6948 20.4337C15.8148 23.3437 16.3448 26.1237 18.0248 28.6937C19.9714 31.6737 22.1714 34.5471 24.6248 37.3137C19.6548 39.6737 18.5548 46.9937 24.3448 49.3137C24.1981 53.2071 24.2048 57.1237 24.3648 61.0637C24.5581 65.7371 24.5748 69.6437 24.4148 72.7837C24.2014 77.0371 23.9914 81.3304 23.7848 85.6637C23.1248 99.8304 19.6748 113.244 13.4348 125.904C13.2814 126.21 13.0314 126.384 12.6848 126.424L11.5948 126.534L3.79477 126.534C3.66373 126.534 3.5364 126.49 3.43437 126.408C3.33234 126.325 3.26171 126.21 3.23447 126.082C3.20722 125.954 3.22499 125.82 3.28477 125.704C16.0848 100.784 18.1148 71.0737 14.6948 43.5737C12.8014 28.3737 7.92143 14.0371 0.0547669 0.563729C0.0152725 0.50031 -0.00361813 0.426609 0.000572506 0.352292C0.00476314 0.277975 0.0318434 0.20644 0.0782619 0.147067C0.12468 0.0876949 0.188315 0.0431997 0.26082 0.0194171C0.333326 -0.0043654 0.411387 -0.00634806 0.484767 0.0137292Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape34&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.0617214476865 24.8861307529877)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M21.2988 12.0278C16.7455 11.8878 12.1288 11.8545 7.44881 11.9278C4.74215 11.9678 2.94548 11.7312 2.05881 11.2178C0.238812 10.1645 -0.374521 8.0945 0.218812 5.00784L0.528812 4.36784C2.19881 1.69784 4.87881 0.0378364 8.05881 0.0678364C14.7055 0.14117 21.1455 0.12117 27.3788 0.00783636C30.7488 -0.0521636 33.8988 0.167836 36.2388 2.98784C38.6988 5.96784 37.6488 10.0878 34.1988 11.6978C30.1588 13.5878 25.5488 12.6378 21.2988 12.0278Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape35&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.038091694079 25.0621875000001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.890947 0C0.297614 3.08667 0.910947 5.15667 2.73095 6.21C3.61761 6.72333 5.41428 6.96 8.12095 6.92C12.8009 6.84667 17.4176 6.88 21.9709 7.02L21.7809 18.33L8.93095 18.26C6.47761 15.4933 4.27761 12.62 2.33095 9.64C0.650947 7.07 0.120947 4.29 0.000947368 1.38C-0.0190526 0.766667 0.277614 0.306667 0.890947 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape36&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.2047130847683 25.704140625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.19149 0L17.0415 0.07C21.4015 -0.02 26.1315 0.49 27.3015 5.17C27.7282 6.88333 27.3782 8.43333 26.2515 9.82C24.0615 12.51 21.2915 12.6 17.6115 12.62L3.91149 12C-1.87851 9.68 -0.778506 2.36 4.19149 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape37&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.893984375 26.126015625)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M12.75 0L26.45 0.62L26.77 75.28C26.77 75.6067 26.8467 75.9133 27 76.2L27.55 77.26L0 77.22L1.09 77.11C1.43667 77.07 1.68667 76.8967 1.84 76.59C8.08 63.93 11.53 50.5167 12.19 36.35C12.3967 32.0167 12.6067 27.7233 12.82 23.47C12.98 20.33 12.9633 16.4233 12.77 11.75C12.61 7.81 12.6033 3.89333 12.75 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape38&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.22640625 29.4324536132813)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M29.96 24.0302C30.7067 23.5835 30.1467 23.1702 28.28 22.7902C27.96 22.7235 27.6733 22.5835 27.42 22.3702C24.9333 20.2235 22.8967 18.7069 21.31 17.8202C12.91 13.1069 5.80667 7.21687 0 0.150208L30.09 0.000208333C30.4767 -0.00645833 30.7833 0.146875 31.01 0.460208C37.57 9.69354 45.7567 17.2435 55.57 23.1102C55.9433 23.3302 55.92 23.4969 55.5 23.6102C54.48 23.8769 53.4167 24.0135 52.31 24.0202C44.77 24.0669 37.32 24.0702 29.96 24.0302Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape39&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.2706541442871 29.4394921875)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M38.2747 0C35.2147 4.74667 31.2681 10.0433 26.4347 15.89C23.4547 19.49 20.7014 22.14 18.1747 23.84L0.754727 23.73C-0.17194 23.7233 -0.245273 23.4733 0.534727 22.98C9.87473 17.05 17.3747 9.52 24.9347 0.58C25.0571 0.432797 25.211 0.314351 25.3856 0.233119C25.5601 0.151886 25.7511 0.109846 25.9447 0.11Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape40&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.909609375 29.437734375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M65.9 0C71.7067 7.06667 78.81 12.9567 87.21 17.67C88.7967 18.5567 90.8333 20.0733 93.32 22.22C93.5733 22.4333 93.86 22.5733 94.18 22.64C96.0467 23.02 96.6067 23.4333 95.86 23.88L0 23.89C2.52667 22.19 5.28 19.54 8.26 15.94C13.0933 10.0933 17.04 4.79667 20.1 0.05Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape41&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.6264334548969 30.8390367406574)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M175.558 0.450733C176.245 0.450733 176.568 0.567399 176.528 0.800733C176.494 1.0303 176.388 1.24303 176.226 1.40826C176.065 1.5735 175.855 1.68291 175.628 1.72073C171.935 2.3474 168.581 2.65073 165.568 2.63073C163.998 2.62073 162.798 3.35073 161.188 3.18073C160.808 3.14073 160.445 3.20407 160.098 3.37073L158.488 4.16073C158.195 4.30073 157.958 4.50407 157.778 4.77073C157.045 5.85073 156.111 6.47073 154.978 6.63073C153.258 6.87073 151.491 6.99073 149.678 6.99073C111.858 6.8974 73.5681 6.84073 34.8081 6.82073C28.6781 6.82073 24.4281 9.63073 23.3181 15.9507L0.628115 15.8107C0.50059 15.8104 0.376138 15.7713 0.2713 15.6987C0.166463 15.626 0.0861025 15.5233 0.0409006 15.404C-0.00430136 15.2848 -0.0122487 15.1546 0.0181151 15.0307C2.16812 6.40073 10.0881 -0.0792673 19.0981 0.00073271C53.2181 0.314066 87.8014 0.380733 122.848 0.200733C140.421 0.114066 157.991 0.197399 175.558 0.450733Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape42&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.4462109375 30.8548828125)&quot; fill=&quot;rgb(7,6,6)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M152.24 0L253.08 0.15C253.047 2.17 252.56 3.72667 251.62 4.82C250.867 5.69333 249.93 6.13667 248.81 6.15C221.383 6.39 194.363 6.58667 167.75 6.74C167.283 6.74 167.03 6.97333 166.99 7.44C166.87 8.95333 167.113 10.3433 167.72 11.61C167.847 11.8833 167.89 12.1667 167.85 12.46L167.63 14.18C167.577 14.5867 167.74 14.86 168.12 15C168.573 15.1667 168.867 15.3533 169 15.56L0 15.5C1.11 9.18 5.36 6.37 11.49 6.37C50.25 6.39 88.54 6.44667 126.36 6.54C128.173 6.54 129.94 6.42 131.66 6.18C132.793 6.02 133.727 5.4 134.46 4.32C134.64 4.05333 134.877 3.85 135.17 3.71L136.78 2.92C137.127 2.75333 137.49 2.69 137.87 2.73C139.48 2.9 140.68 2.17 142.25 2.18C145.263 2.2 148.617 1.89667 152.31 1.27C152.537 1.23218 152.746 1.12277 152.908 0.957532C153.07 0.792295 153.175 0.579568 153.21 0.35C153.25 0.116667 152.927 -1.13687e-13 152.24 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape43&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 19.3159081135321 30.86015625)&quot; fill=&quot;rgb(4,5,4)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M86.1197 0C93.6331 3.14 98.2231 7.99667 99.8897 14.57C99.9181 14.684 99.9111 14.804 99.8698 14.914C99.8285 15.024 99.7547 15.1189 99.6583 15.186C99.5618 15.2532 99.4472 15.2894 99.3297 15.29L2.03972 15.41C1.90639 15.2033 1.61306 15.0167 1.15972 14.85C0.779725 14.71 0.616391 14.4367 0.669725 14.03L0.889725 12.31C0.929725 12.0167 0.886391 11.7333 0.759725 11.46C0.153058 10.1933 -0.0902752 8.80333 0.0297248 7.29C0.0697248 6.82333 0.323058 6.59 0.789725 6.59C27.4031 6.43667 54.4231 6.24 81.8497 6C82.9697 5.98667 83.9064 5.54333 84.6597 4.67C85.5997 3.57667 86.0864 2.02 86.1197 0Z&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt;&lt;div class=&quot;w-16 h-16&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;fill-[${rgbColor} w-16 h-16&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 36 36&quot;&gt; &lt;defs&gt;&lt;/defs&gt; &lt;path id=&quot;shape0&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 10.393984646722 3.24851063866497)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M384.119 800.308C389.392 800.401 395.079 800.381 401.179 800.248C405.299 800.161 408.469 800.568 410.689 801.468C415.949 803.598 420.779 810.198 420.289 816.268C419.669 823.858 412.349 829.318 404.999 829.328C277.499 829.355 146.952 829.355 13.3589 829.328C8.63888 829.328 4.09888 825.978 1.87888 822.058C-2.73112 813.888 1.52888 803.918 10.4389 801.028C11.9855 800.528 13.9555 800.285 16.3489 800.298C22.1289 800.338 27.6889 800.265 33.0289 800.078C33.1769 800.076 33.3188 800.017 33.4263 799.913C33.5337 799.809 33.5989 799.668 33.6089 799.518C33.7489 797.391 34.0889 795.351 34.6289 793.398C38.5755 779.138 46.7822 768.285 59.2489 760.838C67.2389 756.068 77.9989 753.418 87.8689 753.798C91.7089 753.938 95.6189 754.578 99.3589 753.338C121.612 745.945 138.126 732.518 148.899 713.058C160.649 691.848 162.149 664.098 156.689 640.298C150.949 615.338 135.539 594.358 113.659 581.418C104.759 576.151 97.1322 571.378 90.7789 567.098C79.8722 559.751 69.4389 550.391 59.4789 539.018C41.7922 518.825 28.7222 496.301 20.2689 471.448C13.2089 450.695 9.41555 429.945 8.88888 409.198C8.39555 389.938 9.51888 370.588 12.2589 351.148C15.7689 326.188 18.7489 301.968 22.2689 277.258C23.1955 270.798 23.9055 264.308 24.3989 257.788C25.2922 245.915 26.1489 234.441 26.9689 223.368C28.2189 206.548 28.2189 189.968 28.2289 172.948C28.229 172.665 28.1641 172.386 28.0392 172.133C27.9143 171.88 27.7328 171.659 27.5089 171.488C4.71888 154.278 -3.35112 123.728 10.2489 97.8679C21.8189 75.8479 44.3589 62.0579 69.5789 63.3579C72.9922 63.5379 76.3389 64.1179 79.6189 65.0979C79.7826 65.1468 79.9567 65.1513 80.1235 65.1109C80.2903 65.0705 80.4439 64.9867 80.5689 64.8679C95.3422 50.8279 113.322 44.9613 134.509 47.2679C134.656 47.2852 134.804 47.2536 134.932 47.1778C135.061 47.102 135.161 46.9862 135.219 46.8479C136.972 42.6213 139.372 38.5079 142.419 34.5079C153.299 20.2379 166.749 9.32792 184.089 3.97792C204.569 -2.34875 224.312 -1.12875 243.319 7.63792C258.599 14.6779 272.559 26.6579 280.469 41.6579C280.596 41.9046 280.792 41.9846 281.059 41.8979C289.839 38.9646 299.389 37.9446 309.709 38.8379C326.729 40.3079 342.309 50.4379 353.989 63.2879C354.516 63.8679 355.166 64.1746 355.939 64.2079C361.419 64.4546 366.656 65.5513 371.649 67.4979C392.199 75.5079 406.519 91.1379 411.669 112.968C413.189 119.421 413.456 125.841 412.469 132.228C409.882 148.975 401.956 162.205 388.689 171.918C387.729 172.628 387.729 173.468 387.719 174.528C387.586 191.895 387.899 207.108 388.659 220.168C389.549 235.238 390.999 253.908 393.189 270.758C396.622 297.205 400.169 324.231 403.829 351.838C404.689 358.351 405.536 366.615 406.369 376.628C407.042 384.655 407.406 391.321 407.459 396.628C407.679 420.268 404.476 443.035 397.849 464.928C386.419 502.718 363.929 536.538 333.029 561.268C324.009 568.498 312.959 575.088 302.869 581.488C297.502 584.888 292.979 588.131 289.299 591.218C265.139 611.508 255.039 640.758 256.429 672.398C258.039 709.018 277.959 738.488 312.639 751.718C317.389 753.528 321.449 754.508 326.659 754.038C338.269 753.008 349.089 755.608 359.129 762.058C371.639 770.088 381.589 784.038 383.299 799.558C383.352 800.045 383.626 800.295 384.119 800.308ZM34.9389 123.938C34.6255 130.038 36.5689 135.461 40.7689 140.208C42.9155 142.635 45.5089 143.855 48.5489 143.868C57.4489 143.895 67.6722 143.898 79.2189 143.878C80.8589 143.878 81.9889 142.308 82.5389 140.958C82.6855 140.585 82.6522 140.231 82.4389 139.898C80.5522 136.978 80.8189 134.321 83.2389 131.928C87.7189 127.508 91.8289 130.808 94.8789 134.678C97.7389 138.308 103.749 143.708 108.819 143.768C117.746 143.855 126.882 143.871 136.229 143.818C142.909 143.768 150.429 136.098 154.769 131.618C156.269 130.068 158.029 129.188 160.259 129.608C164.159 130.328 166.106 132.778 166.099 136.958C166.099 138.248 165.299 139.248 164.549 140.218C164.261 140.59 164.13 141.06 164.184 141.527C164.239 141.994 164.474 142.422 164.839 142.718C166.006 143.678 167.326 144.148 168.799 144.128C196.979 143.828 224.629 143.751 251.749 143.898C253.509 143.905 255.106 143.581 256.539 142.928C256.721 142.847 256.872 142.708 256.969 142.533C257.065 142.358 257.101 142.155 257.073 141.955C257.044 141.756 256.951 141.571 256.809 141.428C253.879 138.498 254.059 132.908 257.859 130.608C262.999 127.498 266.539 130.248 269.939 133.818C274.619 138.718 280.959 143.828 287.779 143.838C296.859 143.865 305.789 143.868 314.569 143.848C321.399 143.828 328.259 136.098 332.759 131.638C335.086 129.338 337.459 128.821 339.879 130.088C343.819 132.161 344.612 135.195 342.259 139.188C342.08 139.495 341.983 139.844 341.98 140.198C341.976 140.552 342.066 140.901 342.239 141.208C343.319 143.118 344.959 144.088 347.179 144.068C354.066 144.001 361.086 143.928 368.239 143.848C370.352 143.821 372.149 143.235 373.629 142.088C379.589 137.488 382.416 131.278 382.109 123.458C381.969 109.928 371.589 99.2079 359.169 95.4779C358.953 95.4151 358.724 95.4137 358.51 95.4738C358.296 95.534 358.105 95.6534 357.959 95.8179C355.212 98.9446 351.706 100.435 347.439 100.288C341.069 100.068 338.009 96.4579 335.789 91.1479C332.202 82.5946 326.232 76.3279 317.879 72.3479C307.626 67.4546 296.802 67.5779 285.409 72.7179C282.069 74.2179 279.519 77.4279 276.309 79.4679C269.159 84.0279 261.339 79.8879 260.179 71.8979C258.606 61.0979 253.279 51.6813 244.199 43.6479C217.109 19.6679 175.399 28.6579 160.839 61.6279C158.766 66.3279 157.699 70.8946 157.639 75.3279C157.559 80.8679 155.339 86.2279 149.929 88.1679C144.262 90.2146 139.372 89.0513 135.259 84.6779C133.749 83.0679 132.859 81.0279 131.499 79.3379C131.286 79.0646 131.012 78.8779 130.679 78.7779C128.472 78.1113 126.346 77.8213 124.299 77.9079C113.326 78.3813 104.429 83.1579 97.6089 92.2379C94.2189 96.7479 94.0089 102.468 90.0089 106.458C86.8589 109.588 81.6689 110.618 77.7089 108.488C73.0155 105.968 70.9422 101.938 71.4889 96.3979C71.5755 95.5313 71.1922 95.0446 70.3389 94.9379C59.7789 93.5446 50.8422 96.5046 43.5289 103.818C38.0555 109.291 35.1922 115.998 34.9389 123.938ZM70.3189 172.868L60.5489 172.868C60.0022 172.868 59.7255 173.141 59.7189 173.688C59.4855 194.395 58.5655 214.878 56.9589 235.138C56.6655 238.818 56.5355 242.431 56.5689 245.978C56.5689 246.378 56.7689 246.578 57.1689 246.578L287.389 246.598L306.739 246.558L315.789 246.558C316.622 246.558 317.009 246.145 316.949 245.318C315.196 221.491 313.862 197.675 312.949 173.868C312.939 173.596 312.822 173.339 312.625 173.151C312.427 172.963 312.163 172.858 311.889 172.858L302.559 172.868L102.799 172.818L85.9489 172.788ZM345.659 172.918L336.369 172.938C335.276 172.938 334.742 173.485 334.769 174.578C335.302 197.585 336.822 220.561 339.329 243.508C339.429 244.421 339.629 245.291 339.929 246.118C339.981 246.258 340.075 246.379 340.199 246.463C340.322 246.547 340.469 246.591 340.619 246.588L349.349 246.478L358.959 246.388C359.056 246.388 359.152 246.362 359.234 246.311C359.317 246.259 359.384 246.186 359.427 246.099C359.47 246.012 359.488 245.915 359.479 245.818C358.169 231.648 357.729 217.678 356.929 203.398C356.396 193.905 356.209 183.971 356.369 173.598C356.371 173.466 356.337 173.335 356.273 173.221C356.208 173.106 356.114 173.011 356.001 172.945C355.888 172.88 355.759 172.846 355.629 172.848ZM285.139 272.498L66.0789 272.778L56.5789 272.838C56.2688 272.842 55.9676 272.941 55.7169 273.122C55.4662 273.302 55.2782 273.556 55.1789 273.848C53.5922 278.475 52.3889 283.555 51.5689 289.088C50.7689 294.528 50.0622 299.925 49.4489 305.278C45.8889 336.418 40.7589 367.688 40.1089 398.048C39.6822 418.115 42.5555 438.068 48.7289 457.908C57.0789 484.768 71.6889 508.708 92.4189 527.918C99.6455 535.011 106.386 540.555 112.639 544.548C120.992 549.888 128.172 554.048 134.179 557.028C152.646 566.188 172.619 571.811 194.099 573.898C204.712 574.931 216.622 574.575 229.829 572.828C240.356 571.415 249.986 569.291 258.719 566.458C291.679 555.758 320.169 534.368 341.689 507.238C357.689 487.038 368.109 461.898 373.119 436.298C376.719 417.938 377.099 398.938 375.549 380.068C373.189 351.368 369.499 324.108 365.409 293.848C364.422 286.581 363.209 279.731 361.769 273.298C361.729 273.128 361.634 272.976 361.499 272.867C361.365 272.758 361.199 272.699 361.029 272.698ZM175.049 601.798L173.779 601.438C173.706 601.418 173.627 601.42 173.555 601.444C173.482 601.467 173.419 601.512 173.372 601.571C173.326 601.631 173.299 601.702 173.295 601.776C173.29 601.851 173.309 601.925 173.349 601.988C181.216 615.461 186.096 629.798 187.989 644.998C191.409 672.498 189.379 702.208 176.579 727.128C176.519 727.245 176.501 727.378 176.529 727.506C176.556 727.635 176.626 727.75 176.728 727.832C176.831 727.914 176.958 727.959 177.089 727.958L184.889 727.958L212.439 727.998L239.709 727.978C239.797 727.978 239.883 727.947 239.952 727.892C240.021 727.837 240.069 727.76 240.088 727.674C240.108 727.588 240.097 727.497 240.059 727.418C237.179 721.278 233.859 715.348 231.849 708.858C226.049 690.188 225.419 668.538 227.059 648.518C228.539 630.531 233.812 615.041 242.879 602.048C243.406 601.301 243.229 601.051 242.349 601.298C237.362 602.725 232.109 603.628 226.589 604.008C209.329 605.188 192.149 604.451 175.049 601.798ZM222.789 744.938L176.989 744.988L164.659 745.098C164.465 745.098 164.274 745.14 164.1 745.221C163.925 745.302 163.771 745.421 163.649 745.568C156.089 754.508 148.589 762.038 139.249 767.968C138.469 768.461 138.542 768.711 139.469 768.718L156.889 768.828L252.749 768.818C260.109 768.858 267.559 768.855 275.099 768.808C276.206 768.801 277.269 768.665 278.289 768.398C278.709 768.285 278.732 768.118 278.359 767.898C268.546 762.031 260.359 754.481 253.799 745.248C253.572 744.935 253.266 744.781 252.879 744.788ZM86.8189 800.748L255.819 800.808L353.109 800.688C353.226 800.687 353.341 800.651 353.437 800.584C353.534 800.517 353.608 800.422 353.649 800.312C353.69 800.202 353.697 800.082 353.669 799.968C352.002 793.395 347.412 788.538 339.899 785.398L239.059 785.248C221.492 784.995 203.922 784.911 186.349 784.998C151.302 785.178 116.719 785.111 82.5989 784.798C73.5889 784.718 65.6689 791.198 63.5189 799.828C63.4885 799.952 63.4965 800.082 63.5417 800.201C63.5869 800.32 63.6672 800.423 63.7721 800.496C63.8769 800.568 64.0014 800.608 64.1289 800.608Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape1&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6223046875 4.3066710451255)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.17 93.3591L341.7 94.8091C341.347 94.9025 341.043 95.0758 340.79 95.3291C334.81 101.209 327.56 101.079 319.06 100.739C316.15 100.619 313.98 99.6891 312.72 96.9491C310.21 91.4791 305.03 84.9891 298.07 88.5091C296.217 89.4491 294.677 90.6225 293.45 92.0291C288.01 98.2791 282.29 103.559 274.1 105.299C270.267 106.112 266.1 106.416 261.6 106.209C253.04 105.819 244.67 101.199 239.15 94.8491C232.37 87.0391 226.88 84.2491 219.24 92.9691C214.89 97.9391 209.89 101.049 202.97 101.219C196.37 101.379 189.917 101.426 183.61 101.359C182.93 101.352 182.43 100.989 182.11 100.269C182.01 100.04 181.975 99.7876 182.008 99.5391C182.042 99.2906 182.143 99.0554 182.3 98.8591C183.04 97.9325 183.813 97.0725 184.62 96.2791C187.09 93.8491 185.64 89.9291 183.51 87.8291C180.65 85.0091 175.91 85.9891 173.39 88.9391C172.23 90.2925 171.17 91.6391 170.21 92.9791C163.5 102.299 152.67 101.929 142.47 100.679C134.9 99.7591 131.64 94.3891 126.62 89.6591C123.633 86.8525 120.593 86.8391 117.5 89.6191C112.63 93.9791 108.24 99.7591 102.47 102.719C88.07 110.129 72.61 106.679 62.57 94.0391C58.62 89.0591 52.95 85.2191 47.21 90.7591C44.54 93.3491 43.94 96.9991 40.53 99.0891C36.59 101.509 29.55 101.139 24.26 101.029C18.64 100.899 13.25 100.999 9.85 97.1991C7.82 94.9191 4 93.8291 2.11 96.9691C1.02333 98.7691 0.446667 98.6225 0.38 96.5291C0.366667 95.9891 0.24 95.0925 0 93.8391C0.253333 85.8991 3.11667 79.1925 8.59 73.7191C15.9033 66.4058 24.84 63.4458 35.4 64.8391C36.2533 64.9458 36.6367 65.4325 36.55 66.2991C36.0033 71.8391 38.0767 75.8691 42.77 78.3891C46.73 80.5191 51.92 79.4891 55.07 76.3591C59.07 72.3691 59.28 66.6491 62.67 62.1391C69.49 53.0591 78.3867 48.2825 89.36 47.8091C91.4067 47.7225 93.5333 48.0125 95.74 48.6791C96.0733 48.7791 96.3467 48.9658 96.56 49.2391C97.92 50.9291 98.81 52.9691 100.32 54.5791C104.433 58.9525 109.323 60.1158 114.99 58.0691C120.4 56.1291 122.62 50.7691 122.7 45.2291C122.76 40.7958 123.827 36.2291 125.9 31.5291C140.46 -1.44087 182.17 -10.4309 209.26 13.5491C218.34 21.5825 223.667 30.9991 225.24 41.7991C226.4 49.7891 234.22 53.9291 241.37 49.3691C244.58 47.3291 247.13 44.1191 250.47 42.6191C261.863 37.4791 272.687 37.3558 282.94 42.2491C291.293 46.2291 297.263 52.4958 300.85 61.0491C303.07 66.3591 306.13 69.9691 312.5 70.1891C316.767 70.3358 320.273 68.8458 323.02 65.7191C323.166 65.5546 323.357 65.4352 323.571 65.3751C323.785 65.3149 324.014 65.3163 324.23 65.3791C336.65 69.1091 347.03 79.8291 347.17 93.3591Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape2&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6211575655465 7.33540715628013)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.203 7.20842C347.509 15.0284 344.683 21.2384 338.723 25.8384C337.243 26.9851 335.446 27.5718 333.333 27.5984C326.179 27.6784 319.159 27.7518 312.273 27.8184C310.053 27.8384 308.413 26.8684 307.333 24.9584C307.159 24.651 307.07 24.3028 307.074 23.9484C307.077 23.594 307.173 23.2458 307.353 22.9384C309.706 18.9451 308.913 15.9118 304.973 13.8384C302.553 12.5718 300.179 13.0884 297.853 15.3884C293.353 19.8484 286.493 27.5784 279.663 27.5984C270.883 27.6184 261.953 27.6151 252.873 27.5884C246.053 27.5784 239.713 22.4684 235.033 17.5684C231.633 13.9984 228.093 11.2484 222.953 14.3584C219.153 16.6584 218.973 22.2484 221.903 25.1784C222.045 25.3214 222.137 25.5067 222.166 25.706C222.195 25.9053 222.159 26.108 222.062 26.2834C221.966 26.4588 221.815 26.5975 221.633 26.6784C220.199 27.3318 218.603 27.6551 216.843 27.6484C189.723 27.5018 162.073 27.5784 133.893 27.8784C132.419 27.8984 131.099 27.4284 129.933 26.4684C129.567 26.1723 129.332 25.7446 129.278 25.2775C129.224 24.8105 129.355 24.3403 129.643 23.9684C130.393 22.9984 131.193 21.9984 131.193 20.7084C131.199 16.5284 129.253 14.0784 125.353 13.3584C123.123 12.9384 121.363 13.8184 119.863 15.3684C115.523 19.8484 108.003 27.5184 101.323 27.5684C91.976 27.6218 82.8393 27.6051 73.9126 27.5184C68.8426 27.4584 62.8326 22.0584 59.9726 18.4284C56.9226 14.5584 52.8126 11.2584 48.3326 15.6784C45.9126 18.0718 45.646 20.7284 47.5326 23.6484C47.746 23.9818 47.7793 24.3351 47.6326 24.7084C47.0826 26.0584 45.9526 27.6284 44.3126 27.6284C32.766 27.6484 22.5426 27.6451 13.6426 27.6184C10.6026 27.6051 8.0093 26.3851 5.86263 23.9584C1.66263 19.2118 -0.280704 13.7884 0.0326292 7.68842C0.272629 8.94175 0.399296 9.83842 0.412629 10.3784C0.479296 12.4718 1.05596 12.6184 2.14263 10.8184C4.03263 7.67842 7.85263 8.76842 9.88263 11.0484C13.2826 14.8484 18.6726 14.7484 24.2926 14.8784C29.5826 14.9884 36.6226 15.3584 40.5626 12.9384C43.9726 10.8484 44.5726 7.19842 47.2426 4.60842C52.9826 -0.931581 58.6526 2.90842 62.6026 7.88842C72.6426 20.5284 88.1026 23.9784 102.503 16.5684C108.273 13.6084 112.663 7.82842 117.533 3.46842C120.626 0.688419 123.666 0.701752 126.653 3.50842C131.673 8.23842 134.933 13.6084 142.503 14.5284C152.703 15.7784 163.533 16.1484 170.243 6.82842C171.203 5.48842 172.263 4.14175 173.423 2.78842C175.943 -0.161581 180.683 -1.14158 183.543 1.67842C185.673 3.77842 187.123 7.69842 184.653 10.1284C183.846 10.9218 183.073 11.7818 182.333 12.7084C182.175 12.9047 182.074 13.1399 182.041 13.3884C182.007 13.6369 182.043 13.8894 182.143 14.1184C182.463 14.8384 182.963 15.2018 183.643 15.2084C189.949 15.2751 196.403 15.2284 203.003 15.0684C209.923 14.8984 214.923 11.7884 219.273 6.81842C226.913 -1.90158 232.403 0.888419 239.183 8.69842C244.703 15.0484 253.073 19.6684 261.633 20.0584C266.133 20.2651 270.299 19.9618 274.133 19.1484C282.323 17.4084 288.043 12.1284 293.483 5.87842C294.709 4.47175 296.249 3.29842 298.103 2.35842C305.063 -1.16158 310.243 5.32842 312.753 10.7984C314.013 13.5384 316.183 14.4684 319.093 14.5884C327.593 14.9284 334.843 15.0584 340.823 9.17842C341.076 8.92509 341.379 8.75175 341.733 8.65842Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape3&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.7941352600339 9.3230859375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M17.6779 0C16.5513 11.84 15.9213 19.36 15.7879 22.56C15.3079 33.9733 14.6346 46.28 13.7679 59.48C13.6013 62.04 13.1046 63.7467 12.2779 64.6C8.55793 68.45 -0.30207 67.53 0.00793038 61.06C1.34793 33.3133 2.02793 12.9867 2.04793 0.08Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape4&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9413128810975 9.32414062500001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M201.657 0.05C201.63 7.10333 201.687 11.5967 201.827 13.53C203.28 33.53 204.617 53.6 205.837 73.74L186.487 73.78L193.557 73.61C193.714 73.6076 193.867 73.5609 193.998 73.4752C194.129 73.3896 194.234 73.2685 194.299 73.126C194.364 72.9835 194.388 72.8254 194.367 72.67C193.367 64.75 192.894 56.7733 192.947 48.74C196.9 43.82 196.69 38.93 192.317 34.07C191.537 32.47 191.137 31.2867 191.117 30.52C190.984 25.7933 191.01 21.2667 191.197 16.94C191.213 16.5684 191.128 16.1993 190.951 15.872C190.773 15.5446 190.51 15.2711 190.189 15.0807C189.868 14.8902 189.501 14.7897 189.127 14.79L153.317 14.9C152.777 12.9667 151.747 11.28 150.227 9.84C148.927 8.60667 147.257 7.7 145.217 7.12C138.364 5.17333 133.557 7.71667 130.797 14.75C116.39 14.8967 101.944 14.9467 87.4571 14.9C61.1271 14.81 34.7871 15.13 8.5371 15.06C6.00377 15.0533 4.15377 14.7633 2.9871 14.19C0.773767 13.11 -0.209566 11.2233 0.0371003 8.53C0.150434 7.29667 0.770434 4.45333 1.8971 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape5&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.5460546875 9.32519283839548)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M3.69 73.6301L0 0.0700704L9.97 7.03745e-05C10.1004 -0.00175254 10.2289 0.031869 10.3421 0.0974247C10.4553 0.16298 10.5492 0.258107 10.6139 0.372872C10.6786 0.487637 10.7118 0.617903 10.71 0.75007C10.55 11.1234 10.7367 21.0567 11.27 30.5501C12.07 44.8301 12.51 58.8001 13.82 72.9701C13.8293 73.0668 13.8114 73.1643 13.7681 73.2514C13.7249 73.3384 13.6581 73.4116 13.5754 73.4627C13.4926 73.5137 13.3972 73.5405 13.3 73.5401Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape6&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.3825550063776 9.3230859375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M13.7551 0.08C13.7351 12.9867 13.0551 33.3133 11.7151 61.06C11.4051 67.53 20.2651 68.45 23.9851 64.6C24.8118 63.7467 25.3084 62.04 25.4751 59.48C26.3418 46.28 27.0151 33.9733 27.4951 22.56C27.6284 19.36 28.2584 11.84 29.3851 0L46.2351 0.03C45.1084 4.48333 44.4884 7.32667 44.3751 8.56C44.1284 11.2533 45.1118 13.14 47.3251 14.22C48.4918 14.7933 50.3418 15.0833 52.8751 15.09C79.1251 15.16 105.465 14.84 131.795 14.93C146.282 14.9767 160.728 14.9267 175.135 14.78C174.568 20.8133 176.498 24.9267 180.925 27.12C183.338 28.3133 185.805 28.72 188.325 28.34C194.755 27.36 198.095 21.26 197.655 14.93L233.465 14.82C233.839 14.8197 234.206 14.9202 234.527 15.1107C234.848 15.3011 235.111 15.5746 235.289 15.902C235.466 16.2293 235.551 16.5984 235.535 16.97C235.348 21.2967 235.322 25.8233 235.455 30.55C235.475 31.3167 235.875 32.5 236.655 34.1C232.788 31.5133 229.168 30.99 225.795 32.53C211.935 38.83 224.195 59.55 237.285 48.77C237.232 56.8033 237.705 64.78 238.705 72.7C238.726 72.8554 238.702 73.0135 238.637 73.156C238.572 73.2985 238.467 73.4196 238.336 73.5052C238.205 73.5909 238.052 73.6376 237.895 73.64L230.825 73.81L0.605102 73.79C0.205102 73.79 0.00510204 73.59 0.00510204 73.19C-0.0282313 69.6433 0.101769 66.03 0.395102 62.35C2.00177 42.09 2.92177 21.6067 3.1551 0.9C3.16177 0.353333 3.43844 0.08 3.9851 0.08ZM127.005 36.5C127.005 34.413 126.456 32.3624 125.412 30.555C124.369 28.7476 122.867 27.2464 121.06 26.203C119.253 25.1595 117.202 24.61 115.115 24.61C111.963 24.61 108.937 25.8635 106.708 28.0925C104.479 30.3215 103.225 33.3478 103.225 36.5C103.225 39.6522 104.479 42.6785 106.708 44.9075C108.937 47.1365 111.963 48.39 115.115 48.39C117.202 48.39 119.253 47.8405 121.06 46.797C122.867 45.7536 124.369 44.2524 125.412 42.445C126.456 40.6376 127.005 38.587 127.005 36.5ZM75.9704 37.4184C76.0574 34.3019 74.8637 31.2741 72.6541 29.007C70.4445 26.7398 67.3954 25.4143 64.1835 25.3246C62.057 25.2652 59.9523 25.7501 58.0818 26.7303C56.2114 27.7105 54.6403 29.152 53.5271 30.9092C52.414 32.6664 51.7974 34.6782 51.7398 36.7416C51.6528 39.8581 52.8465 42.8859 55.0561 45.153C57.2657 47.4202 60.3148 48.7457 63.5267 48.8354C65.6532 48.8948 67.7579 48.4099 69.6284 47.4297C71.4988 46.4495 73.0699 45.008 74.1831 43.2508C75.2962 41.4936 75.9128 39.4818 75.9704 37.4184ZM183.874 50.7982C183.856 49.4819 183.468 48.1937 182.749 47.0635C182.03 45.9334 181.006 45.0007 179.779 44.3595C178.552 43.7184 177.166 43.3911 175.76 43.4107C173.637 43.4404 171.61 44.2595 170.128 45.6863C168.646 47.1131 167.828 49.0336 167.856 51.0218C167.874 52.3381 168.262 53.6263 168.981 54.7565C169.7 55.8866 170.725 56.8193 171.951 57.4605C173.178 58.1016 174.564 58.4289 175.97 58.4093C178.093 58.3796 180.121 57.5605 181.603 56.1337C183.084 54.7069 183.902 52.7864 183.874 50.7982Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape7&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.0305953125001 9.32554685349047)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.0064 0.0100006L9.3364 6.11826e-07C9.61064 -0.000292647 9.87453 0.104847 10.0721 0.293135C10.2697 0.481423 10.3861 0.738544 10.3964 1.01C11.3097 24.8167 12.6431 48.6333 14.3964 72.46C14.4564 73.2867 14.0697 73.7 13.2364 73.7L4.1864 73.7C2.9664 53.56 1.62973 33.49 0.1764 13.49C0.0364 11.5567 -0.0202667 7.06333 0.0064 0.0100006Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape8&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1631696428572 9.32765624999999)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M10.891 0L14.581 73.56L5.85095 73.67C5.70139 73.6731 5.55452 73.6294 5.43088 73.5452C5.30724 73.461 5.21287 73.3403 5.16095 73.2C4.86095 72.3733 4.66095 71.5033 4.56095 70.59C2.05429 47.6433 0.534286 24.6667 0.000952381 1.66C-0.0257143 0.566667 0.507619 0.02 1.60095 0.02Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape9&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.5362571970961 9.55219950584632)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.6165 8.41299C23.0565 14.743 19.7165 20.843 13.2865 21.823C10.7665 22.203 8.2998 21.7963 5.88646 20.603C1.4598 18.4097 -0.470205 14.2963 0.0964619 8.26299C2.85646 1.22966 7.66313 -1.31367 14.5165 0.632992C16.5565 1.21299 18.2265 2.11966 19.5265 3.35299C21.0465 4.79299 22.0765 6.47966 22.6165 8.41299Z&quot;&gt;&lt;/path&gt; &lt;circle id=&quot;shape10&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.0115625 10.18828125)&quot; r=&quot;11.89&quot; cx=&quot;11.89&quot; cy=&quot;11.89&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape11&quot; transform=&quot;matrix(0.0351425431068875 0.000981620111375468 -0.000981620111375468 0.0351425431068875 14.2130771675543 10.2015061448131)&quot; rx=&quot;12.12&quot; ry=&quot;11.76&quot; cx=&quot;12.12&quot; cy=&quot;11.76&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape12&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 20.1057469902912 10.4364122450525)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M16.9732 2.43205C21.3465 7.29205 21.5565 12.1821 17.6032 17.1021C4.5132 27.8821 -7.7468 7.16205 6.1132 0.862052C9.48653 -0.677948 13.1065 -0.154615 16.9732 2.43205Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape13&quot; transform=&quot;matrix(0.0351528231097021 -0.000490857902548076 0.000490857902548076 0.0351528231097021 18.2800569526222 10.8531762234766)&quot; rx=&quot;8.01&quot; ry=&quot;7.5&quot; cx=&quot;8.01&quot; cy=&quot;7.5&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape14&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.47390625 12.828515625)&quot; fill=&quot;rgb(3,4,3)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0 300.33C1.52 298.69 3.53 298.057 6.03 298.43C6.10297 298.443 6.17377 298.447 6.24 298.44C6.65333 298.413 6.88667 298.26 6.94 297.98C7 297.66 7.19333 297.493 7.52 297.48L10.29 297.39C10.4233 297.383 10.5567 297.367 10.69 297.34C11.0167 297.267 11.1733 297.127 11.16 296.92C11.1467 296.7 11.2467 296.563 11.46 296.51C12.1467 296.337 12.7433 295.997 13.25 295.49C13.49 295.257 13.58 294.973 13.52 294.64C13.1333 292.653 12.8767 290.647 12.75 288.62C12.69 287.79 12.27 287.35 11.7 286.83C11.4533 286.603 11.3933 286.337 11.52 286.03C11.8533 285.197 11.6767 284.573 10.99 284.16C10.7367 284 10.46 283.923 10.16 283.93L6.56 284.02C15.1 281.92 21.0833 280.04 24.51 278.38C27.5033 276.927 30.4033 275.357 33.21 273.67C33.319 273.603 33.3974 273.495 33.4282 273.371C33.4589 273.246 33.4397 273.115 33.3746 273.004C33.3096 272.894 33.2037 272.813 33.08 272.78C32.5067 272.62 31.9433 272.67 31.39 272.93C63.5767 260.003 88.4967 238.95 106.15 209.77C109.223 204.703 112.093 199 114.76 192.66C118.06 184.807 120.343 178.587 121.61 174C123.097 168.613 124.457 162.397 125.69 155.35C126.657 149.857 126.873 144.25 126.34 138.53C127.853 138.57 128.907 138.097 129.5 137.11C131.56 133.67 131.433 130.473 129.12 127.52C128.24 126.39 127.07 126.39 125.77 126.38C120.017 126.347 114.427 126.37 109 126.45C108.613 125.77 108.27 125.09 107.97 124.41C107.69 123.77 107.527 123.037 107.48 122.21C106.953 112.977 106.213 103.723 105.26 94.45C110.127 94.5633 114.617 94.5833 118.73 94.51C121.27 94.47 123.93 94.86 126 93.31C128.053 91.77 128.717 89.61 127.99 86.83C127.23 83.89 124.98 82.2967 121.24 82.05L120.9 72.32C124.973 70.3667 126.23 67.5767 124.67 63.95C123.697 61.6833 121.82 60.52 119.04 60.46C117.273 58.24 116.223 56.5633 115.89 55.43C113.43 47.1033 110.547 38.9133 107.24 30.86C106.947 30.1467 107 29.0333 107.4 27.52C109.087 27.4933 110.883 27.5267 112.79 27.62C115.45 27.7533 117.403 26.9667 118.65 25.26C121.02 22.01 120.02 17.98 116.55 16.23C115.597 15.75 114.193 15.5133 112.34 15.52C107.533 15.54 102.823 15.4767 98.21 15.33C97.6033 13.9433 96.9433 12.6033 96.23 11.31C94.38 7.96 93.99 4.82 92.56 1.46C92.4467 1.18667 92.5067 0.963333 92.74 0.79L93.19 0.46C93.4567 0.273333 93.4267 0.176667 93.1 0.17L55.31 0L131.2 0.2C131.371 0.200762 131.536 0.26037 131.671 0.369176C131.805 0.477981 131.9 0.629779 131.94 0.8C133.38 7.23333 134.593 14.0833 135.58 21.35C139.67 51.61 143.36 78.87 145.72 107.57C147.27 126.44 146.89 145.44 143.29 163.8C138.28 189.4 127.86 214.54 111.86 234.74C90.34 261.87 61.85 283.26 28.89 293.96C20.1567 296.793 10.5267 298.917 0 300.33Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape15&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.2758764491296 12.828515625)&quot; fill=&quot;rgb(4,5,4)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M231.61 0L269.4 0.17C269.726 0.176667 269.756 0.273333 269.49 0.46L269.04 0.79C268.806 0.963333 268.746 1.18667 268.86 1.46C270.29 4.82 270.68 7.96 272.53 11.31C273.243 12.6033 273.903 13.9433 274.51 15.33C268.76 17.07 269.07 27.78 275.82 27.53C278.38 27.43 281.006 27.4267 283.7 27.52C283.3 29.0333 283.246 30.1467 283.54 30.86C286.846 38.9133 289.73 47.1033 292.19 55.43C292.523 56.5633 293.573 58.24 295.34 60.46C290.98 60.76 286.806 61.0267 282.82 61.26C277.7 61.56 274.45 67.2 278.08 71.26C278.86 72.1333 280.413 72.6 282.74 72.66C287.386 72.7733 292.206 72.66 297.2 72.32L297.54 82.05C293.013 81.9567 288.443 81.9633 283.83 82.07C281.84 82.11 280.61 82.75 279.5 84.26C276.44 88.44 277.126 91.8367 281.56 94.45C282.513 103.723 283.253 112.977 283.78 122.21C283.826 123.037 283.99 123.77 284.27 124.41C284.57 125.09 284.913 125.77 285.3 126.45C282.193 127.497 280.633 129.463 280.62 132.35C280.613 134.79 281.763 136.753 284.07 138.24C281.93 156.593 277.493 173.123 270.76 187.83C261.606 207.817 247.22 225.063 227.6 239.57C218.546 246.263 208.406 252.023 197.18 256.85C191.52 259.28 187.21 264.45 191.61 270.42C195.03 275.03 202.58 274.56 207.69 272.93C208.243 272.67 208.806 272.62 209.38 272.78C209.503 272.813 209.609 272.894 209.674 273.004C209.739 273.115 209.758 273.246 209.728 273.371C209.697 273.495 209.619 273.603 209.51 273.67C206.703 275.357 203.803 276.927 200.81 278.38C197.383 280.04 191.4 281.92 182.86 284.02C165.386 287.427 148.786 288.113 133.06 286.08C116.433 283.94 99.2895 279.17 81.6295 271.77C75.1162 269.043 68.6828 266.14 62.3295 263.06C54.3762 259.2 46.8962 254.463 39.8895 248.85C40.5695 248.377 41.3595 247.947 42.2595 247.56C44.5695 246.55 46.3695 244.3 44.1695 241.99C29.1962 226.303 18.1928 209.247 11.1595 190.82C1.95285 166.687 -1.55715 141.62 0.629514 115.62C2.01618 99.0867 3.45618 82.5733 4.94951 66.08C5.49618 59.9533 6.20618 53.32 7.07951 46.18C8.95285 30.8733 10.7762 15.5733 12.5495 0.28ZM230.747 11.7302C228.758 9.7412 226.058 8.62261 223.245 8.62261C220.432 8.62261 217.731 9.7412 215.742 11.7302L213.89 13.5829C211.901 15.5719 210.782 18.2724 210.782 21.0853C210.782 23.8982 211.901 26.5987 213.89 28.5877L215.092 29.7898C217.081 31.7788 219.781 32.8974 222.594 32.8974C225.407 32.8974 228.108 31.7788 230.097 29.7898L231.949 27.9371C233.938 25.9481 235.057 23.2476 235.057 20.4347C235.057 17.6218 233.938 14.9213 231.949 12.9323ZM47.1595 186.78C39.7128 170.84 35.7195 154.833 35.1795 138.76C34.9528 131.94 35.0895 124.72 35.5895 117.1C37.1495 93.44 39.2662 67.4833 41.9395 39.23C42.3395 35.0167 42.6262 30.7267 42.7995 26.36C43.4195 10.9 25.2095 12.45 24.4195 25.69C23.0462 48.79 21.1195 72.2233 18.6395 95.99C17.6595 105.337 16.9995 114.63 16.6595 123.87C16.3328 132.65 16.6595 140.653 17.6395 147.88C19.5062 161.707 22.9728 175.147 28.0395 188.2C29.1795 191.153 30.6662 194.07 32.4995 196.95C35.2995 201.37 41.5395 202.72 45.3395 198.89C48.7328 195.483 49.3395 191.447 47.1595 186.78ZM87.1943 37.8021C86.8236 36.4743 85.902 35.3574 84.6342 34.6994C83.3663 34.0413 81.8534 33.8945 80.4311 34.2916C79.0088 34.6887 77.7908 35.598 77.0472 36.8177C76.3037 38.0374 76.094 39.4701 76.4647 40.7979C76.8355 42.1257 77.757 43.2426 79.0249 43.9006C80.2927 44.5587 81.8056 44.7055 83.2279 44.3084C84.6502 43.9113 85.8682 43.002 86.6118 41.7823C87.3554 40.5626 87.565 39.1299 87.1943 37.8021ZM242.9 63.3691C242.905 60.5116 242.14 57.7024 240.682 55.2252C239.224 52.7479 237.124 50.6888 234.594 49.2556C232.064 47.8225 229.192 47.0651 226.268 47.06C223.344 47.0549 220.469 47.8022 217.934 49.2266C215.399 50.6509 213.292 52.7027 211.826 55.1748C210.359 57.6469 209.585 60.4534 209.58 63.3109C209.575 66.1684 210.34 68.9776 211.797 71.4548C213.255 73.9321 215.355 75.9912 217.885 77.4244C220.415 78.8575 223.287 79.6149 226.211 79.62C229.135 79.6251 232.01 78.8778 234.545 77.4534C237.08 76.0291 239.187 73.9773 240.653 71.5052C242.12 69.0331 242.895 66.2266 242.9 63.3691ZM85.9041 71.8823C88.1531 72.912 90.7367 72.9736 93.0816 72.0534C95.4266 71.1333 97.3455 69.3049 98.4127 66.9739C99.1193 65.4306 99.4215 63.7348 99.2889 62.0574C99.1563 60.38 98.5935 58.7796 97.6572 57.4176C96.721 56.0556 95.4439 54.9794 93.9549 54.2977C91.7059 53.268 89.1223 53.2064 86.7774 54.1266C84.4325 55.0467 82.5135 56.8751 81.4463 59.2061C80.7398 60.7494 80.4375 62.4452 80.5701 64.1226C80.7028 65.8 81.2656 67.4004 82.2018 68.7624C83.1381 70.1244 84.4151 71.2006 85.9041 71.8823ZM60.6086 105.171C63.2448 106.638 66.3725 106.974 69.2978 106.105C72.223 105.236 74.7122 103.231 76.213 100.535C77.7138 97.8381 78.1063 94.6659 77.3035 91.7217C76.5007 88.7775 74.5666 86.2966 71.9304 84.8293C69.2942 83.362 66.1665 83.0257 63.2413 83.8948C60.316 84.7639 57.8268 86.7691 56.326 89.4655C54.8252 92.1619 54.4327 95.3341 55.2355 98.2783C56.0384 101.222 57.9724 103.703 60.6086 105.171ZM187.08 98.11C187.08 96.1959 186.318 94.3582 184.965 93.0047C183.611 91.6512 181.774 90.89 179.86 90.89C177.945 90.89 176.108 91.6512 174.754 93.0047C173.401 94.3582 172.64 96.1959 172.64 98.11C172.64 100.024 173.401 101.862 174.754 103.215C176.108 104.569 177.945 105.33 179.86 105.33C181.127 105.33 182.372 104.996 183.47 104.363C184.567 103.729 185.479 102.817 186.112 101.72C186.746 100.623 187.08 99.3773 187.08 98.11ZM234.564 99.0027C233.705 97.863 232.551 96.9774 231.217 96.4351C229.883 95.8929 228.416 95.7129 226.964 95.9133C225.513 96.1138 224.127 96.6877 222.947 97.5771C221.766 98.4665 220.833 99.6405 220.24 100.981C219.647 102.321 219.416 103.78 219.57 105.212C219.723 106.644 220.256 107.998 221.115 109.137C221.974 110.277 223.128 111.163 224.462 111.705C225.796 112.247 227.263 112.427 228.715 112.227C230.166 112.026 231.552 111.452 232.732 110.563C233.913 109.673 234.846 108.499 235.439 107.159C236.032 105.819 236.263 104.36 236.109 102.928C235.956 101.496 235.423 100.142 234.564 99.0027ZM47.9695 214.56C45.1695 220.83 50.0195 225.32 54.0495 229.45C57.6895 233.19 61.8995 236.09 66.6995 232.86C71.8895 229.38 72.0595 223.24 67.9795 218.66C64.2095 214.41 60.6395 209.6 54.3295 209.99C51.4095 210.17 49.1195 211.99 47.9695 214.56Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape16&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.8026079545455 12.838359375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M26.0114 0C24.238 15.2933 22.4147 30.5933 20.5414 45.9C19.668 53.04 18.958 59.6733 18.4114 65.8C16.918 82.2933 15.478 98.8067 14.0914 115.34C11.9047 141.34 15.4147 166.407 24.6214 190.54C31.6547 208.967 42.658 226.023 57.6314 241.71C59.8314 244.02 58.0314 246.27 55.7214 247.28C54.8214 247.667 54.0314 248.097 53.3514 248.57C51.9014 250.07 52.3314 253.14 52.3514 255.14C31.6214 235.93 17.0114 211.99 8.66137 185.13C2.48804 165.29 -0.385293 145.337 0.0413737 125.27C0.691374 94.91 5.82137 63.64 9.38137 32.5C9.99471 27.1467 10.7014 21.75 11.5014 16.31C12.3214 10.7767 13.5247 5.69667 15.1114 1.07C15.2107 0.778294 15.3987 0.524438 15.6494 0.343583C15.9001 0.162728 16.2013 0.0636261 16.5114 0.06Z&quot;&gt;&lt;/path&gt; &lt;rect id=&quot;shape17&quot; transform=&quot;matrix(0.0248592227760896 -0.0248592227760896 0.0248592227760896 0.0248592227760896 19.531681996495 13.569794617477)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; width=&quot;23.84&quot; height=&quot;22.92&quot; rx=&quot;10.61&quot; ry=&quot;10.61&quot;&gt;&lt;/rect&gt; &lt;path id=&quot;shape18&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.857255859375 13.3649990428515)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M30.6225 171.52C32.8025 176.187 32.1958 180.223 28.8025 183.63C25.0025 187.46 18.7625 186.11 15.9625 181.69C14.1292 178.81 12.6425 175.893 11.5025 172.94C6.43583 159.887 2.96917 146.447 1.1025 132.62C0.1225 125.393 -0.204167 117.39 0.1225 108.61C0.4625 99.37 1.1225 90.0767 2.1025 80.73C4.5825 56.9634 6.50917 33.53 7.8825 10.43C8.6725 -2.80997 26.8825 -4.35997 26.2625 11.1C26.0892 15.4667 25.8025 19.7567 25.4025 23.97C22.7292 52.2234 20.6125 78.18 19.0525 101.84C18.5525 109.46 18.4158 116.68 18.6425 123.5C19.1825 139.573 23.1758 155.58 30.6225 171.52Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape19&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.7841415488515 13.3674609375)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.0522 0C8.66553 0.146667 13.3755 0.21 18.1822 0.19C20.0355 0.183333 21.4389 0.42 22.3922 0.9C25.8622 2.65 26.8622 6.68 24.4922 9.93C23.2455 11.6367 21.2922 12.4233 18.6322 12.29C16.7255 12.1967 14.9289 12.1633 13.2422 12.19C10.5489 12.0967 7.9222 12.1 5.3622 12.2C-1.3878 12.45 -1.6978 1.74 4.0522 0Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape20&quot; transform=&quot;matrix(0.0338611839889802 -0.00945421244350544 0.00945421244350544 0.0338611839889802 14.9149266129752 14.0867380565676)&quot; rx=&quot;5.57&quot; ry=&quot;5.2&quot; cx=&quot;5.57&quot; cy=&quot;5.2&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape21&quot; transform=&quot;matrix(0.0351561964539828 6.13592003636124e-05 -6.13592003636124e-05 0.0351561964539828 19.6449060698586 14.4819473774511)&quot; rx=&quot;16.66&quot; ry=&quot;16.28&quot; cx=&quot;16.66&quot; cy=&quot;16.28&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape22&quot; transform=&quot;matrix(-0.0146348716029047 0.031965331958686 -0.031965331958686 -0.0146348716029047 15.8772166930746 14.8739620295146)&quot; rx=&quot;9.67&quot; ry=&quot;9.33&quot; cx=&quot;9.67&quot; cy=&quot;9.33&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape23&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.997793706651 14.9540625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M18.805 0C21.585 0.06 23.4616 1.22333 24.435 3.49C25.995 7.11667 24.7383 9.90667 20.665 11.86C15.6716 12.2 10.8516 12.3133 6.20498 12.2C3.87831 12.14 2.32498 11.6733 1.54498 10.8C-2.08502 6.74 1.16498 1.1 6.28498 0.8C10.2716 0.566667 14.445 0.3 18.805 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape24&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.0361349190606 15.7107890625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M19.9144 0.0653333C23.6544 0.312 25.9044 1.90533 26.6644 4.84533C27.3911 7.62533 26.7277 9.78533 24.6744 11.3253C22.6044 12.8753 19.9444 12.4853 17.4044 12.5253C13.2911 12.5987 8.80105 12.5787 3.93438 12.4653C-0.498949 9.852 -1.18562 6.45533 1.87438 2.27533C2.98438 0.765333 4.21438 0.125333 6.20438 0.0853333C10.8177 -0.0213333 15.3877 -0.028 19.9144 0.0653333Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape25&quot; transform=&quot;matrix(-0.0170977282180133 0.0307185547160906 -0.0307185547160906 -0.0170977282180133 15.1542587716268 16.0053675452257)&quot; rx=&quot;11.64&quot; ry=&quot;11.38&quot; cx=&quot;11.64&quot; cy=&quot;11.38&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;circle id=&quot;shape26&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.345234375 16.0238671875)&quot; r=&quot;7.22&quot; cx=&quot;7.22&quot; cy=&quot;7.22&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape27&quot; transform=&quot;matrix(0.0280770296501001 -0.0211575594076892 0.0211575594076892 0.0280770296501001 19.8774398273616 16.4371069616574)&quot; rx=&quot;8.42&quot; ry=&quot;8.13&quot; cx=&quot;8.42&quot; cy=&quot;8.13&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape28&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1414052368516 17.2710454963236)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.02 12.1647L3.45003 11.8747C1.14336 10.388 -0.00663785 8.42471 2.88184e-05 5.98471C0.0133622 3.09804 1.57336 1.13137 4.68003 0.0847059C10.1067 0.00470588 15.6967 -0.0186275 21.45 0.0147059C22.75 0.0247059 23.92 0.0247059 24.8 1.15471C27.1134 4.10804 27.24 7.30471 25.18 10.7447C24.5867 11.7314 23.5334 12.2047 22.02 12.1647Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape29&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.9485123620206 17.688515625)&quot; fill=&quot;rgb(3,4,3)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M94.2701 0L112.84 0.29C113.373 6.01 113.157 11.6167 112.19 17.11C110.957 24.1567 109.597 30.3733 108.11 35.76C106.843 40.3467 104.56 46.5667 101.26 54.42C98.5934 60.76 95.7234 66.4633 92.6501 71.53C74.9968 100.71 50.0768 121.763 17.8901 134.69C12.7801 136.32 5.23009 136.79 1.81009 132.18C-2.58991 126.21 1.72009 121.04 7.38009 118.61C18.6068 113.783 28.7468 108.023 37.8001 101.33C57.4201 86.8233 71.8068 69.5767 80.9601 49.59C87.6934 34.8833 92.1301 18.3533 94.2701 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape30&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9331058615201 20.210194296345)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.830544 4.59225C1.98054 2.02225 4.27054 0.202251 7.19054 0.0222511C13.5005 -0.367749 17.0705 4.44225 20.8405 8.69225C24.9205 13.2723 24.7505 19.4123 19.5605 22.8923C14.7605 26.1223 10.5505 23.2223 6.91054 19.4823C2.88054 15.3523 -1.96946 10.8623 0.830544 4.59225Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape31&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.6404577789765 21.5771484375)&quot; fill=&quot;rgb(3,4,3)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.07476 0C8.08142 5.61333 15.5614 10.35 23.5148 14.21C29.8681 17.29 36.3014 20.1933 42.8148 22.92C60.4748 30.32 77.6181 35.09 94.2448 37.23C109.971 39.2633 126.571 38.5767 144.045 35.17L147.645 35.08C147.945 35.0733 148.221 35.15 148.475 35.31C149.161 35.7233 149.338 36.3467 149.005 37.18C148.878 37.4867 148.938 37.7533 149.185 37.98C149.755 38.5 150.175 38.94 150.235 39.77C150.361 41.7967 150.618 43.8033 151.005 45.79C151.065 46.1233 150.975 46.4067 150.735 46.64C150.228 47.1467 149.631 47.4867 148.945 47.66C148.731 47.7133 148.631 47.85 148.645 48.07C148.658 48.2767 148.501 48.4167 148.175 48.49C148.041 48.5167 147.908 48.5333 147.775 48.54L145.005 48.63C144.678 48.6433 144.485 48.81 144.425 49.13C144.371 49.41 144.138 49.5633 143.725 49.59C143.659 49.5967 143.588 49.5933 143.515 49.58C141.015 49.2067 139.005 49.84 137.485 51.48C124.278 53.2267 112.368 53.5833 101.755 52.55C80.2748 50.4633 60.3014 44.84 41.8348 35.68C35.8281 32.7 28.6481 28.54 20.2948 23.2C14.0414 19.2067 7.30142 13.6633 0.0747565 6.57C0.0547565 4.57 -0.375243 1.5 1.07476 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape32&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.548046875 24.3846604970638)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M37.39 126.792L36.84 125.732C36.6867 125.445 36.61 125.139 36.61 124.812L36.29 50.1519C39.97 50.1319 42.74 50.0419 44.93 47.3519C46.0567 45.9652 46.4067 44.4152 45.98 42.7019C44.81 38.0219 40.08 37.5119 35.72 37.6019L35.91 26.2919C40.16 26.9019 44.77 27.8519 48.81 25.9619C52.26 24.3519 53.31 20.2319 50.85 17.2519C48.51 14.4319 45.36 14.2119 41.99 14.2719C35.7567 14.3852 29.3167 14.4052 22.67 14.3319C19.49 14.3019 16.81 15.9619 15.14 18.6319C15.2 16.6619 12.86 15.6819 11.44 14.7519C10.6133 14.2119 9.90667 13.5852 9.32 12.8719C6.57333 9.53188 3.78 6.23188 0.94 2.97188C0.46 2.41855 0.146667 1.62521 0 0.591879C17.1 3.24521 34.28 3.98188 51.54 2.80188C57.06 2.42188 62.3133 1.51855 67.3 0.0918792C68.18 -0.154787 68.3567 0.0952125 67.83 0.841879C58.7633 13.8352 53.49 29.3252 52.01 47.3119C50.37 67.3319 51 88.9819 56.8 107.652C58.81 114.142 62.13 120.072 65.01 126.212C65.0485 126.291 65.0589 126.382 65.0394 126.468C65.02 126.554 64.9718 126.631 64.9029 126.686C64.834 126.741 64.7483 126.772 64.66 126.772Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape33&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.486355851717 24.3923298330305)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.75477 0.373729C1.90143 1.40706 2.21477 2.2004 2.69477 2.75373C5.53477 6.01373 8.3281 9.31373 11.0748 12.6537C11.6614 13.3671 12.3681 13.9937 13.1948 14.5337C14.6148 15.4637 16.9548 16.4437 16.8948 18.4137L16.5848 19.0537C15.9714 19.3604 15.6748 19.8204 15.6948 20.4337C15.8148 23.3437 16.3448 26.1237 18.0248 28.6937C19.9714 31.6737 22.1714 34.5471 24.6248 37.3137C19.6548 39.6737 18.5548 46.9937 24.3448 49.3137C24.1981 53.2071 24.2048 57.1237 24.3648 61.0637C24.5581 65.7371 24.5748 69.6437 24.4148 72.7837C24.2014 77.0371 23.9914 81.3304 23.7848 85.6637C23.1248 99.8304 19.6748 113.244 13.4348 125.904C13.2814 126.21 13.0314 126.384 12.6848 126.424L11.5948 126.534L3.79477 126.534C3.66373 126.534 3.5364 126.49 3.43437 126.408C3.33234 126.325 3.26171 126.21 3.23447 126.082C3.20722 125.954 3.22499 125.82 3.28477 125.704C16.0848 100.784 18.1148 71.0737 14.6948 43.5737C12.8014 28.3737 7.92143 14.0371 0.0547669 0.563729C0.0152725 0.50031 -0.00361813 0.426609 0.000572506 0.352292C0.00476314 0.277975 0.0318434 0.20644 0.0782619 0.147067C0.12468 0.0876949 0.188315 0.0431997 0.26082 0.0194171C0.333326 -0.0043654 0.411387 -0.00634806 0.484767 0.0137292Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape34&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.0617214476865 24.8861307529877)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M21.2988 12.0278C16.7455 11.8878 12.1288 11.8545 7.44881 11.9278C4.74215 11.9678 2.94548 11.7312 2.05881 11.2178C0.238812 10.1645 -0.374521 8.0945 0.218812 5.00784L0.528812 4.36784C2.19881 1.69784 4.87881 0.0378364 8.05881 0.0678364C14.7055 0.14117 21.1455 0.12117 27.3788 0.00783636C30.7488 -0.0521636 33.8988 0.167836 36.2388 2.98784C38.6988 5.96784 37.6488 10.0878 34.1988 11.6978C30.1588 13.5878 25.5488 12.6378 21.2988 12.0278Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape35&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.038091694079 25.0621875000001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.890947 0C0.297614 3.08667 0.910947 5.15667 2.73095 6.21C3.61761 6.72333 5.41428 6.96 8.12095 6.92C12.8009 6.84667 17.4176 6.88 21.9709 7.02L21.7809 18.33L8.93095 18.26C6.47761 15.4933 4.27761 12.62 2.33095 9.64C0.650947 7.07 0.120947 4.29 0.000947368 1.38C-0.0190526 0.766667 0.277614 0.306667 0.890947 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape36&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.2047130847683 25.704140625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.19149 0L17.0415 0.07C21.4015 -0.02 26.1315 0.49 27.3015 5.17C27.7282 6.88333 27.3782 8.43333 26.2515 9.82C24.0615 12.51 21.2915 12.6 17.6115 12.62L3.91149 12C-1.87851 9.68 -0.778506 2.36 4.19149 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape37&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.893984375 26.126015625)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M12.75 0L26.45 0.62L26.77 75.28C26.77 75.6067 26.8467 75.9133 27 76.2L27.55 77.26L0 77.22L1.09 77.11C1.43667 77.07 1.68667 76.8967 1.84 76.59C8.08 63.93 11.53 50.5167 12.19 36.35C12.3967 32.0167 12.6067 27.7233 12.82 23.47C12.98 20.33 12.9633 16.4233 12.77 11.75C12.61 7.81 12.6033 3.89333 12.75 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape38&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.22640625 29.4324536132813)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M29.96 24.0302C30.7067 23.5835 30.1467 23.1702 28.28 22.7902C27.96 22.7235 27.6733 22.5835 27.42 22.3702C24.9333 20.2235 22.8967 18.7069 21.31 17.8202C12.91 13.1069 5.80667 7.21687 0 0.150208L30.09 0.000208333C30.4767 -0.00645833 30.7833 0.146875 31.01 0.460208C37.57 9.69354 45.7567 17.2435 55.57 23.1102C55.9433 23.3302 55.92 23.4969 55.5 23.6102C54.48 23.8769 53.4167 24.0135 52.31 24.0202C44.77 24.0669 37.32 24.0702 29.96 24.0302Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape39&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.2706541442871 29.4394921875)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M38.2747 0C35.2147 4.74667 31.2681 10.0433 26.4347 15.89C23.4547 19.49 20.7014 22.14 18.1747 23.84L0.754727 23.73C-0.17194 23.7233 -0.245273 23.4733 0.534727 22.98C9.87473 17.05 17.3747 9.52 24.9347 0.58C25.0571 0.432797 25.211 0.314351 25.3856 0.233119C25.5601 0.151886 25.7511 0.109846 25.9447 0.11Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape40&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.909609375 29.437734375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M65.9 0C71.7067 7.06667 78.81 12.9567 87.21 17.67C88.7967 18.5567 90.8333 20.0733 93.32 22.22C93.5733 22.4333 93.86 22.5733 94.18 22.64C96.0467 23.02 96.6067 23.4333 95.86 23.88L0 23.89C2.52667 22.19 5.28 19.54 8.26 15.94C13.0933 10.0933 17.04 4.79667 20.1 0.05Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape41&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.6264334548969 30.8390367406574)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M175.558 0.450733C176.245 0.450733 176.568 0.567399 176.528 0.800733C176.494 1.0303 176.388 1.24303 176.226 1.40826C176.065 1.5735 175.855 1.68291 175.628 1.72073C171.935 2.3474 168.581 2.65073 165.568 2.63073C163.998 2.62073 162.798 3.35073 161.188 3.18073C160.808 3.14073 160.445 3.20407 160.098 3.37073L158.488 4.16073C158.195 4.30073 157.958 4.50407 157.778 4.77073C157.045 5.85073 156.111 6.47073 154.978 6.63073C153.258 6.87073 151.491 6.99073 149.678 6.99073C111.858 6.8974 73.5681 6.84073 34.8081 6.82073C28.6781 6.82073 24.4281 9.63073 23.3181 15.9507L0.628115 15.8107C0.50059 15.8104 0.376138 15.7713 0.2713 15.6987C0.166463 15.626 0.0861025 15.5233 0.0409006 15.404C-0.00430136 15.2848 -0.0122487 15.1546 0.0181151 15.0307C2.16812 6.40073 10.0881 -0.0792673 19.0981 0.00073271C53.2181 0.314066 87.8014 0.380733 122.848 0.200733C140.421 0.114066 157.991 0.197399 175.558 0.450733Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape42&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.4462109375 30.8548828125)&quot; fill=&quot;rgb(4,5,4)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M152.24 0L253.08 0.15C253.047 2.17 252.56 3.72667 251.62 4.82C250.867 5.69333 249.93 6.13667 248.81 6.15C221.383 6.39 194.363 6.58667 167.75 6.74C167.283 6.74 167.03 6.97333 166.99 7.44C166.87 8.95333 167.113 10.3433 167.72 11.61C167.847 11.8833 167.89 12.1667 167.85 12.46L167.63 14.18C167.577 14.5867 167.74 14.86 168.12 15C168.573 15.1667 168.867 15.3533 169 15.56L0 15.5C1.11 9.18 5.36 6.37 11.49 6.37C50.25 6.39 88.54 6.44667 126.36 6.54C128.173 6.54 129.94 6.42 131.66 6.18C132.793 6.02 133.727 5.4 134.46 4.32C134.64 4.05333 134.877 3.85 135.17 3.71L136.78 2.92C137.127 2.75333 137.49 2.69 137.87 2.73C139.48 2.9 140.68 2.17 142.25 2.18C145.263 2.2 148.617 1.89667 152.31 1.27C152.537 1.23218 152.746 1.12277 152.908 0.957532C153.07 0.792295 153.175 0.579568 153.21 0.35C153.25 0.116667 152.927 -1.13687e-13 152.24 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape43&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 19.3159081135321 30.86015625)&quot; fill=&quot;rgb(3,4,3)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M86.1197 0C93.6331 3.14 98.2231 7.99667 99.8897 14.57C99.9181 14.684 99.9111 14.804 99.8698 14.914C99.8285 15.024 99.7547 15.1189 99.6583 15.186C99.5618 15.2532 99.4472 15.2894 99.3297 15.29L2.03972 15.41C1.90639 15.2033 1.61306 15.0167 1.15972 14.85C0.779725 14.71 0.616391 14.4367 0.669725 14.03L0.889725 12.31C0.929725 12.0167 0.886391 11.7333 0.759725 11.46C0.153058 10.1933 -0.0902752 8.80333 0.0297248 7.29C0.0697248 6.82333 0.323058 6.59 0.789725 6.59C27.4031 6.43667 54.4231 6.24 81.8497 6C82.9697 5.98667 83.9064 5.54333 84.6597 4.67C85.5997 3.57667 86.0864 2.02 86.1197 0Z&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt;&lt;div class=&quot;w-16 h-16&quot;&gt; &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;fill-[${rgbColor} w-16 h-16&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 36 36&quot;&gt; &lt;defs&gt;&lt;/defs&gt; &lt;path id=&quot;shape0&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 10.393984646722 3.24851063866497)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M384.119 800.308C389.392 800.401 395.079 800.381 401.179 800.248C405.299 800.161 408.469 800.568 410.689 801.468C415.949 803.598 420.779 810.198 420.289 816.268C419.669 823.858 412.349 829.318 404.999 829.328C277.499 829.355 146.952 829.355 13.3589 829.328C8.63888 829.328 4.09888 825.978 1.87888 822.058C-2.73112 813.888 1.52888 803.918 10.4389 801.028C11.9855 800.528 13.9555 800.285 16.3489 800.298C22.1289 800.338 27.6889 800.265 33.0289 800.078C33.1769 800.076 33.3188 800.017 33.4263 799.913C33.5337 799.809 33.5989 799.668 33.6089 799.518C33.7489 797.391 34.0889 795.351 34.6289 793.398C38.5755 779.138 46.7822 768.285 59.2489 760.838C67.2389 756.068 77.9989 753.418 87.8689 753.798C91.7089 753.938 95.6189 754.578 99.3589 753.338C121.612 745.945 138.126 732.518 148.899 713.058C160.649 691.848 162.149 664.098 156.689 640.298C150.949 615.338 135.539 594.358 113.659 581.418C104.759 576.151 97.1322 571.378 90.7789 567.098C79.8722 559.751 69.4389 550.391 59.4789 539.018C41.7922 518.825 28.7222 496.301 20.2689 471.448C13.2089 450.695 9.41555 429.945 8.88888 409.198C8.39555 389.938 9.51888 370.588 12.2589 351.148C15.7689 326.188 18.7489 301.968 22.2689 277.258C23.1955 270.798 23.9055 264.308 24.3989 257.788C25.2922 245.915 26.1489 234.441 26.9689 223.368C28.2189 206.548 28.2189 189.968 28.2289 172.948C28.229 172.665 28.1641 172.386 28.0392 172.133C27.9143 171.88 27.7328 171.659 27.5089 171.488C4.71888 154.278 -3.35112 123.728 10.2489 97.8679C21.8189 75.8479 44.3589 62.0579 69.5789 63.3579C72.9922 63.5379 76.3389 64.1179 79.6189 65.0979C79.7826 65.1468 79.9567 65.1513 80.1235 65.1109C80.2903 65.0705 80.4439 64.9867 80.5689 64.8679C95.3422 50.8279 113.322 44.9613 134.509 47.2679C134.656 47.2852 134.804 47.2536 134.932 47.1778C135.061 47.102 135.161 46.9862 135.219 46.8479C136.972 42.6213 139.372 38.5079 142.419 34.5079C153.299 20.2379 166.749 9.32792 184.089 3.97792C204.569 -2.34875 224.312 -1.12875 243.319 7.63792C258.599 14.6779 272.559 26.6579 280.469 41.6579C280.596 41.9046 280.792 41.9846 281.059 41.8979C289.839 38.9646 299.389 37.9446 309.709 38.8379C326.729 40.3079 342.309 50.4379 353.989 63.2879C354.516 63.8679 355.166 64.1746 355.939 64.2079C361.419 64.4546 366.656 65.5513 371.649 67.4979C392.199 75.5079 406.519 91.1379 411.669 112.968C413.189 119.421 413.456 125.841 412.469 132.228C409.882 148.975 401.956 162.205 388.689 171.918C387.729 172.628 387.729 173.468 387.719 174.528C387.586 191.895 387.899 207.108 388.659 220.168C389.549 235.238 390.999 253.908 393.189 270.758C396.622 297.205 400.169 324.231 403.829 351.838C404.689 358.351 405.536 366.615 406.369 376.628C407.042 384.655 407.406 391.321 407.459 396.628C407.679 420.268 404.476 443.035 397.849 464.928C386.419 502.718 363.929 536.538 333.029 561.268C324.009 568.498 312.959 575.088 302.869 581.488C297.502 584.888 292.979 588.131 289.299 591.218C265.139 611.508 255.039 640.758 256.429 672.398C258.039 709.018 277.959 738.488 312.639 751.718C317.389 753.528 321.449 754.508 326.659 754.038C338.269 753.008 349.089 755.608 359.129 762.058C371.639 770.088 381.589 784.038 383.299 799.558C383.352 800.045 383.626 800.295 384.119 800.308ZM34.9389 123.938C34.6255 130.038 36.5689 135.461 40.7689 140.208C42.9155 142.635 45.5089 143.855 48.5489 143.868C57.4489 143.895 67.6722 143.898 79.2189 143.878C80.8589 143.878 81.9889 142.308 82.5389 140.958C82.6855 140.585 82.6522 140.231 82.4389 139.898C80.5522 136.978 80.8189 134.321 83.2389 131.928C87.7189 127.508 91.8289 130.808 94.8789 134.678C97.7389 138.308 103.749 143.708 108.819 143.768C117.746 143.855 126.882 143.871 136.229 143.818C142.909 143.768 150.429 136.098 154.769 131.618C156.269 130.068 158.029 129.188 160.259 129.608C164.159 130.328 166.106 132.778 166.099 136.958C166.099 138.248 165.299 139.248 164.549 140.218C164.261 140.59 164.13 141.06 164.184 141.527C164.239 141.994 164.474 142.422 164.839 142.718C166.006 143.678 167.326 144.148 168.799 144.128C196.979 143.828 224.629 143.751 251.749 143.898C253.509 143.905 255.106 143.581 256.539 142.928C256.721 142.847 256.872 142.708 256.969 142.533C257.065 142.358 257.101 142.155 257.073 141.955C257.044 141.756 256.951 141.571 256.809 141.428C253.879 138.498 254.059 132.908 257.859 130.608C262.999 127.498 266.539 130.248 269.939 133.818C274.619 138.718 280.959 143.828 287.779 143.838C296.859 143.865 305.789 143.868 314.569 143.848C321.399 143.828 328.259 136.098 332.759 131.638C335.086 129.338 337.459 128.821 339.879 130.088C343.819 132.161 344.612 135.195 342.259 139.188C342.08 139.495 341.983 139.844 341.98 140.198C341.976 140.552 342.066 140.901 342.239 141.208C343.319 143.118 344.959 144.088 347.179 144.068C354.066 144.001 361.086 143.928 368.239 143.848C370.352 143.821 372.149 143.235 373.629 142.088C379.589 137.488 382.416 131.278 382.109 123.458C381.969 109.928 371.589 99.2079 359.169 95.4779C358.953 95.4151 358.724 95.4137 358.51 95.4738C358.296 95.534 358.105 95.6534 357.959 95.8179C355.212 98.9446 351.706 100.435 347.439 100.288C341.069 100.068 338.009 96.4579 335.789 91.1479C332.202 82.5946 326.232 76.3279 317.879 72.3479C307.626 67.4546 296.802 67.5779 285.409 72.7179C282.069 74.2179 279.519 77.4279 276.309 79.4679C269.159 84.0279 261.339 79.8879 260.179 71.8979C258.606 61.0979 253.279 51.6813 244.199 43.6479C217.109 19.6679 175.399 28.6579 160.839 61.6279C158.766 66.3279 157.699 70.8946 157.639 75.3279C157.559 80.8679 155.339 86.2279 149.929 88.1679C144.262 90.2146 139.372 89.0513 135.259 84.6779C133.749 83.0679 132.859 81.0279 131.499 79.3379C131.286 79.0646 131.012 78.8779 130.679 78.7779C128.472 78.1113 126.346 77.8213 124.299 77.9079C113.326 78.3813 104.429 83.1579 97.6089 92.2379C94.2189 96.7479 94.0089 102.468 90.0089 106.458C86.8589 109.588 81.6689 110.618 77.7089 108.488C73.0155 105.968 70.9422 101.938 71.4889 96.3979C71.5755 95.5313 71.1922 95.0446 70.3389 94.9379C59.7789 93.5446 50.8422 96.5046 43.5289 103.818C38.0555 109.291 35.1922 115.998 34.9389 123.938ZM70.3189 172.868L60.5489 172.868C60.0022 172.868 59.7255 173.141 59.7189 173.688C59.4855 194.395 58.5655 214.878 56.9589 235.138C56.6655 238.818 56.5355 242.431 56.5689 245.978C56.5689 246.378 56.7689 246.578 57.1689 246.578L287.389 246.598L306.739 246.558L315.789 246.558C316.622 246.558 317.009 246.145 316.949 245.318C315.196 221.491 313.862 197.675 312.949 173.868C312.939 173.596 312.822 173.339 312.625 173.151C312.427 172.963 312.163 172.858 311.889 172.858L302.559 172.868L102.799 172.818L85.9489 172.788ZM345.659 172.918L336.369 172.938C335.276 172.938 334.742 173.485 334.769 174.578C335.302 197.585 336.822 220.561 339.329 243.508C339.429 244.421 339.629 245.291 339.929 246.118C339.981 246.258 340.075 246.379 340.199 246.463C340.322 246.547 340.469 246.591 340.619 246.588L349.349 246.478L358.959 246.388C359.056 246.388 359.152 246.362 359.234 246.311C359.317 246.259 359.384 246.186 359.427 246.099C359.47 246.012 359.488 245.915 359.479 245.818C358.169 231.648 357.729 217.678 356.929 203.398C356.396 193.905 356.209 183.971 356.369 173.598C356.371 173.466 356.337 173.335 356.273 173.221C356.208 173.106 356.114 173.011 356.001 172.945C355.888 172.88 355.759 172.846 355.629 172.848ZM285.139 272.498L66.0789 272.778L56.5789 272.838C56.2688 272.842 55.9676 272.941 55.7169 273.122C55.4662 273.302 55.2782 273.556 55.1789 273.848C53.5922 278.475 52.3889 283.555 51.5689 289.088C50.7689 294.528 50.0622 299.925 49.4489 305.278C45.8889 336.418 40.7589 367.688 40.1089 398.048C39.6822 418.115 42.5555 438.068 48.7289 457.908C57.0789 484.768 71.6889 508.708 92.4189 527.918C99.6455 535.011 106.386 540.555 112.639 544.548C120.992 549.888 128.172 554.048 134.179 557.028C152.646 566.188 172.619 571.811 194.099 573.898C204.712 574.931 216.622 574.575 229.829 572.828C240.356 571.415 249.986 569.291 258.719 566.458C291.679 555.758 320.169 534.368 341.689 507.238C357.689 487.038 368.109 461.898 373.119 436.298C376.719 417.938 377.099 398.938 375.549 380.068C373.189 351.368 369.499 324.108 365.409 293.848C364.422 286.581 363.209 279.731 361.769 273.298C361.729 273.128 361.634 272.976 361.499 272.867C361.365 272.758 361.199 272.699 361.029 272.698ZM175.049 601.798L173.779 601.438C173.706 601.418 173.627 601.42 173.555 601.444C173.482 601.467 173.419 601.512 173.372 601.571C173.326 601.631 173.299 601.702 173.295 601.776C173.29 601.851 173.309 601.925 173.349 601.988C181.216 615.461 186.096 629.798 187.989 644.998C191.409 672.498 189.379 702.208 176.579 727.128C176.519 727.245 176.501 727.378 176.529 727.506C176.556 727.635 176.626 727.75 176.728 727.832C176.831 727.914 176.958 727.959 177.089 727.958L184.889 727.958L212.439 727.998L239.709 727.978C239.797 727.978 239.883 727.947 239.952 727.892C240.021 727.837 240.069 727.76 240.088 727.674C240.108 727.588 240.097 727.497 240.059 727.418C237.179 721.278 233.859 715.348 231.849 708.858C226.049 690.188 225.419 668.538 227.059 648.518C228.539 630.531 233.812 615.041 242.879 602.048C243.406 601.301 243.229 601.051 242.349 601.298C237.362 602.725 232.109 603.628 226.589 604.008C209.329 605.188 192.149 604.451 175.049 601.798ZM222.789 744.938L176.989 744.988L164.659 745.098C164.465 745.098 164.274 745.14 164.1 745.221C163.925 745.302 163.771 745.421 163.649 745.568C156.089 754.508 148.589 762.038 139.249 767.968C138.469 768.461 138.542 768.711 139.469 768.718L156.889 768.828L252.749 768.818C260.109 768.858 267.559 768.855 275.099 768.808C276.206 768.801 277.269 768.665 278.289 768.398C278.709 768.285 278.732 768.118 278.359 767.898C268.546 762.031 260.359 754.481 253.799 745.248C253.572 744.935 253.266 744.781 252.879 744.788ZM86.8189 800.748L255.819 800.808L353.109 800.688C353.226 800.687 353.341 800.651 353.437 800.584C353.534 800.517 353.608 800.422 353.649 800.312C353.69 800.202 353.697 800.082 353.669 799.968C352.002 793.395 347.412 788.538 339.899 785.398L239.059 785.248C221.492 784.995 203.922 784.911 186.349 784.998C151.302 785.178 116.719 785.111 82.5989 784.798C73.5889 784.718 65.6689 791.198 63.5189 799.828C63.4885 799.952 63.4965 800.082 63.5417 800.201C63.5869 800.32 63.6672 800.423 63.7721 800.496C63.8769 800.568 64.0014 800.608 64.1289 800.608Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape1&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6223046875 4.3066710451255)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.17 93.3591L341.7 94.8091C341.347 94.9025 341.043 95.0758 340.79 95.3291C334.81 101.209 327.56 101.079 319.06 100.739C316.15 100.619 313.98 99.6891 312.72 96.9491C310.21 91.4791 305.03 84.9891 298.07 88.5091C296.217 89.4491 294.677 90.6225 293.45 92.0291C288.01 98.2791 282.29 103.559 274.1 105.299C270.267 106.112 266.1 106.416 261.6 106.209C253.04 105.819 244.67 101.199 239.15 94.8491C232.37 87.0391 226.88 84.2491 219.24 92.9691C214.89 97.9391 209.89 101.049 202.97 101.219C196.37 101.379 189.917 101.426 183.61 101.359C182.93 101.352 182.43 100.989 182.11 100.269C182.01 100.04 181.975 99.7876 182.008 99.5391C182.042 99.2906 182.143 99.0554 182.3 98.8591C183.04 97.9325 183.813 97.0725 184.62 96.2791C187.09 93.8491 185.64 89.9291 183.51 87.8291C180.65 85.0091 175.91 85.9891 173.39 88.9391C172.23 90.2925 171.17 91.6391 170.21 92.9791C163.5 102.299 152.67 101.929 142.47 100.679C134.9 99.7591 131.64 94.3891 126.62 89.6591C123.633 86.8525 120.593 86.8391 117.5 89.6191C112.63 93.9791 108.24 99.7591 102.47 102.719C88.07 110.129 72.61 106.679 62.57 94.0391C58.62 89.0591 52.95 85.2191 47.21 90.7591C44.54 93.3491 43.94 96.9991 40.53 99.0891C36.59 101.509 29.55 101.139 24.26 101.029C18.64 100.899 13.25 100.999 9.85 97.1991C7.82 94.9191 4 93.8291 2.11 96.9691C1.02333 98.7691 0.446667 98.6225 0.38 96.5291C0.366667 95.9891 0.24 95.0925 0 93.8391C0.253333 85.8991 3.11667 79.1925 8.59 73.7191C15.9033 66.4058 24.84 63.4458 35.4 64.8391C36.2533 64.9458 36.6367 65.4325 36.55 66.2991C36.0033 71.8391 38.0767 75.8691 42.77 78.3891C46.73 80.5191 51.92 79.4891 55.07 76.3591C59.07 72.3691 59.28 66.6491 62.67 62.1391C69.49 53.0591 78.3867 48.2825 89.36 47.8091C91.4067 47.7225 93.5333 48.0125 95.74 48.6791C96.0733 48.7791 96.3467 48.9658 96.56 49.2391C97.92 50.9291 98.81 52.9691 100.32 54.5791C104.433 58.9525 109.323 60.1158 114.99 58.0691C120.4 56.1291 122.62 50.7691 122.7 45.2291C122.76 40.7958 123.827 36.2291 125.9 31.5291C140.46 -1.44087 182.17 -10.4309 209.26 13.5491C218.34 21.5825 223.667 30.9991 225.24 41.7991C226.4 49.7891 234.22 53.9291 241.37 49.3691C244.58 47.3291 247.13 44.1191 250.47 42.6191C261.863 37.4791 272.687 37.3558 282.94 42.2491C291.293 46.2291 297.263 52.4958 300.85 61.0491C303.07 66.3591 306.13 69.9691 312.5 70.1891C316.767 70.3358 320.273 68.8458 323.02 65.7191C323.166 65.5546 323.357 65.4352 323.571 65.3751C323.785 65.3149 324.014 65.3163 324.23 65.3791C336.65 69.1091 347.03 79.8291 347.17 93.3591Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape2&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.6211575655465 7.33540715628013)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M347.203 7.20842C347.509 15.0284 344.683 21.2384 338.723 25.8384C337.243 26.9851 335.446 27.5718 333.333 27.5984C326.179 27.6784 319.159 27.7518 312.273 27.8184C310.053 27.8384 308.413 26.8684 307.333 24.9584C307.159 24.651 307.07 24.3028 307.074 23.9484C307.077 23.594 307.173 23.2458 307.353 22.9384C309.706 18.9451 308.913 15.9118 304.973 13.8384C302.553 12.5718 300.179 13.0884 297.853 15.3884C293.353 19.8484 286.493 27.5784 279.663 27.5984C270.883 27.6184 261.953 27.6151 252.873 27.5884C246.053 27.5784 239.713 22.4684 235.033 17.5684C231.633 13.9984 228.093 11.2484 222.953 14.3584C219.153 16.6584 218.973 22.2484 221.903 25.1784C222.045 25.3214 222.137 25.5067 222.166 25.706C222.195 25.9053 222.159 26.108 222.062 26.2834C221.966 26.4588 221.815 26.5975 221.633 26.6784C220.199 27.3318 218.603 27.6551 216.843 27.6484C189.723 27.5018 162.073 27.5784 133.893 27.8784C132.419 27.8984 131.099 27.4284 129.933 26.4684C129.567 26.1723 129.332 25.7446 129.278 25.2775C129.224 24.8105 129.355 24.3403 129.643 23.9684C130.393 22.9984 131.193 21.9984 131.193 20.7084C131.199 16.5284 129.253 14.0784 125.353 13.3584C123.123 12.9384 121.363 13.8184 119.863 15.3684C115.523 19.8484 108.003 27.5184 101.323 27.5684C91.976 27.6218 82.8393 27.6051 73.9126 27.5184C68.8426 27.4584 62.8326 22.0584 59.9726 18.4284C56.9226 14.5584 52.8126 11.2584 48.3326 15.6784C45.9126 18.0718 45.646 20.7284 47.5326 23.6484C47.746 23.9818 47.7793 24.3351 47.6326 24.7084C47.0826 26.0584 45.9526 27.6284 44.3126 27.6284C32.766 27.6484 22.5426 27.6451 13.6426 27.6184C10.6026 27.6051 8.0093 26.3851 5.86263 23.9584C1.66263 19.2118 -0.280704 13.7884 0.0326292 7.68842C0.272629 8.94175 0.399296 9.83842 0.412629 10.3784C0.479296 12.4718 1.05596 12.6184 2.14263 10.8184C4.03263 7.67842 7.85263 8.76842 9.88263 11.0484C13.2826 14.8484 18.6726 14.7484 24.2926 14.8784C29.5826 14.9884 36.6226 15.3584 40.5626 12.9384C43.9726 10.8484 44.5726 7.19842 47.2426 4.60842C52.9826 -0.931581 58.6526 2.90842 62.6026 7.88842C72.6426 20.5284 88.1026 23.9784 102.503 16.5684C108.273 13.6084 112.663 7.82842 117.533 3.46842C120.626 0.688419 123.666 0.701752 126.653 3.50842C131.673 8.23842 134.933 13.6084 142.503 14.5284C152.703 15.7784 163.533 16.1484 170.243 6.82842C171.203 5.48842 172.263 4.14175 173.423 2.78842C175.943 -0.161581 180.683 -1.14158 183.543 1.67842C185.673 3.77842 187.123 7.69842 184.653 10.1284C183.846 10.9218 183.073 11.7818 182.333 12.7084C182.175 12.9047 182.074 13.1399 182.041 13.3884C182.007 13.6369 182.043 13.8894 182.143 14.1184C182.463 14.8384 182.963 15.2018 183.643 15.2084C189.949 15.2751 196.403 15.2284 203.003 15.0684C209.923 14.8984 214.923 11.7884 219.273 6.81842C226.913 -1.90158 232.403 0.888419 239.183 8.69842C244.703 15.0484 253.073 19.6684 261.633 20.0584C266.133 20.2651 270.299 19.9618 274.133 19.1484C282.323 17.4084 288.043 12.1284 293.483 5.87842C294.709 4.47175 296.249 3.29842 298.103 2.35842C305.063 -1.16158 310.243 5.32842 312.753 10.7984C314.013 13.5384 316.183 14.4684 319.093 14.5884C327.593 14.9284 334.843 15.0584 340.823 9.17842C341.076 8.92509 341.379 8.75175 341.733 8.65842Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape3&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.7941352600339 9.3230859375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M17.6779 0C16.5513 11.84 15.9213 19.36 15.7879 22.56C15.3079 33.9733 14.6346 46.28 13.7679 59.48C13.6013 62.04 13.1046 63.7467 12.2779 64.6C8.55793 68.45 -0.30207 67.53 0.00793038 61.06C1.34793 33.3133 2.02793 12.9867 2.04793 0.08Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape4&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9413128810975 9.32414062500001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M201.657 0.05C201.63 7.10333 201.687 11.5967 201.827 13.53C203.28 33.53 204.617 53.6 205.837 73.74L186.487 73.78L193.557 73.61C193.714 73.6076 193.867 73.5609 193.998 73.4752C194.129 73.3896 194.234 73.2685 194.299 73.126C194.364 72.9835 194.388 72.8254 194.367 72.67C193.367 64.75 192.894 56.7733 192.947 48.74C196.9 43.82 196.69 38.93 192.317 34.07C191.537 32.47 191.137 31.2867 191.117 30.52C190.984 25.7933 191.01 21.2667 191.197 16.94C191.213 16.5684 191.128 16.1993 190.951 15.872C190.773 15.5446 190.51 15.2711 190.189 15.0807C189.868 14.8902 189.501 14.7897 189.127 14.79L153.317 14.9C152.777 12.9667 151.747 11.28 150.227 9.84C148.927 8.60667 147.257 7.7 145.217 7.12C138.364 5.17333 133.557 7.71667 130.797 14.75C116.39 14.8967 101.944 14.9467 87.4571 14.9C61.1271 14.81 34.7871 15.13 8.5371 15.06C6.00377 15.0533 4.15377 14.7633 2.9871 14.19C0.773767 13.11 -0.209566 11.2233 0.0371003 8.53C0.150434 7.29667 0.770434 4.45333 1.8971 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape5&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.5460546875 9.32519283839548)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M3.69 73.6301L0 0.0700704L9.97 7.03745e-05C10.1004 -0.00175254 10.2289 0.031869 10.3421 0.0974247C10.4553 0.16298 10.5492 0.258107 10.6139 0.372872C10.6786 0.487637 10.7118 0.617903 10.71 0.75007C10.55 11.1234 10.7367 21.0567 11.27 30.5501C12.07 44.8301 12.51 58.8001 13.82 72.9701C13.8293 73.0668 13.8114 73.1643 13.7681 73.2514C13.7249 73.3384 13.6581 73.4116 13.5754 73.4627C13.4926 73.5137 13.3972 73.5405 13.3 73.5401Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape6&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.3825550063776 9.3230859375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M13.7551 0.08C13.7351 12.9867 13.0551 33.3133 11.7151 61.06C11.4051 67.53 20.2651 68.45 23.9851 64.6C24.8118 63.7467 25.3084 62.04 25.4751 59.48C26.3418 46.28 27.0151 33.9733 27.4951 22.56C27.6284 19.36 28.2584 11.84 29.3851 0L46.2351 0.03C45.1084 4.48333 44.4884 7.32667 44.3751 8.56C44.1284 11.2533 45.1118 13.14 47.3251 14.22C48.4918 14.7933 50.3418 15.0833 52.8751 15.09C79.1251 15.16 105.465 14.84 131.795 14.93C146.282 14.9767 160.728 14.9267 175.135 14.78C174.568 20.8133 176.498 24.9267 180.925 27.12C183.338 28.3133 185.805 28.72 188.325 28.34C194.755 27.36 198.095 21.26 197.655 14.93L233.465 14.82C233.839 14.8197 234.206 14.9202 234.527 15.1107C234.848 15.3011 235.111 15.5746 235.289 15.902C235.466 16.2293 235.551 16.5984 235.535 16.97C235.348 21.2967 235.322 25.8233 235.455 30.55C235.475 31.3167 235.875 32.5 236.655 34.1C232.788 31.5133 229.168 30.99 225.795 32.53C211.935 38.83 224.195 59.55 237.285 48.77C237.232 56.8033 237.705 64.78 238.705 72.7C238.726 72.8554 238.702 73.0135 238.637 73.156C238.572 73.2985 238.467 73.4196 238.336 73.5052C238.205 73.5909 238.052 73.6376 237.895 73.64L230.825 73.81L0.605102 73.79C0.205102 73.79 0.00510204 73.59 0.00510204 73.19C-0.0282313 69.6433 0.101769 66.03 0.395102 62.35C2.00177 42.09 2.92177 21.6067 3.1551 0.9C3.16177 0.353333 3.43844 0.08 3.9851 0.08ZM127.005 36.5C127.005 34.413 126.456 32.3624 125.412 30.555C124.369 28.7476 122.867 27.2464 121.06 26.203C119.253 25.1595 117.202 24.61 115.115 24.61C111.963 24.61 108.937 25.8635 106.708 28.0925C104.479 30.3215 103.225 33.3478 103.225 36.5C103.225 39.6522 104.479 42.6785 106.708 44.9075C108.937 47.1365 111.963 48.39 115.115 48.39C117.202 48.39 119.253 47.8405 121.06 46.797C122.867 45.7536 124.369 44.2524 125.412 42.445C126.456 40.6376 127.005 38.587 127.005 36.5ZM75.9704 37.4184C76.0574 34.3019 74.8637 31.2741 72.6541 29.007C70.4445 26.7398 67.3954 25.4143 64.1835 25.3246C62.057 25.2652 59.9523 25.7501 58.0818 26.7303C56.2114 27.7105 54.6403 29.152 53.5271 30.9092C52.414 32.6664 51.7974 34.6782 51.7398 36.7416C51.6528 39.8581 52.8465 42.8859 55.0561 45.153C57.2657 47.4202 60.3148 48.7457 63.5267 48.8354C65.6532 48.8948 67.7579 48.4099 69.6284 47.4297C71.4988 46.4495 73.0699 45.008 74.1831 43.2508C75.2962 41.4936 75.9128 39.4818 75.9704 37.4184ZM183.874 50.7982C183.856 49.4819 183.468 48.1937 182.749 47.0635C182.03 45.9334 181.006 45.0007 179.779 44.3595C178.552 43.7184 177.166 43.3911 175.76 43.4107C173.637 43.4404 171.61 44.2595 170.128 45.6863C168.646 47.1131 167.828 49.0336 167.856 51.0218C167.874 52.3381 168.262 53.6263 168.981 54.7565C169.7 55.8866 170.725 56.8193 171.951 57.4605C173.178 58.1016 174.564 58.4289 175.97 58.4093C178.093 58.3796 180.121 57.5605 181.603 56.1337C183.084 54.7069 183.902 52.7864 183.874 50.7982Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape7&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.0305953125001 9.32554685349047)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.0064 0.0100006L9.3364 6.11826e-07C9.61064 -0.000292647 9.87453 0.104847 10.0721 0.293135C10.2697 0.481423 10.3861 0.738544 10.3964 1.01C11.3097 24.8167 12.6431 48.6333 14.3964 72.46C14.4564 73.2867 14.0697 73.7 13.2364 73.7L4.1864 73.7C2.9664 53.56 1.62973 33.49 0.1764 13.49C0.0364 11.5567 -0.0202667 7.06333 0.0064 0.0100006Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape8&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1631696428572 9.32765624999999)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M10.891 0L14.581 73.56L5.85095 73.67C5.70139 73.6731 5.55452 73.6294 5.43088 73.5452C5.30724 73.461 5.21287 73.3403 5.16095 73.2C4.86095 72.3733 4.66095 71.5033 4.56095 70.59C2.05429 47.6433 0.534286 24.6667 0.000952381 1.66C-0.0257143 0.566667 0.507619 0.02 1.60095 0.02Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape9&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.5362571970961 9.55219950584632)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.6165 8.41299C23.0565 14.743 19.7165 20.843 13.2865 21.823C10.7665 22.203 8.2998 21.7963 5.88646 20.603C1.4598 18.4097 -0.470205 14.2963 0.0964619 8.26299C2.85646 1.22966 7.66313 -1.31367 14.5165 0.632992C16.5565 1.21299 18.2265 2.11966 19.5265 3.35299C21.0465 4.79299 22.0765 6.47966 22.6165 8.41299Z&quot;&gt;&lt;/path&gt; &lt;circle id=&quot;shape10&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.0115625 10.18828125)&quot; r=&quot;11.89&quot; cx=&quot;11.89&quot; cy=&quot;11.89&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape11&quot; transform=&quot;matrix(0.0351425431068875 0.000981620111375468 -0.000981620111375468 0.0351425431068875 14.2130771675543 10.2015061448131)&quot; rx=&quot;12.12&quot; ry=&quot;11.76&quot; cx=&quot;12.12&quot; cy=&quot;11.76&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape12&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 20.1057469902912 10.4364122450525)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M16.9732 2.43205C21.3465 7.29205 21.5565 12.1821 17.6032 17.1021C4.5132 27.8821 -7.7468 7.16205 6.1132 0.862052C9.48653 -0.677948 13.1065 -0.154615 16.9732 2.43205Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape13&quot; transform=&quot;matrix(0.0351528231097021 -0.000490857902548076 0.000490857902548076 0.0351528231097021 18.2800569526222 10.8531762234766)&quot; rx=&quot;8.01&quot; ry=&quot;7.5&quot; cx=&quot;8.01&quot; cy=&quot;7.5&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape14&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.47390625 12.828515625)&quot; fill=&quot;rgb(3,4,3)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0 300.33C1.52 298.69 3.53 298.057 6.03 298.43C6.10297 298.443 6.17377 298.447 6.24 298.44C6.65333 298.413 6.88667 298.26 6.94 297.98C7 297.66 7.19333 297.493 7.52 297.48L10.29 297.39C10.4233 297.383 10.5567 297.367 10.69 297.34C11.0167 297.267 11.1733 297.127 11.16 296.92C11.1467 296.7 11.2467 296.563 11.46 296.51C12.1467 296.337 12.7433 295.997 13.25 295.49C13.49 295.257 13.58 294.973 13.52 294.64C13.1333 292.653 12.8767 290.647 12.75 288.62C12.69 287.79 12.27 287.35 11.7 286.83C11.4533 286.603 11.3933 286.337 11.52 286.03C11.8533 285.197 11.6767 284.573 10.99 284.16C10.7367 284 10.46 283.923 10.16 283.93L6.56 284.02C15.1 281.92 21.0833 280.04 24.51 278.38C27.5033 276.927 30.4033 275.357 33.21 273.67C33.319 273.603 33.3974 273.495 33.4282 273.371C33.4589 273.246 33.4397 273.115 33.3746 273.004C33.3096 272.894 33.2037 272.813 33.08 272.78C32.5067 272.62 31.9433 272.67 31.39 272.93C63.5767 260.003 88.4967 238.95 106.15 209.77C109.223 204.703 112.093 199 114.76 192.66C118.06 184.807 120.343 178.587 121.61 174C123.097 168.613 124.457 162.397 125.69 155.35C126.657 149.857 126.873 144.25 126.34 138.53C127.853 138.57 128.907 138.097 129.5 137.11C131.56 133.67 131.433 130.473 129.12 127.52C128.24 126.39 127.07 126.39 125.77 126.38C120.017 126.347 114.427 126.37 109 126.45C108.613 125.77 108.27 125.09 107.97 124.41C107.69 123.77 107.527 123.037 107.48 122.21C106.953 112.977 106.213 103.723 105.26 94.45C110.127 94.5633 114.617 94.5833 118.73 94.51C121.27 94.47 123.93 94.86 126 93.31C128.053 91.77 128.717 89.61 127.99 86.83C127.23 83.89 124.98 82.2967 121.24 82.05L120.9 72.32C124.973 70.3667 126.23 67.5767 124.67 63.95C123.697 61.6833 121.82 60.52 119.04 60.46C117.273 58.24 116.223 56.5633 115.89 55.43C113.43 47.1033 110.547 38.9133 107.24 30.86C106.947 30.1467 107 29.0333 107.4 27.52C109.087 27.4933 110.883 27.5267 112.79 27.62C115.45 27.7533 117.403 26.9667 118.65 25.26C121.02 22.01 120.02 17.98 116.55 16.23C115.597 15.75 114.193 15.5133 112.34 15.52C107.533 15.54 102.823 15.4767 98.21 15.33C97.6033 13.9433 96.9433 12.6033 96.23 11.31C94.38 7.96 93.99 4.82 92.56 1.46C92.4467 1.18667 92.5067 0.963333 92.74 0.79L93.19 0.46C93.4567 0.273333 93.4267 0.176667 93.1 0.17L55.31 0L131.2 0.2C131.371 0.200762 131.536 0.26037 131.671 0.369176C131.805 0.477981 131.9 0.629779 131.94 0.8C133.38 7.23333 134.593 14.0833 135.58 21.35C139.67 51.61 143.36 78.87 145.72 107.57C147.27 126.44 146.89 145.44 143.29 163.8C138.28 189.4 127.86 214.54 111.86 234.74C90.34 261.87 61.85 283.26 28.89 293.96C20.1567 296.793 10.5267 298.917 0 300.33Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape15&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.2758764491296 12.828515625)&quot; fill=&quot;rgb(3,4,3)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M231.61 0L269.4 0.17C269.726 0.176667 269.756 0.273333 269.49 0.46L269.04 0.79C268.806 0.963333 268.746 1.18667 268.86 1.46C270.29 4.82 270.68 7.96 272.53 11.31C273.243 12.6033 273.903 13.9433 274.51 15.33C268.76 17.07 269.07 27.78 275.82 27.53C278.38 27.43 281.006 27.4267 283.7 27.52C283.3 29.0333 283.246 30.1467 283.54 30.86C286.846 38.9133 289.73 47.1033 292.19 55.43C292.523 56.5633 293.573 58.24 295.34 60.46C290.98 60.76 286.806 61.0267 282.82 61.26C277.7 61.56 274.45 67.2 278.08 71.26C278.86 72.1333 280.413 72.6 282.74 72.66C287.386 72.7733 292.206 72.66 297.2 72.32L297.54 82.05C293.013 81.9567 288.443 81.9633 283.83 82.07C281.84 82.11 280.61 82.75 279.5 84.26C276.44 88.44 277.126 91.8367 281.56 94.45C282.513 103.723 283.253 112.977 283.78 122.21C283.826 123.037 283.99 123.77 284.27 124.41C284.57 125.09 284.913 125.77 285.3 126.45C282.193 127.497 280.633 129.463 280.62 132.35C280.613 134.79 281.763 136.753 284.07 138.24C281.93 156.593 277.493 173.123 270.76 187.83C261.606 207.817 247.22 225.063 227.6 239.57C218.546 246.263 208.406 252.023 197.18 256.85C191.52 259.28 187.21 264.45 191.61 270.42C195.03 275.03 202.58 274.56 207.69 272.93C208.243 272.67 208.806 272.62 209.38 272.78C209.503 272.813 209.609 272.894 209.674 273.004C209.739 273.115 209.758 273.246 209.728 273.371C209.697 273.495 209.619 273.603 209.51 273.67C206.703 275.357 203.803 276.927 200.81 278.38C197.383 280.04 191.4 281.92 182.86 284.02C165.386 287.427 148.786 288.113 133.06 286.08C116.433 283.94 99.2895 279.17 81.6295 271.77C75.1162 269.043 68.6828 266.14 62.3295 263.06C54.3762 259.2 46.8962 254.463 39.8895 248.85C40.5695 248.377 41.3595 247.947 42.2595 247.56C44.5695 246.55 46.3695 244.3 44.1695 241.99C29.1962 226.303 18.1928 209.247 11.1595 190.82C1.95285 166.687 -1.55715 141.62 0.629514 115.62C2.01618 99.0867 3.45618 82.5733 4.94951 66.08C5.49618 59.9533 6.20618 53.32 7.07951 46.18C8.95285 30.8733 10.7762 15.5733 12.5495 0.28ZM230.747 11.7302C228.758 9.7412 226.058 8.62261 223.245 8.62261C220.432 8.62261 217.731 9.7412 215.742 11.7302L213.89 13.5829C211.901 15.5719 210.782 18.2724 210.782 21.0853C210.782 23.8982 211.901 26.5987 213.89 28.5877L215.092 29.7898C217.081 31.7788 219.781 32.8974 222.594 32.8974C225.407 32.8974 228.108 31.7788 230.097 29.7898L231.949 27.9371C233.938 25.9481 235.057 23.2476 235.057 20.4347C235.057 17.6218 233.938 14.9213 231.949 12.9323ZM47.1595 186.78C39.7128 170.84 35.7195 154.833 35.1795 138.76C34.9528 131.94 35.0895 124.72 35.5895 117.1C37.1495 93.44 39.2662 67.4833 41.9395 39.23C42.3395 35.0167 42.6262 30.7267 42.7995 26.36C43.4195 10.9 25.2095 12.45 24.4195 25.69C23.0462 48.79 21.1195 72.2233 18.6395 95.99C17.6595 105.337 16.9995 114.63 16.6595 123.87C16.3328 132.65 16.6595 140.653 17.6395 147.88C19.5062 161.707 22.9728 175.147 28.0395 188.2C29.1795 191.153 30.6662 194.07 32.4995 196.95C35.2995 201.37 41.5395 202.72 45.3395 198.89C48.7328 195.483 49.3395 191.447 47.1595 186.78ZM87.1943 37.8021C86.8236 36.4743 85.902 35.3574 84.6342 34.6994C83.3663 34.0413 81.8534 33.8945 80.4311 34.2916C79.0088 34.6887 77.7908 35.598 77.0472 36.8177C76.3037 38.0374 76.094 39.4701 76.4647 40.7979C76.8355 42.1257 77.757 43.2426 79.0249 43.9006C80.2927 44.5587 81.8056 44.7055 83.2279 44.3084C84.6502 43.9113 85.8682 43.002 86.6118 41.7823C87.3554 40.5626 87.565 39.1299 87.1943 37.8021ZM242.9 63.3691C242.905 60.5116 242.14 57.7024 240.682 55.2252C239.224 52.7479 237.124 50.6888 234.594 49.2556C232.064 47.8225 229.192 47.0651 226.268 47.06C223.344 47.0549 220.469 47.8022 217.934 49.2266C215.399 50.6509 213.292 52.7027 211.826 55.1748C210.359 57.6469 209.585 60.4534 209.58 63.3109C209.575 66.1684 210.34 68.9776 211.797 71.4548C213.255 73.9321 215.355 75.9912 217.885 77.4244C220.415 78.8575 223.287 79.6149 226.211 79.62C229.135 79.6251 232.01 78.8778 234.545 77.4534C237.08 76.0291 239.187 73.9773 240.653 71.5052C242.12 69.0331 242.895 66.2266 242.9 63.3691ZM85.9041 71.8823C88.1531 72.912 90.7367 72.9736 93.0816 72.0534C95.4266 71.1333 97.3455 69.3049 98.4127 66.9739C99.1193 65.4306 99.4215 63.7348 99.2889 62.0574C99.1563 60.38 98.5935 58.7796 97.6572 57.4176C96.721 56.0556 95.4439 54.9794 93.9549 54.2977C91.7059 53.268 89.1223 53.2064 86.7774 54.1266C84.4325 55.0467 82.5135 56.8751 81.4463 59.2061C80.7398 60.7494 80.4375 62.4452 80.5701 64.1226C80.7028 65.8 81.2656 67.4004 82.2018 68.7624C83.1381 70.1244 84.4151 71.2006 85.9041 71.8823ZM60.6086 105.171C63.2448 106.638 66.3725 106.974 69.2978 106.105C72.223 105.236 74.7122 103.231 76.213 100.535C77.7138 97.8381 78.1063 94.6659 77.3035 91.7217C76.5007 88.7775 74.5666 86.2966 71.9304 84.8293C69.2942 83.362 66.1665 83.0257 63.2413 83.8948C60.316 84.7639 57.8268 86.7691 56.326 89.4655C54.8252 92.1619 54.4327 95.3341 55.2355 98.2783C56.0384 101.222 57.9724 103.703 60.6086 105.171ZM187.08 98.11C187.08 96.1959 186.318 94.3582 184.965 93.0047C183.611 91.6512 181.774 90.89 179.86 90.89C177.945 90.89 176.108 91.6512 174.754 93.0047C173.401 94.3582 172.64 96.1959 172.64 98.11C172.64 100.024 173.401 101.862 174.754 103.215C176.108 104.569 177.945 105.33 179.86 105.33C181.127 105.33 182.372 104.996 183.47 104.363C184.567 103.729 185.479 102.817 186.112 101.72C186.746 100.623 187.08 99.3773 187.08 98.11ZM234.564 99.0027C233.705 97.863 232.551 96.9774 231.217 96.4351C229.883 95.8929 228.416 95.7129 226.964 95.9133C225.513 96.1138 224.127 96.6877 222.947 97.5771C221.766 98.4665 220.833 99.6405 220.24 100.981C219.647 102.321 219.416 103.78 219.57 105.212C219.723 106.644 220.256 107.998 221.115 109.137C221.974 110.277 223.128 111.163 224.462 111.705C225.796 112.247 227.263 112.427 228.715 112.227C230.166 112.026 231.552 111.452 232.732 110.563C233.913 109.673 234.846 108.499 235.439 107.159C236.032 105.819 236.263 104.36 236.109 102.928C235.956 101.496 235.423 100.142 234.564 99.0027ZM47.9695 214.56C45.1695 220.83 50.0195 225.32 54.0495 229.45C57.6895 233.19 61.8995 236.09 66.6995 232.86C71.8895 229.38 72.0595 223.24 67.9795 218.66C64.2095 214.41 60.6395 209.6 54.3295 209.99C51.4095 210.17 49.1195 211.99 47.9695 214.56Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape16&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 11.8026079545455 12.838359375)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M26.0114 0C24.238 15.2933 22.4147 30.5933 20.5414 45.9C19.668 53.04 18.958 59.6733 18.4114 65.8C16.918 82.2933 15.478 98.8067 14.0914 115.34C11.9047 141.34 15.4147 166.407 24.6214 190.54C31.6547 208.967 42.658 226.023 57.6314 241.71C59.8314 244.02 58.0314 246.27 55.7214 247.28C54.8214 247.667 54.0314 248.097 53.3514 248.57C51.9014 250.07 52.3314 253.14 52.3514 255.14C31.6214 235.93 17.0114 211.99 8.66137 185.13C2.48804 165.29 -0.385293 145.337 0.0413737 125.27C0.691374 94.91 5.82137 63.64 9.38137 32.5C9.99471 27.1467 10.7014 21.75 11.5014 16.31C12.3214 10.7767 13.5247 5.69667 15.1114 1.07C15.2107 0.778294 15.3987 0.524438 15.6494 0.343583C15.9001 0.162728 16.2013 0.0636261 16.5114 0.06Z&quot;&gt;&lt;/path&gt; &lt;rect id=&quot;shape17&quot; transform=&quot;matrix(0.0248592227760896 -0.0248592227760896 0.0248592227760896 0.0248592227760896 19.531681996495 13.569794617477)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; width=&quot;23.84&quot; height=&quot;22.92&quot; rx=&quot;10.61&quot; ry=&quot;10.61&quot;&gt;&lt;/rect&gt; &lt;path id=&quot;shape18&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.857255859375 13.3649990428515)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M30.6225 171.52C32.8025 176.187 32.1958 180.223 28.8025 183.63C25.0025 187.46 18.7625 186.11 15.9625 181.69C14.1292 178.81 12.6425 175.893 11.5025 172.94C6.43583 159.887 2.96917 146.447 1.1025 132.62C0.1225 125.393 -0.204167 117.39 0.1225 108.61C0.4625 99.37 1.1225 90.0767 2.1025 80.73C4.5825 56.9634 6.50917 33.53 7.8825 10.43C8.6725 -2.80997 26.8825 -4.35997 26.2625 11.1C26.0892 15.4667 25.8025 19.7567 25.4025 23.97C22.7292 52.2234 20.6125 78.18 19.0525 101.84C18.5525 109.46 18.4158 116.68 18.6425 123.5C19.1825 139.573 23.1758 155.58 30.6225 171.52Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape19&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.7841415488515 13.3674609375)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.0522 0C8.66553 0.146667 13.3755 0.21 18.1822 0.19C20.0355 0.183333 21.4389 0.42 22.3922 0.9C25.8622 2.65 26.8622 6.68 24.4922 9.93C23.2455 11.6367 21.2922 12.4233 18.6322 12.29C16.7255 12.1967 14.9289 12.1633 13.2422 12.19C10.5489 12.0967 7.9222 12.1 5.3622 12.2C-1.3878 12.45 -1.6978 1.74 4.0522 0Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape20&quot; transform=&quot;matrix(0.0338611839889802 -0.00945421244350544 0.00945421244350544 0.0338611839889802 14.9149266129752 14.0867380565676)&quot; rx=&quot;5.57&quot; ry=&quot;5.2&quot; cx=&quot;5.57&quot; cy=&quot;5.2&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape21&quot; transform=&quot;matrix(0.0351561964539828 6.13592003636124e-05 -6.13592003636124e-05 0.0351561964539828 19.6449060698586 14.4819473774511)&quot; rx=&quot;16.66&quot; ry=&quot;16.28&quot; cx=&quot;16.66&quot; cy=&quot;16.28&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;ellipse id=&quot;shape22&quot; transform=&quot;matrix(-0.0146348716029047 0.031965331958686 -0.031965331958686 -0.0146348716029047 15.8772166930746 14.8739620295146)&quot; rx=&quot;9.67&quot; ry=&quot;9.33&quot; cx=&quot;9.67&quot; cy=&quot;9.33&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape23&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 21.997793706651 14.9540625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M18.805 0C21.585 0.06 23.4616 1.22333 24.435 3.49C25.995 7.11667 24.7383 9.90667 20.665 11.86C15.6716 12.2 10.8516 12.3133 6.20498 12.2C3.87831 12.14 2.32498 11.6733 1.54498 10.8C-2.08502 6.74 1.16498 1.1 6.28498 0.8C10.2716 0.566667 14.445 0.3 18.805 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape24&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.0361349190606 15.7107890625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M19.9144 0.0653333C23.6544 0.312 25.9044 1.90533 26.6644 4.84533C27.3911 7.62533 26.7277 9.78533 24.6744 11.3253C22.6044 12.8753 19.9444 12.4853 17.4044 12.5253C13.2911 12.5987 8.80105 12.5787 3.93438 12.4653C-0.498949 9.852 -1.18562 6.45533 1.87438 2.27533C2.98438 0.765333 4.21438 0.125333 6.20438 0.0853333C10.8177 -0.0213333 15.3877 -0.028 19.9144 0.0653333Z&quot;&gt;&lt;/path&gt; &lt;ellipse id=&quot;shape25&quot; transform=&quot;matrix(-0.0170977282180133 0.0307185547160906 -0.0307185547160906 -0.0170977282180133 15.1542587716268 16.0053675452257)&quot; rx=&quot;11.64&quot; ry=&quot;11.38&quot; cx=&quot;11.64&quot; cy=&quot;11.38&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;circle id=&quot;shape26&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.345234375 16.0238671875)&quot; r=&quot;7.22&quot; cx=&quot;7.22&quot; cy=&quot;7.22&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/circle&gt; &lt;ellipse id=&quot;shape27&quot; transform=&quot;matrix(0.0280770296501001 -0.0211575594076892 0.0211575594076892 0.0280770296501001 19.8774398273616 16.4371069616574)&quot; rx=&quot;8.42&quot; ry=&quot;8.13&quot; cx=&quot;8.42&quot; cy=&quot;8.13&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot;&gt;&lt;/ellipse&gt; &lt;path id=&quot;shape28&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 22.1414052368516 17.2710454963236)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M22.02 12.1647L3.45003 11.8747C1.14336 10.388 -0.00663785 8.42471 2.88184e-05 5.98471C0.0133622 3.09804 1.57336 1.13137 4.68003 0.0847059C10.1067 0.00470588 15.6967 -0.0186275 21.45 0.0147059C22.75 0.0247059 23.92 0.0247059 24.8 1.15471C27.1134 4.10804 27.24 7.30471 25.18 10.7447C24.5867 11.7314 23.5334 12.2047 22.02 12.1647Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape29&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.9485123620206 17.688515625)&quot; fill=&quot;rgb(3,4,3)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M94.2701 0L112.84 0.29C113.373 6.01 113.157 11.6167 112.19 17.11C110.957 24.1567 109.597 30.3733 108.11 35.76C106.843 40.3467 104.56 46.5667 101.26 54.42C98.5934 60.76 95.7234 66.4633 92.6501 71.53C74.9968 100.71 50.0768 121.763 17.8901 134.69C12.7801 136.32 5.23009 136.79 1.81009 132.18C-2.58991 126.21 1.72009 121.04 7.38009 118.61C18.6068 113.783 28.7468 108.023 37.8001 101.33C57.4201 86.8233 71.8068 69.5767 80.9601 49.59C87.6934 34.8833 92.1301 18.3533 94.2701 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape30&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.9331058615201 20.210194296345)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.830544 4.59225C1.98054 2.02225 4.27054 0.202251 7.19054 0.0222511C13.5005 -0.367749 17.0705 4.44225 20.8405 8.69225C24.9205 13.2723 24.7505 19.4123 19.5605 22.8923C14.7605 26.1223 10.5505 23.2223 6.91054 19.4823C2.88054 15.3523 -1.96946 10.8623 0.830544 4.59225Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape31&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.6404577789765 21.5771484375)&quot; fill=&quot;rgb(3,4,3)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.07476 0C8.08142 5.61333 15.5614 10.35 23.5148 14.21C29.8681 17.29 36.3014 20.1933 42.8148 22.92C60.4748 30.32 77.6181 35.09 94.2448 37.23C109.971 39.2633 126.571 38.5767 144.045 35.17L147.645 35.08C147.945 35.0733 148.221 35.15 148.475 35.31C149.161 35.7233 149.338 36.3467 149.005 37.18C148.878 37.4867 148.938 37.7533 149.185 37.98C149.755 38.5 150.175 38.94 150.235 39.77C150.361 41.7967 150.618 43.8033 151.005 45.79C151.065 46.1233 150.975 46.4067 150.735 46.64C150.228 47.1467 149.631 47.4867 148.945 47.66C148.731 47.7133 148.631 47.85 148.645 48.07C148.658 48.2767 148.501 48.4167 148.175 48.49C148.041 48.5167 147.908 48.5333 147.775 48.54L145.005 48.63C144.678 48.6433 144.485 48.81 144.425 49.13C144.371 49.41 144.138 49.5633 143.725 49.59C143.659 49.5967 143.588 49.5933 143.515 49.58C141.015 49.2067 139.005 49.84 137.485 51.48C124.278 53.2267 112.368 53.5833 101.755 52.55C80.2748 50.4633 60.3014 44.84 41.8348 35.68C35.8281 32.7 28.6481 28.54 20.2948 23.2C14.0414 19.2067 7.30142 13.6633 0.0747565 6.57C0.0547565 4.57 -0.375243 1.5 1.07476 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape32&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.548046875 24.3846604970638)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M37.39 126.792L36.84 125.732C36.6867 125.445 36.61 125.139 36.61 124.812L36.29 50.1519C39.97 50.1319 42.74 50.0419 44.93 47.3519C46.0567 45.9652 46.4067 44.4152 45.98 42.7019C44.81 38.0219 40.08 37.5119 35.72 37.6019L35.91 26.2919C40.16 26.9019 44.77 27.8519 48.81 25.9619C52.26 24.3519 53.31 20.2319 50.85 17.2519C48.51 14.4319 45.36 14.2119 41.99 14.2719C35.7567 14.3852 29.3167 14.4052 22.67 14.3319C19.49 14.3019 16.81 15.9619 15.14 18.6319C15.2 16.6619 12.86 15.6819 11.44 14.7519C10.6133 14.2119 9.90667 13.5852 9.32 12.8719C6.57333 9.53188 3.78 6.23188 0.94 2.97188C0.46 2.41855 0.146667 1.62521 0 0.591879C17.1 3.24521 34.28 3.98188 51.54 2.80188C57.06 2.42188 62.3133 1.51855 67.3 0.0918792C68.18 -0.154787 68.3567 0.0952125 67.83 0.841879C58.7633 13.8352 53.49 29.3252 52.01 47.3119C50.37 67.3319 51 88.9819 56.8 107.652C58.81 114.142 62.13 120.072 65.01 126.212C65.0485 126.291 65.0589 126.382 65.0394 126.468C65.02 126.554 64.9718 126.631 64.9029 126.686C64.834 126.741 64.7483 126.772 64.66 126.772Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape33&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.486355851717 24.3923298330305)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M1.75477 0.373729C1.90143 1.40706 2.21477 2.2004 2.69477 2.75373C5.53477 6.01373 8.3281 9.31373 11.0748 12.6537C11.6614 13.3671 12.3681 13.9937 13.1948 14.5337C14.6148 15.4637 16.9548 16.4437 16.8948 18.4137L16.5848 19.0537C15.9714 19.3604 15.6748 19.8204 15.6948 20.4337C15.8148 23.3437 16.3448 26.1237 18.0248 28.6937C19.9714 31.6737 22.1714 34.5471 24.6248 37.3137C19.6548 39.6737 18.5548 46.9937 24.3448 49.3137C24.1981 53.2071 24.2048 57.1237 24.3648 61.0637C24.5581 65.7371 24.5748 69.6437 24.4148 72.7837C24.2014 77.0371 23.9914 81.3304 23.7848 85.6637C23.1248 99.8304 19.6748 113.244 13.4348 125.904C13.2814 126.21 13.0314 126.384 12.6848 126.424L11.5948 126.534L3.79477 126.534C3.66373 126.534 3.5364 126.49 3.43437 126.408C3.33234 126.325 3.26171 126.21 3.23447 126.082C3.20722 125.954 3.22499 125.82 3.28477 125.704C16.0848 100.784 18.1148 71.0737 14.6948 43.5737C12.8014 28.3737 7.92143 14.0371 0.0547669 0.563729C0.0152725 0.50031 -0.00361813 0.426609 0.000572506 0.352292C0.00476314 0.277975 0.0318434 0.20644 0.0782619 0.147067C0.12468 0.0876949 0.188315 0.0431997 0.26082 0.0194171C0.333326 -0.0043654 0.411387 -0.00634806 0.484767 0.0137292Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape34&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.0617214476865 24.8861307529877)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M21.2988 12.0278C16.7455 11.8878 12.1288 11.8545 7.44881 11.9278C4.74215 11.9678 2.94548 11.7312 2.05881 11.2178C0.238812 10.1645 -0.374521 8.0945 0.218812 5.00784L0.528812 4.36784C2.19881 1.69784 4.87881 0.0378364 8.05881 0.0678364C14.7055 0.14117 21.1455 0.12117 27.3788 0.00783636C30.7488 -0.0521636 33.8988 0.167836 36.2388 2.98784C38.6988 5.96784 37.6488 10.0878 34.1988 11.6978C30.1588 13.5878 25.5488 12.6378 21.2988 12.0278Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape35&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.038091694079 25.0621875000001)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M0.890947 0C0.297614 3.08667 0.910947 5.15667 2.73095 6.21C3.61761 6.72333 5.41428 6.96 8.12095 6.92C12.8009 6.84667 17.4176 6.88 21.9709 7.02L21.7809 18.33L8.93095 18.26C6.47761 15.4933 4.27761 12.62 2.33095 9.64C0.650947 7.07 0.120947 4.29 0.000947368 1.38C-0.0190526 0.766667 0.277614 0.306667 0.890947 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape36&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 17.2047130847683 25.704140625)&quot; fill=&quot;#0e2b33&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M4.19149 0L17.0415 0.07C21.4015 -0.02 26.1315 0.49 27.3015 5.17C27.7282 6.88333 27.3782 8.43333 26.2515 9.82C24.0615 12.51 21.2915 12.6 17.6115 12.62L3.91149 12C-1.87851 9.68 -0.778506 2.36 4.19149 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape37&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 16.893984375 26.126015625)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M12.75 0L26.45 0.62L26.77 75.28C26.77 75.6067 26.8467 75.9133 27 76.2L27.55 77.26L0 77.22L1.09 77.11C1.43667 77.07 1.68667 76.8967 1.84 76.59C8.08 63.93 11.53 50.5167 12.19 36.35C12.3967 32.0167 12.6067 27.7233 12.82 23.47C12.98 20.33 12.9633 16.4233 12.77 11.75C12.61 7.81 12.6033 3.89333 12.75 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape38&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 18.22640625 29.4324536132813)&quot; fill=&quot;#70949a&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M29.96 24.0302C30.7067 23.5835 30.1467 23.1702 28.28 22.7902C27.96 22.7235 27.6733 22.5835 27.42 22.3702C24.9333 20.2235 22.8967 18.7069 21.31 17.8202C12.91 13.1069 5.80667 7.21687 0 0.150208L30.09 0.000208333C30.4767 -0.00645833 30.7833 0.146875 31.01 0.460208C37.57 9.69354 45.7567 17.2435 55.57 23.1102C55.9433 23.3302 55.92 23.4969 55.5 23.6102C54.48 23.8769 53.4167 24.0135 52.31 24.0202C44.77 24.0669 37.32 24.0702 29.96 24.0302Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape39&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.2706541442871 29.4394921875)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M38.2747 0C35.2147 4.74667 31.2681 10.0433 26.4347 15.89C23.4547 19.49 20.7014 22.14 18.1747 23.84L0.754727 23.73C-0.17194 23.7233 -0.245273 23.4733 0.534727 22.98C9.87473 17.05 17.3747 9.52 24.9347 0.58C25.0571 0.432797 25.211 0.314351 25.3856 0.233119C25.5601 0.151886 25.7511 0.109846 25.9447 0.11Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape40&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 15.909609375 29.437734375)&quot; fill=&quot;#aec7cd&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M65.9 0C71.7067 7.06667 78.81 12.9567 87.21 17.67C88.7967 18.5567 90.8333 20.0733 93.32 22.22C93.5733 22.4333 93.86 22.5733 94.18 22.64C96.0467 23.02 96.6067 23.4333 95.86 23.88L0 23.89C2.52667 22.19 5.28 19.54 8.26 15.94C13.0933 10.0933 17.04 4.79667 20.1 0.05Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape41&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 12.6264334548969 30.8390367406574)&quot; fill=&quot;#fdfffe&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M175.558 0.450733C176.245 0.450733 176.568 0.567399 176.528 0.800733C176.494 1.0303 176.388 1.24303 176.226 1.40826C176.065 1.5735 175.855 1.68291 175.628 1.72073C171.935 2.3474 168.581 2.65073 165.568 2.63073C163.998 2.62073 162.798 3.35073 161.188 3.18073C160.808 3.14073 160.445 3.20407 160.098 3.37073L158.488 4.16073C158.195 4.30073 157.958 4.50407 157.778 4.77073C157.045 5.85073 156.111 6.47073 154.978 6.63073C153.258 6.87073 151.491 6.99073 149.678 6.99073C111.858 6.8974 73.5681 6.84073 34.8081 6.82073C28.6781 6.82073 24.4281 9.63073 23.3181 15.9507L0.628115 15.8107C0.50059 15.8104 0.376138 15.7713 0.2713 15.6987C0.166463 15.626 0.0861025 15.5233 0.0409006 15.404C-0.00430136 15.2848 -0.0122487 15.1546 0.0181151 15.0307C2.16812 6.40073 10.0881 -0.0792673 19.0981 0.00073271C53.2181 0.314066 87.8014 0.380733 122.848 0.200733C140.421 0.114066 157.991 0.197399 175.558 0.450733Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape42&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 13.4462109375 30.8548828125)&quot; fill=&quot;rgb(3,4,3)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M152.24 0L253.08 0.15C253.047 2.17 252.56 3.72667 251.62 4.82C250.867 5.69333 249.93 6.13667 248.81 6.15C221.383 6.39 194.363 6.58667 167.75 6.74C167.283 6.74 167.03 6.97333 166.99 7.44C166.87 8.95333 167.113 10.3433 167.72 11.61C167.847 11.8833 167.89 12.1667 167.85 12.46L167.63 14.18C167.577 14.5867 167.74 14.86 168.12 15C168.573 15.1667 168.867 15.3533 169 15.56L0 15.5C1.11 9.18 5.36 6.37 11.49 6.37C50.25 6.39 88.54 6.44667 126.36 6.54C128.173 6.54 129.94 6.42 131.66 6.18C132.793 6.02 133.727 5.4 134.46 4.32C134.64 4.05333 134.877 3.85 135.17 3.71L136.78 2.92C137.127 2.75333 137.49 2.69 137.87 2.73C139.48 2.9 140.68 2.17 142.25 2.18C145.263 2.2 148.617 1.89667 152.31 1.27C152.537 1.23218 152.746 1.12277 152.908 0.957532C153.07 0.792295 153.175 0.579568 153.21 0.35C153.25 0.116667 152.927 -1.13687e-13 152.24 0Z&quot;&gt;&lt;/path&gt; &lt;path id=&quot;shape43&quot; transform=&quot;matrix(0.03515625 0 0 0.03515625 19.3159081135321 30.86015625)&quot; fill=&quot;rgb(3,4,3)&quot; stroke-opacity=&quot;0&quot; stroke=&quot;#000000&quot; stroke-width=&quot;0&quot; stroke-linecap=&quot;square&quot; stroke-linejoin=&quot;bevel&quot; d=&quot;M86.1197 0C93.6331 3.14 98.2231 7.99667 99.8897 14.57C99.9181 14.684 99.9111 14.804 99.8698 14.914C99.8285 15.024 99.7547 15.1189 99.6583 15.186C99.5618 15.2532 99.4472 15.2894 99.3297 15.29L2.03972 15.41C1.90639 15.2033 1.61306 15.0167 1.15972 14.85C0.779725 14.71 0.616391 14.4367 0.669725 14.03L0.889725 12.31C0.929725 12.0167 0.886391 11.7333 0.759725 11.46C0.153058 10.1933 -0.0902752 8.80333 0.0297248 7.29C0.0697248 6.82333 0.323058 6.59 0.789725 6.59C27.4031 6.43667 54.4231 6.24 81.8497 6C82.9697 5.98667 83.9064 5.54333 84.6597 4.67C85.5997 3.57667 86.0864 2.02 86.1197 0Z&quot;&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt;&lt;/ul&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I’m really happy with the results so far.
There is still some work to be done for the recipe page.
It lacks some details around mash temperatures, total boil time, and sparge water volume among other things.
I do believe that this is a good start though and I’m looking forward to adding more recipes to my site.
You can find all the recipes at &lt;a href=&quot;https://snorre.io/beers&quot;&gt;/beers&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Bluesky feed generators giving users algorithmic choice</title><link>https://snorre.io/blog/2023-10-01-bluesky-feed-generators-giving-users-algorithmic-choice/</link><guid isPermaLink="true">https://snorre.io/blog/2023-10-01-bluesky-feed-generators-giving-users-algorithmic-choice/</guid><description>Building a Bluesky feed generator: the Norsky server that provides Norwegian-language feeds through the AT Protocol.</description><pubDate>Sun, 01 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Earlier in august I &lt;a href=&quot;./2023-08-19-atproto-bluesky-comment-system&quot;&gt;wrote about creating a Bluesky based comment system&lt;/a&gt;.
This came about after I had joined the Bluesky community and was looking for a way to allow other Bluesky users to comment on my blog posts.
The comment system should also be so simple that it could be used by other bloggers who wanted to allow Bluesky users to comment on their posts.
Since then I’ve enjoyed using Bluesky and have been looking for other ways to contribute to the community.
One of the things I wanted to do was to build a feed generator that would allow users to browse Norwegian language posts.&lt;/p&gt;
&lt;h2 id=&quot;the-bluesky-feed-generator&quot;&gt;The Bluesky feed generator&lt;/h2&gt;
&lt;p&gt;So what is a feed generator?
One of Bluesky’s main objectives is to provide users algorithmic choice over how they browse the social network.
This stands in contrast to other social networks where the algorithm is chosen for you.
For example on Twitter (now X) you can’t choose to browse your network in chronological order.&lt;/p&gt;
&lt;p&gt;The feed generator is part of the federated nature of the Bluesky social network.
Instead of all algorithms being hosted by Bluesky, they can be hosted by anyone.
Simple put:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Feed Generators are services that provide custom algorithms to users through the AT Protocol.
Source: &lt;a href=&quot;https://github.com/bluesky-social/feed-generator&quot;&gt;feed-generator&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;feed-generator-specification-and-api&quot;&gt;Feed generator specification and API&lt;/h2&gt;
&lt;p&gt;So how do you go about creating a feed generator?
A feed generator is an HTTP server that implements a specific protocol using JSON as its data exchange format.
The server exposes three endpoints.&lt;/p&gt;
&lt;h3 id=&quot;well-knowndidjson&quot;&gt;&lt;code&gt;/.well-known/did.json&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;This endpoint is used to discover the feed generator.
It returns a JSON document that contains the feed generator’s DID (Decentralized Identifier).&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &amp;quot;@context&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;https://www.w3.org/ns/did/v1&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &amp;quot;id&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;did:web:norsky.snorre.io&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &amp;quot;service&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &amp;quot;id&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;#bsky_fg&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &amp;quot;serviceEndpoint&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;https://norsky.snorre.io&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &amp;quot;type&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;BskyFeedGenerator&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;id&lt;/code&gt; field is the feed generator’s DID.
Most feeds use the &lt;code&gt;web&lt;/code&gt; identifier which means that the DID points to a hostname.
The &lt;code&gt;service&lt;/code&gt; field contains the feed generator’s HTTP root endpoint.
&lt;code&gt;type&lt;/code&gt; specifies that this is a Bluesky feed generator.&lt;/p&gt;
&lt;h3 id=&quot;xrpcappbskyfeeddescribefeedgenerator&quot;&gt;&lt;code&gt;/xrpc/app.bsky.feed.describeFeedGenerator&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;This endpoint is used to describe the feed generator and available feeds.
Bluesky will use this endpoint to check which feeds are available after you have registered the feeds.
If one of the feeds you’ve registered is not listed here it will not be available to users.
Each feed is identified by a URI on the form:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;at://did:web:{hostname}/app.bsky.feed.generator/{feed-id}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;at://&lt;/code&gt; tells Bluesky that this is an AT Protocol URI.
&lt;code&gt;did:web:{hostname}&lt;/code&gt; is the feed generator’s DID.
&lt;code&gt;app.bsky.feed.generator&lt;/code&gt; is the lexicon id for the feed generator.
&lt;code&gt;{feed-id}&lt;/code&gt; is the feed’s id.&lt;/p&gt;
&lt;p&gt;A service would then typically return something like this:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &amp;quot;did&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;did:web:norsky.snorre.io&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &amp;quot;feeds&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &amp;quot;uri&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;at://did:web:norsky.snorre.io/app.bsky.feed.generator/bokmaal&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &amp;quot;uri&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;at://did:web:norsky.snorre.io/app.bsky.feed.generator/nynorsk&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &amp;quot;uri&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;at://did:web:norsky.snorre.io/app.bsky.feed.generator/sami&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &amp;quot;uri&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;at://did:web:norsky.snorre.io/app.bsky.feed.generator/all&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;xrpcappbskyfeedgetfeedskeleton&quot;&gt;&lt;code&gt;/xrpc/app.bsky.feed.getFeedSkeleton&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;This endpoint is used to get a feed skeleton.
Feed generators do not return feeds containing the full post data.
Instead it returns a list of post ids that Bluesky apps can then flesh out.
This has many advantages including saving the feed generator bandwidth and making the PDSs (Personal Data Stores) the single source of truth for post data.&lt;/p&gt;
&lt;p&gt;The endpoint takes two parameters &lt;code&gt;feed&lt;/code&gt; and &lt;code&gt;cursor&lt;/code&gt;, cursor being optional.
It takes the form:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{serviceEndpoint}/xrpc/app.bsky.feed.getFeedSkeleton?feed={feed-uri}&amp;amp;cursor={cursor}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;An example request URL would look like this:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;https://norsky.snorre.io/xrpc/app.bsky.feed.getFeedSkeleton?feed=at://did:web:norsky.snorre.io/app.bsky.feed.generator/bokmaal&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This yields a JSON response containing a cursor (if there are more posts to load) and list of post ids:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &amp;quot;feed&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &amp;quot;post&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;at://did:plc:2ouk4ptm336l2lcce6qxs3ar/app.bsky.feed.post/3kaoxdbnvwv2y&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &amp;quot;post&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;at://did:plc:y5zzasijmapifytqvhxnwsrm/app.bsky.feed.post/3kaoxbtnw7n2x&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &amp;quot;post&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;at://did:plc:jqdbfqiyyne7jkxpqlfacray/app.bsky.feed.post/3kaoxal4n3n2m&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &amp;quot;post&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;at://did:plc:hlxobkvuv64wghyltgbgz6f3/app.bsky.feed.post/3kaoxafag2y2s&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &amp;quot;post&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;at://did:plc:b66g2f6utk25ppjzsujhhqgt/app.bsky.feed.post/3kaox5gojov2q&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &amp;quot;cursor&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;2482&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note that the cursor is an opaque string that is not meant to be parsed by clients.
It can contain any data and is only meant to be used by the feed generator to keep track of where it is in the feed.
In the above case the cursor relies on the feed generator having a database of post ids that work in a sequential manner.&lt;/p&gt;
&lt;p&gt;There are three primary ways to get posts for a feed generator:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Hardcode the post ids in the feed generator (not very interesting)&lt;/li&gt;
&lt;li&gt;Make a request to get posts from one or more users’ repositories&lt;/li&gt;
&lt;li&gt;Subscribe to the firehose, store the posts, and filter out posts that are not relevant to the feed&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Depending on the type of feed you are building all of these are valid options.&lt;/p&gt;
&lt;h2 id=&quot;implementing-the-norsky-feed-generator&quot;&gt;Implementing the Norsky feed generator&lt;/h2&gt;
&lt;p&gt;With the specification in hand I set out to implement the feed generator.
I had looked at some starter projects and found several.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bluesky-social/feed-generator&quot;&gt;TypeScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MarshalX/bluesky-feed-generator&quot;&gt;Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mackuba/bluesky-feeds-rb&quot;&gt;Ruby&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of these looked like good starting points, but I wanted something more lightweight.
I started looking into Rust Bluesky clients and found &lt;a href=&quot;https://github.com/sugyan/atrium&quot;&gt;Atrium&lt;/a&gt;.
After working a bit with Atrium I couldn’t really get a Firehose feed to work.
Not all of the library was published to crates.io either, and so the project did not seem quite ready for prime time.&lt;/p&gt;
&lt;p&gt;With Rust off the table I decided to look at the next best thing: Go.
The Bluesky team was already building an official, albeit experimental, Go client &lt;a href=&quot;https://github.com/bluesky-social/indigo&quot;&gt;Indigo&lt;/a&gt;.
Let’s go!&lt;/p&gt;
&lt;h3 id=&quot;first-steps-subscribing-to-the-firehose&quot;&gt;First steps, subscribing to the firehose&lt;/h3&gt;
&lt;p&gt;For my feed generator it seemed like the best option was to subscribe to the firehose.
I couldn’t reliably list all norwegian users anyway, and many of their posts would likely be in English.
To get started I googled for an example of subscribing to the firehose in go and found &lt;a href=&quot;https://github.com/CharlesDardaman/blueskyfirehose&quot;&gt;blueskyfirehose&lt;/a&gt;.
Blueskyfirehose is a command line app that subscribes to the firehose and prints posts to stdout.
Having read the source code I found that the indigo library had their own event scheduler setup for processing events from the Firehose.&lt;/p&gt;
&lt;p&gt;Subscribing to the firehose then boils down to the following code:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;go&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Setup a websocket dialer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;d &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; websocket.DefaultDialer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;con, _, err &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; d.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Dial&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;( &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;wss://bsky.social/xrpc/com.atproto.sync.subscribeRepos&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;http&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Header&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; err &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; nil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    log.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Fatal&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(err)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Setup a callback event handler function to process events&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;rscb &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;events&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;RepoStreamCallbacks&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;			RepoCommit: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;func&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;evt&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;comatproto&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;SyncSubscribeRepos_Commit&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // Process a repository commit here&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // This is a bit tricky as you have to do some marshalling and unmarshalling&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // From cbor to json and back to go structs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Setup event scheduler and start processing events&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;seqScheduler &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; sequential.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;NewScheduler&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(con.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;RemoteAddr&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(), rscb.EventHandler)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;events.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;HandleRepoStream&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(ctx, con, seqScheduler)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/snorremd/norsky/blob/main/firehose/firehose.go#L69&quot;&gt;See full processing example&lt;/a&gt; in my repository.&lt;/p&gt;
&lt;h3 id=&quot;storing-posts&quot;&gt;Storing posts&lt;/h3&gt;
&lt;p&gt;Now that I had a way to subscribe to the firehose I needed a way to store posts.
Too keep things simple I wanted an in-process database that would store files on disk.
Running things in-process would make it easier to deploy the feed generator and reduce the latency of serving requests.
The database should also support some form of querying so that I could filter out posts that were not relevant to a given feed.
Based on these requirements I decided to go with a classic database, SQLite.
It is known for being fast and reliable and supports my use case well.&lt;/p&gt;
&lt;p&gt;I quickly ended up in some trouble though.
SQLite is a C program and so would require me to use cgo to interface with it.
This is not a problem in itself, but it would make cross-compiling the feed generator more difficult.
Fortunately I found a pure Go SQLite implementation called &lt;a href=&quot;https://gitlab.com/cznic/sqlite&quot;&gt;modernc.org/sqlite&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I then created a simple database schema that would allow me to store posts and their languages.
While ORM libraries like &lt;a href=&quot;https://gorm.io/&quot;&gt;gorm&lt;/a&gt; exist for Go I’ve become a bit skeptical of them.
I prefer to model my data in SQL first and then make models in the application code that maps to SQL query results.
This allows you to write more efficient queries and makes it easier to reason about the data.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;sql&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; TABLE&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; posts&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  id &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;INTEGER&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; PRIMARY KEY&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; AUTOINCREMENT, &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;-- We need an id to implement deterministic cursor based pagination&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  uri &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;TEXT&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;-- The URI of the post&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  created_at &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;INTEGER&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; NOT NULL&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; -- The time the post was created as a Unix timestamp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; TABLE&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; post_languages&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  post_id &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;INTEGER&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; NOT NULL&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  language&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; TEXT&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; NOT NULL&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  PRIMARY KEY&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (post_id, &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;language&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  FOREIGN KEY&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (post_id) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;REFERENCES&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; posts(id) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;ON DELETE CASCADE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To ensure the database is always migrated I use &lt;a href=&quot;https://github.com/golang-migrate/migrate&quot;&gt;go-migrate&lt;/a&gt;.
This allows me to write migrations in SQL and have them run automatically when the application starts.&lt;/p&gt;
&lt;h4 id=&quot;reading-posts-from-the-database&quot;&gt;Reading posts from the database&lt;/h4&gt;
&lt;p&gt;The feed generator needs to be able to read posts from the database to serve the feed skeleton endpoints.
Initially I started out by using only the official barebones sql module to write queries.
Writing queries by hand and using scanning to map query results to structs is a bit tedious though.
So the hunt began for a good query builder library.
I found &lt;a href=&quot;github.com/huandu/go-sqlbuilder&quot;&gt;go-sqlbuilder&lt;/a&gt;.
Using go-sqlbuilder I could write queries like this:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;go&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;sb &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; sqlbuilder.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;NewSelectBuilder&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;sb.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Select&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;uri&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;created_at&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;group_concat(language)&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;From&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;posts&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; postId &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  sb.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Where&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    sb.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;LessThan&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, postId),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; lang &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &amp;quot;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  sb.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Where&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(sb.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Equal&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;language&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, lang))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;sb.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Join&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;post_languages&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;posts.id = post_languages.post_id&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;sb.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;GroupBy&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;posts.id&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;sb.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Limit&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(limit).&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;OrderBy&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Desc&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;sql, args &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; sb.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;BuildWithFlavor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(sqlbuilder.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Flavor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(sqlbuilder.SQLite))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;rows, err &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; reader.db.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Query&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(sql, args&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This if of course much more verbose than using an ORM, but it is also much more explicit.
I can see exactly what the query is doing and how it is being built.
It is also possible to log the resulting SQL query and run it manually against the database to debug issues.&lt;/p&gt;
&lt;h4 id=&quot;writing-posts-to-the-database&quot;&gt;Writing posts to the database&lt;/h4&gt;
&lt;p&gt;It turns out go-sqlbuilder also supports insert statements.
This allowed me to write a simple function to insert posts into the database.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;go&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;insertPost &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; sqlbuilder.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;NewInsertBuilder&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;sql, args &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; insertPost.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;InsertInto&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;posts&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Cols&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;uri&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;created_at&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Values&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(post.Uri, post.CreatedAt).&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Build&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Spread args&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;res, err &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; db.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Exec&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(sql, args&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; err &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; nil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  log.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Error&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;Error inserting post&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, err)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; err&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Get inserted id&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;id, err &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; res.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;LastInsertId&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; err &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; nil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  log.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Error&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;Error getting inserted id&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, err)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; err&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Post languages insert query&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;insertLangs &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; sqlbuilder.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;NewInsertBuilder&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;insertLangs.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;InsertInto&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;post_languages&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Cols&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;post_id&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;language&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; _, lang &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; range&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; post.Languages {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  insertLangs.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Values&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(id, lang)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;sql, args &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; insertLangs.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Build&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;_, err &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; db.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Exec&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(sql, args&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Observant readers will notice that I perform the insert of the post and the languages in two separate transactions.
This is purely because it is easier to do it this way, and allows me to get a reference to the inserted post’s id.&lt;/p&gt;
&lt;h3 id=&quot;serving-the-feed-skeleton&quot;&gt;Serving the feed skeleton&lt;/h3&gt;
&lt;p&gt;Now that I had a way to subscribe to the firehose and store posts in a database I needed to serve the feed skeleton.
Fortunately this is not the first time I have written an HTTP API in Go.
So I quickly landed on using &lt;a href=&quot;https://gofiber.io/&quot;&gt;fiber&lt;/a&gt;.
Fiber is a fast HTTP framework for Go that is conceptually similar to Express.js and other Node.js frameworks.
You define middleware and routes as callback functions on the server.
The middleware is executed in the order they are registered and can be used to do things like logging, authentication, and error handling.
Routes are defined by a path and a callback function that is executed when a request matches the path.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;go&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;app &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; fiber.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;New&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Middleware to track the latency of each request&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;app.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Use&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;func&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;fiber&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Ctx&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  start &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; time.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Now&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  err &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; c.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Next&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  stop &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; time.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Now&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // Diff&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  log.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;WithFields&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Fields&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;method&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:  c.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Method&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;route&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:   c.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Route&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;().Path,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;latency&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: stop.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Sub&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(start),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }).&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Info&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;Request&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; err&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;app.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Get&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;func&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;fiber&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Ctx&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; c.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;SendString&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;This is the Norsky feed generator for listing Norwegian posts on Bluesky.&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Well known&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;app.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Get&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;/.well-known/did.json&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;func&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;fiber&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Ctx&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // Return the DID document, using regular map[string]interface{} for now&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; c.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;JSON&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;interface&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{}{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;@context&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: []&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;https://www.w3.org/ns/did/v1&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;id&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:       &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;did:web:&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; config.Hostname,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;service&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: []&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;interface&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{}{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;        &amp;quot;id&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:              &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;#bsky_fg&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;        &amp;quot;type&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:            &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;BskyFeedGenerator&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;        &amp;quot;serviceEndpoint&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;https://&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; config.Hostname,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Rest of the handlers ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;putting-it-all-together&quot;&gt;Putting it all together&lt;/h2&gt;
&lt;p&gt;Now that I had all the pieces I needed to put them together.
I wanted the feed generator to be run as a single command in one main process.
Having to launch multiple processes would make it more difficult to deploy and manage.
I also wanted there to be some way to publish the feed, migrating the database, and other administrative tasks.&lt;/p&gt;
&lt;h3 id=&quot;command-line-interface&quot;&gt;Command line interface&lt;/h3&gt;
&lt;p&gt;To make the feed generator easy to use I decided to create a command line interface.
I first used &lt;a href=&quot;https://github.com/spf13/cobra&quot;&gt;cobra&lt;/a&gt; that allows you to create a CLI with subcommands and flags.
However I also wanted to be able to configure the feed generator using environment variables.
I tried using &lt;a href=&quot;https://github.com/spf13/viper&quot;&gt;viper&lt;/a&gt;, but it turns out these two libraries don’t play well together.&lt;/p&gt;
&lt;p&gt;At the same time while building the publish command I found that there was no client api in the indigo library to authenticate with Bluesky or publish my feed generator.
Writing a client api for indigo would be a lot of work!
Fortunately Kagi search came to the rescue revealing that the &lt;a href=&quot;https://github.com/strideynet/bsky-furry-feed&quot;&gt;Furry community had already solved this issue&lt;/a&gt;.
They had built a simple client api for Bluesky.
Coincidentally they also used a different command line library &lt;a href=&quot;https://github.com/urfave/cli&quot;&gt;urfave/cli&lt;/a&gt;.
This library was both a bit simpler than Cobra and also supported environment variables as fallback for flags.&lt;/p&gt;
&lt;h3 id=&quot;communicating-processes&quot;&gt;Communicating processes&lt;/h3&gt;
&lt;p&gt;With a way to run commands I set out to build my &lt;code&gt;serve&lt;/code&gt; command.
It would need to start the HTTP server, subscribe to the firehose, make a process to write posts to the database.
Essentially the serve command would run three separate processes in parallel and somehow allow them to communicate.
Go is a language that is known for its concurrency primitives.
It supports &lt;a href=&quot;https://en.wikipedia.org/wiki/Communicating_sequential_processes&quot;&gt;communicating Sequential Processes (CSP)&lt;/a&gt; in the form of channels.
Channels are typed and can be used to send and receive data between goroutines (go’s coroutines).&lt;/p&gt;
&lt;p&gt;So in  my &lt;code&gt;serve&lt;/code&gt; command I created a channel for each process:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;go&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Channel for subscribing to bluesky posts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;postChan &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; make&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;chan&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; interface&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Setup the server and firehose&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;app &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; server.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Server&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;server&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ServerConfig&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  Hostname: hostname,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  Reader:   db.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;NewReader&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(database),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;fh &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; firehose.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;New&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(postChan, ctx.Context)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;dbwriter &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; db.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;NewWriter&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(database, postChan)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Graceful shutdown via wait group&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;c &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; make&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;chan&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; os&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Signal&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;signal.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Notify&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(c, os.Interrupt)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; wg &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sync&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;WaitGroup&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;go&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; func&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  &amp;lt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;c&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  fmt.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Println&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;Gracefully shutting down...&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  app.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ShutdownWithTimeout&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;60&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; time.Second)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  defer&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; wg.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Add&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Decrement the waitgroup counter by 2 after shutdown of server and firehose&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  fh.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Shutdown&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;go&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; func&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  fmt.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Println&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;Subscribing to firehose...&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; err &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; fh.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Subscribe&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(); err &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; nil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // Use signal to shutdown all the goroutines&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    log.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Error&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(err)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    c &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; os.Interrupt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;go&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; func&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  fmt.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Println&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;Starting server...&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; err &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; app.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Listen&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(fmt.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Sprintf&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;%s&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, host, port)); err &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; nil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    log.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Error&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(err)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    c &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; os.Interrupt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;go&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; func&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  fmt.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Println&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;Starting database writer...&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  dbwriter.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Subscribe&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Wait for both the server and firehose to shutdown&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;wg.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Add&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;wg.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Wait&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;log.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Info&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;Norsky feed generator stopped&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; nil&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esentially I first instantiate each service I need to run.
A post channel is created to allow the firehose to send posts to the database writer.
Finally a goroutine is started for each service which allows them to run in parallel.
The &lt;code&gt;wg.Wait()&lt;/code&gt; call blocks until the waitgroup counter is zero to tell the app to wait for all goroutines to finish.
&lt;code&gt;postChan&lt;/code&gt; is passed to both the firehose and the database writer.
It is untyped so that it can be used to send any type of firehose event.
The database writer then uses type assertions to check if the event is a post and then writes it to the database.&lt;/p&gt;
&lt;p&gt;I find the go concurrency primitives to be very powerful and easy to use.
They allow you to write code that is easy to reason about and that is also fast.
Readers familiar with Clojure will recognize the similarities between go channels and Clojure’s core.async channels.
The similarities are not a coincidence as both languages base their concurrency primitives on CSP.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I’ve had a lot of fun building the Norsky feed generator.
It has been a great way to learn more about the Bluesky protocol and the AT Protocol.
I also learned a lot about Go and how to build concurrent applications.&lt;/p&gt;
&lt;p&gt;The go Bluesky library still feels a bit immature.
If you want to build a feed generator you should consider using the more mature TypeScript library.
But if you are looking for performance Go is a great choice to get started.&lt;/p&gt;
&lt;p&gt;Check out Norsky in action on the &lt;a href=&quot;https://bsky.app/profile/did:plc:o34f4av7ed7szx24dqm4x3g6/feed/all&quot;&gt;Norwegian languages feed&lt;/a&gt;.
The source code is available on &lt;a href=&quot;https://github.com/snorremd/norsky&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Make some confetti with JavaScript and Canvas</title><link>https://snorre.io/blog/2024-07-19-javascript-canvas-confetti/</link><guid isPermaLink="true">https://snorre.io/blog/2024-07-19-javascript-canvas-confetti/</guid><description>Building a confetti animation from scratch using the Canvas API and JavaScript, for a Code Monkey Clash winner page.</description><pubDate>Fri, 19 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;This post features interactive content not available in RSS. &lt;a href=&quot;https://snorre.io/blog/2024-07-19-javascript-canvas-confetti&quot;&gt;View on snorre.io&lt;/a&gt; for the full experience.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;I have been working on &lt;a href=&quot;https://github.com/snorremd/code-monkey-clash&quot;&gt;Code Monkey Clash&lt;/a&gt; for a while now.
It’s a game where you compete against other players to write code as fast as possible.
In one of the latest released I wanted to display a winner page with the top three players.
A winner page deserves some cheerfulness and what’s more cheerful than confetti?
After searching for confetti libraries I decided I would try to implement it myself.&lt;/p&gt;
&lt;p&gt;Having not worked that much with animated graphics in the browser before I decided to search for some tutorials.
I found a few, but most of them just used a library like &lt;a href=&quot;https://www.npmjs.com/package/js-confetti&quot;&gt;js-confetti&lt;/a&gt; to do the heavy lifting.
So I decided to ask ChatGPT for help.
I know using ChatGPT is a bit controversial, but for exploratory coding tasks like this it can be quite helpful.
Rather than ask for the whole solution up front I tried prompting it for some ideas on how to get started.&lt;/p&gt;
&lt;h2 id=&quot;all-artists-need-a-canvas&quot;&gt;All artists need a canvas&lt;/h2&gt;
&lt;p&gt;Essentially the solution would require creating a canvas element and drawing on it.
To get it out of the way lets make a reusable function for setting up the canvas and context.
That way we don’t need to repeat the same code in every example.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; setupCanvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; canvas&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; document.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;getElementById&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(id);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; ctx&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;getContext&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;#39;2d&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    canvas.width &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1600&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    canvas.height &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 900&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { canvas, ctx };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;i-dream-of-rectangles&quot;&gt;I dream of rectangles&lt;/h2&gt;
&lt;p&gt;Say you wanted to draw a red square on position 0,0 with a size of 100x100.
You would set the fill style to red and then call &lt;code&gt;fillRect(0, 0, 100, 100)&lt;/code&gt; on the canvas context.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;canvas-rect&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; render&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; setupCanvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;#39;canvas-rect&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ctx.fillStyle &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &amp;#39;red&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;fillRect&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  render&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;canvas id=&quot;canvas-rect&quot;&gt;&lt;/canvas&gt;

&lt;h2 id=&quot;paths-and-strokes-for-confetti&quot;&gt;Paths and strokes for confetti&lt;/h2&gt;
&lt;p&gt;This is a good start, we have a canvas element and have drawn something on it.
After some more prompting it seemed that drawing paths using strokes would be a good way to create the confetti.
Mozilla Developer Network has &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/stroke&quot;&gt;good documentation on strokes&lt;/a&gt;.
The idea is that you configure the stroke style (width and color), and then start drawing a path.
To make something a little more confetti like we can draw a slightly diagonal line.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;canvas-strokes&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; render&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; setupCanvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;#39;canvas-strokes&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // First we set up the stroke style&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ctx.strokeStyle &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &amp;#39;red&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ctx.lineWidth &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;moveTo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Move to where we want to start the line&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;lineTo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Draw a line to the new position&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;stroke&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Fill the path according to the stroke style&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  render&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;canvas id=&quot;canvas-strokes&quot;&gt;&lt;/canvas&gt;

&lt;p&gt;Now this is starting to look like confetti already!&lt;/p&gt;
&lt;h2 id=&quot;colors-of-the-tailwind-rainbow&quot;&gt;Colors of the Tailwind rainbow&lt;/h2&gt;
&lt;p&gt;But currently we’re just drawing one line, and have hardcoded the color to red.
Let us add some more colors to use in our examples!
I let GitHub Copilot suggest the colors based on the Tailwind CSS color palette.
Not sure if they actually match those in Tailwind, but they look good to me!&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // For brevity I will only show a simplified example of the color function&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // If you inspect my code I account for dark mode preference as my blog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // supports both light and dark mode&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; colors &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;#10b981&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;#7c3aed&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;#fbbf24&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;#ef4444&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;#3b82f6&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;#22c55e&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;#f97316&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;#ef4444&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;With our new-found colors lets try to draw a few more confetti pieces.
We can use the &lt;code&gt;colors&lt;/code&gt; array to pick a random color for each piece.
Drawing a row of confetti in various colors should just require a loop!&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;canvas-colors&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; render&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; setupCanvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;#39;canvas-colors&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ctx.lineWidth &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 20&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.strokeStyle &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; colors[Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; colors.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;moveTo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 30&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// For each iteration move further to the right&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;lineTo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 30&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Draw a line to the new position&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;stroke&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Fill the path according to the stroke style&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  render&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;canvas id=&quot;canvas-colors&quot;&gt;&lt;/canvas&gt;

&lt;p&gt;But what the heck is this?!
All our confetti pieces have the same color.
As it turns out we’ve been drawing sub-paths on the same path for each iteration.
So while the color changes for each iteration, it is set for all sub paths.
Fortunately &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/beginPath&quot;&gt;beginPath&lt;/a&gt; is here to save the day!
Now we have a row of confetti pieces in various colors!&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;canvas-colors-fixed&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; renderColors&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; setupCanvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;#39;canvas-colors-fixed&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ctx.lineWidth &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 8&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 20&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;beginPath&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Start a new path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.strokeStyle &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; colors[Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; colors.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;moveTo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 30&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Move to where we want to start the line&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;lineTo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 30&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Draw a line to the new position&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;stroke&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Fill the path according to the stroke style&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  renderColors&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;canvas id=&quot;canvas-colors-fixed&quot;&gt;&lt;/canvas&gt;
&lt;button onclick=&quot;renderColors()&quot;&gt;Random colors!&lt;/button&gt;

&lt;h2 id=&quot;randomness-is-the-spice-of-life&quot;&gt;Randomness is the spice of life&lt;/h2&gt;
&lt;p&gt;But what is confetti without some randomness?
Right now all our confetti pieces are the same diagonal line.
We can introduce some randomness by adding a random radius and tilt for each piece.
This will simulate 3D space a bit as smaller pieces will appear further away.
Tilting the pieces various directions will also make them look more natural and random.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;canvas-random&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; render&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; setupCanvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;#39;canvas-random&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;      // Make the radius of the path random so confetti are different sizes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; radius&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;      // Ensure the paths tilt in various directions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; tilt&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;      // Distribute the confetti randomly on the canvas&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; x&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.width;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; y&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.height;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;beginPath&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Start a new path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.lineWidth &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.strokeStyle &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; colors[Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; colors.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;moveTo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tilt &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, y);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;lineTo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tilt, y &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tilt &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;stroke&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Fill the path according to the stroke style&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  render&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;canvas id=&quot;canvas-random&quot; class=&quot;w-full border-2 border-stone-300 dark:border-stone-700&quot;&gt;&lt;/canvas&gt;
&lt;button onclick=&quot;render()&quot;&gt;Generate new confetti&lt;/button&gt;

&lt;h2 id=&quot;weightless-confetti-is-no-fun&quot;&gt;Weightless confetti is no fun&lt;/h2&gt;
&lt;p&gt;Up until now the confetti has just been hanging in the air.
No party is complete without some gravity!
We can simulate some gravity by introducing some delta velocity for each piece.
Then we need to update the position of the confetti pieces each frame.
To do this we can use &lt;code&gt;requestAnimationFrame&lt;/code&gt; to call a function that updates the position and redraws the canvas.
We also need to clear the canvas each frame to avoid a mess of confetti pieces.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;canvas-gravity&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; renderFallingConfetti&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; confetti&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; start&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; performance.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;now&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// To keep track of time&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; setupCanvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;#39;canvas-gravity&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; radius&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; tilt&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; x&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.width;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; y&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.height;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      confetti.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        x,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        y,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        radius,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        tilt,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        velocity: Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; update&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;      // Run for at most 10 seconds&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (performance.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;now&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; start &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10000&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;clearRect&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, canvas.width, canvas.height);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      confetti.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;forEach&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;piece&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        piece.y &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.velocity;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;beginPath&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.lineWidth &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.strokeStyle &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; colors[Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; colors.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;moveTo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.tilt &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, piece.y);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;lineTo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.tilt, piece.y &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.tilt &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;stroke&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;      requestAnimationFrame&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(update);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    update&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  renderFallingConfetti&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;canvas id=&quot;canvas-gravity&quot;&gt;&lt;/canvas&gt;
&lt;button onclick=&quot;renderFallingConfetti()&quot;&gt;Make it rain!&lt;/button&gt;

&lt;h2 id=&quot;confetti-dont-fall-straight-down&quot;&gt;Confetti don’t fall straight down&lt;/h2&gt;
&lt;p&gt;Right now our confetti animation is pretty boring.
All the pieces just fall straight down as if there was no atmosphere.
A party without some oxygen will quickly become a disaster!
Usually confetti pieces will scatter a bit as they fall going every which way.&lt;/p&gt;
&lt;p&gt;Each confetti piece should thus have some random horizontal velocity as well as the vertical velocity.
As gravity is mostly always pointing down the vertical velocity should be positive.
However, the horizontal velocity can be both positive and negative as air resistance scatter the pieces.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;canvas-scattering&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; renderScatteringConfetti&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; confetti&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; start&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; performance.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;now&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// To keep track of time&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; setupCanvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;#39;canvas-scattering&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; radius&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; tilt&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; x&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.width;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; y&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.height;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      confetti.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        x,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        y,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        radius,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        tilt,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        color: colors[Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; colors.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        yVelocity: Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        xVelocity: Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; update&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;      // Run for at most 10 seconds&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (performance.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;now&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; start &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10000&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;clearRect&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, canvas.width, canvas.height);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      confetti.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;forEach&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;piece&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        piece.y &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.yVelocity;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.xVelocity;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;beginPath&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.lineWidth &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.strokeStyle &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.color;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;moveTo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.tilt &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, piece.y);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;lineTo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.tilt, piece.y &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.tilt &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;stroke&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;      requestAnimationFrame&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(update);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    update&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  renderScatteringConfetti&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;canvas id=&quot;canvas-scattering&quot;&gt;&lt;/canvas&gt;
&lt;button onclick=&quot;renderScatteringConfetti()&quot;&gt;Make it rain!&lt;/button&gt;

&lt;h2 id=&quot;flutter-like-a-butterfly&quot;&gt;Flutter like a butterfly&lt;/h2&gt;
&lt;p&gt;I still thought the confetti was a bit boring.
How can we make it look more lively?
Well, ChatGPT has a good suggestion:&lt;/p&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Cosine for Vertical Movement:&lt;/p&gt;
&lt;p&gt;When Math.cos is used for vertical movement, it creates a smooth oscillation that starts at a maximum value and goes through a complete cycle (down to a minimum value and back to the maximum).
This can simulate a fluttering effect where the object moves up and down smoothly.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sine for Horizontal Movement:&lt;/p&gt;
&lt;p&gt;When Math.sin is used for horizontal movement, it creates a smooth oscillation that starts at zero and goes through a complete cycle (left and right movement).
This can simulate a swaying effect where the object moves side to side smoothly.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;p&gt;So essentially because both the sine and cosine functions in JavaScript oscillate between -1 and 1 we can use them to create smooth movements.
For each confetti piece we make a phase offset that is unique to the piece.
Then we make a time counter to gradually increase the phase offset.
The quickler the time counter increases the quicker the oscillation will be.
We also introduce some speed constants for the x and y direction to control the speed and magnitude of the movement.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;canvas-fluttering&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; renderFlutteringConfetti&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; timeDelta&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0.05&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; xAmplitude&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; yAmplitude&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; time &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; confetti&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; start&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; performance.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;now&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// To keep track of time&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; setupCanvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;#39;canvas-fluttering&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; radius&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; tilt&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; x&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.width;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; y&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.height;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      confetti.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        x,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        y,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        radius,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        tilt,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        color: colors[Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; colors.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        phaseOffset: i, &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Randomness from position in list&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; update&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;      // Run for at most 10 seconds&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (performance.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;now&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; start &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10000&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;clearRect&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, canvas.width, canvas.height);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      confetti.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;forEach&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;piece&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        piece.y &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;cos&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(piece.phaseOffset &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; time) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; yAmplitude;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sin&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(piece.phaseOffset &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; time) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; xAmplitude;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;beginPath&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.lineWidth &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.strokeStyle &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.color;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;moveTo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.tilt &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, piece.y);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;lineTo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.tilt, piece.y &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.tilt &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;stroke&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      time &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; timeDelta;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;      requestAnimationFrame&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(update);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    update&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  renderFlutteringConfetti&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Feel free to play around with the amplitude and time delta to get different effects!&lt;/p&gt;
&lt;canvas id=&quot;canvas-fluttering&quot;&gt;&lt;/canvas&gt;
&lt;div class=&quot;flex flex-col md:flex-row gap-4 my-8&quot;&gt;&lt;div&gt;&lt;label&gt;Horizontal amplitude&lt;/label&gt;&lt;input type=&quot;number&quot; id=&quot;xAmplitude&quot; value=&quot;0.5&quot;&gt;&lt;/div&gt;&lt;div&gt;&lt;label&gt;Vertical amplitude&lt;/label&gt;&lt;input type=&quot;number&quot; id=&quot;yAmplitude&quot; value=&quot;1&quot;&gt;&lt;/div&gt;&lt;div&gt;&lt;label&gt;Time delta&lt;/label&gt;&lt;input type=&quot;number&quot; id=&quot;timeDelta&quot; value=&quot;0.05&quot;&gt;&lt;/div&gt;&lt;/div&gt;
&lt;button onclick=&quot;renderFlutteringConfetti()&quot;&gt;Make some flutter!&lt;/button&gt;

&lt;h2 id=&quot;tying-up-the-pieces&quot;&gt;Tying up the pieces&lt;/h2&gt;
&lt;p&gt;We have come a long way from a single red square to a fluttering confetti party!
But we’re not quite there yet.
When adding the flutter we completely removed the sideways movement.
On average the confetti pieces move straight down!
And as you might have noticed, annoyingly the confetti pieces fall off the canvas.
How about we re-introduce some sideways momentum and make the confetti pieces wrap around the canvas?&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;canvas-wrapping&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; setupCanvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;#39;canvas-wrapping&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;); &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; renderWrappingConfetti&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; timeDelta&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0.05&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; xAmplitude&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; yAmplitude&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; xVelocity&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; yVelocity&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; time &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; confetti&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 100&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; radius&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; tilt&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; xSpeed&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; xVelocity &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; xVelocity &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; ySpeed&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; yVelocity&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; x&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.width;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; y&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.height &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.height;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      confetti.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        x,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        y,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        xSpeed,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ySpeed,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        radius,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        tilt,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        color: colors[Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; colors.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        phaseOffset: i, &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Randomness from position in list&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; update&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;      // Run for at most 10 seconds&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;clearRect&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, canvas.width, canvas.height);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      confetti.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;forEach&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;piece&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        piece.y &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;cos&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(piece.phaseOffset &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; time) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; yAmplitude &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.ySpeed;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sin&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(piece.phaseOffset &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; time) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; xAmplitude &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.xSpeed;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // Wrap around the canvas&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.width;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.width) piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (piece.y &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.height) piece.y &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;beginPath&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.lineWidth &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.strokeStyle &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.color;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;moveTo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.tilt &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, piece.y);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;lineTo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.tilt, piece.y &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.tilt &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;stroke&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      time &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; timeDelta;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;      requestAnimationFrame&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(update);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    update&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;canvas id=&quot;canvas-wrapping&quot;&gt;&lt;/canvas&gt;
&lt;button onclick=&quot;renderWrappingConfetti()&quot;&gt;Make it wrap!&lt;/button&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;If you made it this far I hope you have learned something new!
With the help of Kagi Search, MDN documentation, and ChatGPT I was able to make quite the confetti party.
The final result is quite lively and has some interesting movement!
By using the sine and cosine functions we were able to create smooth oscillations for the confetti pieces.&lt;/p&gt;
&lt;p&gt;The confetti example can be extended even further.
For example the pieces don’t rotate as they fall.
You could also make the confetti pieces have different shapes, and different colors on each side.
There are tons of possibilities!
Some libraries offer more advanced animation than what we have here.
For me though half the fun was in the exploration and learning.
In any case, feel free to play around with the code and use it for your own needs.&lt;/p&gt;
&lt;h3 id=&quot;addendum&quot;&gt;Addendum&lt;/h3&gt;
&lt;p&gt;This post makes no attempt at optimizing the code!
Observant and knowledgeable readers will notice that the code could be optimized in various ways.
I will leave that as an excersize for the reader!
A great tip is looking at &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray&quot;&gt;TypedArrays&lt;/a&gt; for performance improvements.&lt;/p&gt;</content:encoded></item><item><title>Make some confetti with JavaScript and Canvas - Part Two</title><link>https://snorre.io/blog/2024-08-17-javascript-canvas-confetti-part-two/</link><guid isPermaLink="true">https://snorre.io/blog/2024-08-17-javascript-canvas-confetti-part-two/</guid><description>Optimizing the Canvas confetti: requestAnimationFrame, object pooling, and measuring performance.</description><pubDate>Sat, 17 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;This post features interactive content not available in RSS. &lt;a href=&quot;https://snorre.io/blog/2024-08-17-javascript-canvas-confetti-part-two&quot;&gt;View on snorre.io&lt;/a&gt; for the full experience.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;In a &lt;a href=&quot;https://snorre.io/blog/2024-07-19-javascript-canvas-confetti&quot;&gt;previous post&lt;/a&gt; we started making some confetti using JavaScript and the canvas element.
The implementation was quite simple, but the end result looked quite nice.
In the conclusion I alluded to performance improvements.
In this post we will explore how to improve peformance.&lt;/p&gt;


&lt;h2 id=&quot;the-old-solution&quot;&gt;The old solution&lt;/h2&gt;
&lt;p&gt;First I want to recap what the old solution looked like.
We made a helper function to set up the canvas element.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; setupCanvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; canvas&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; document.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;getElementById&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(id);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; ctx&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;getContext&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;#39;2d&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    canvas.width &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1600&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    canvas.height &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 900&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { canvas, ctx };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then we added some colors:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // For brevity I will only show a simplified example of the color function&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // If you inspect my code I account for dark mode preference as my blog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // supports both light and dark mode&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; colors &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;#10b981&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;#7c3aed&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;#fbbf24&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;#ef4444&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;#3b82f6&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;#22c55e&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;#f97316&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &amp;quot;#ef4444&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This time around I’ll add a helper function to set up the particles.
That way we can easily change the number of particles as the animation is running.
It takes a reference to an array of particles and the number of particles to create.
If the number of particles is less than the length of the array it will remove particles from the end.
If the number of particles is greater than the length of the array it will add particles to the end.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; setupParticles&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;particles&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;numParticles&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(numParticles &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; particles.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      particles.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; numParticles;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(numParticles &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; particles.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      for&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; particles.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; numParticles; i&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        particles.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          x: Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.width,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          y: Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.height &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.height,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          radius: Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          tilt: Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          xSpeed: Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          ySpeed: Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          color: colors[Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; colors.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          phase: i, &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Randomness from position in list&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now we can wire together all the parts to implement the old solution:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;canvas-slow&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; setupCanvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;#39;canvas-slow&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;); &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; slowConfetti&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; renderSlow&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; timeDelta&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0.05&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; xAmplitude&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0.5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; yAmplitude&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; xVelocity&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; yVelocity&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; time &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    setupParticles&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(canvas, slowConfetti, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; update&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;clearRect&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, canvas.width, canvas.height);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      slowConfetti.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;forEach&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;piece&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        piece.y &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;cos&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(piece.phase &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; time) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; yAmplitude &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.ySpeed;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sin&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(piece.phase &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; time) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; xAmplitude &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.xSpeed;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // Wrap around the canvas&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.width;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.width) piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (piece.y &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.height) piece.y &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;beginPath&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.lineWidth &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.strokeStyle &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.color;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;moveTo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.tilt &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, piece.y);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;lineTo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.tilt, piece.y &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.tilt &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;stroke&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      time &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; timeDelta;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;      requestAnimationFrame&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(update);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    update&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;canvas id=&quot;canvas-slow&quot;&gt;&lt;/canvas&gt;

&lt;div class=&quot;flex flex-row justify-between&quot;&gt;&lt;div class=&quot;flex flex-col&quot;&gt;&lt;label for=&quot;numConfetti&quot;&gt;Number of confetti: &lt;span id=&quot;slowNumConfettiLabel&quot;&gt;100&lt;/span&gt;&lt;/label&gt;&lt;input type=&quot;range&quot; min=&quot;0&quot; max=&quot;250000&quot; value=&quot;100&quot; step=&quot;100&quot; oninput=&quot;slowNumConfetti = this.value; document.getElementById(&apos;slowNumConfettiLabel&apos;).innerText = this.value&quot;&gt;&lt;/div&gt;&lt;span id=&quot;slowFPS&quot;&gt;&lt;p&gt;FPS: 0&lt;/p&gt;&lt;/span&gt;&lt;span id=&quot;slowTTDF&quot;&gt;&lt;p&gt;Frame: 0&lt;/p&gt;&lt;/span&gt;&lt;span id=&quot;slowTPP&quot;&gt;&lt;p&gt;Particle: 0&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;

&lt;button onclick=&quot;runSlowAnimation ? runSlowAnimation = false : renderSlow()&quot;&gt;Toggle Animation&lt;/button&gt;
&lt;p&gt;As you increase the number of confetti you will notice the performance starts to degrade.
My MacBook Pro with the M1 processor sees about these numbers:&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Number of confetti&lt;/th&gt;&lt;th&gt;Time to draw frame&lt;/th&gt;&lt;th&gt;Frames per second&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;0.1ms&lt;/td&gt;&lt;td&gt;120&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;10 000&lt;/td&gt;&lt;td&gt;2.4ms&lt;/td&gt;&lt;td&gt;120&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;100 000&lt;/td&gt;&lt;td&gt;25ms&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;250 000&lt;/td&gt;&lt;td&gt;60ms&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;As you can see the performance is good enough for practical purposes on powerful hardware.
When rendering 100 000 confetti you can hardly tell where one particle ends and the next begins.
However, slower hardware will likely struggle much earlier than this.
And we’re seeing significant dips in FPS when rendering 250 000 confetti, likely due to GC.
So let us try to squeeze out some more performance!&lt;/p&gt;
&lt;h2 id=&quot;move-computations-out-from-the-hot-path&quot;&gt;Move computations out from the hot path&lt;/h2&gt;
&lt;p&gt;As it turns out we’re doing some expensive computations in the hot path.
The &lt;code&gt;Math.cos&lt;/code&gt; and &lt;code&gt;Math.sin&lt;/code&gt; functions are called for each particle in each frame.
These are only computed for each particle as the phase offsets are unique for each particle.
Each particle also have a complete unique x and y velocity and amplitude.&lt;/p&gt;
&lt;p&gt;Let us try to instead make 100 unique combinations to compute for each frame.
This should be much faster than computing 100 000+ unique combinations.
At the start of the function we create arrays for each property:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // Setup a helper function to create the phases&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; particlePhases&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Array.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({ length: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;500&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; }, (&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        xPhase: Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;cos&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(i),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        yPhase: Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sin&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(i) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        xAmplitude: Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        yAmplitude: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        x: Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;cos&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(i) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // Before the animation loop we can build the phases&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; phases&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; particlePhases&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // Then for each frame we can update the particles&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  for&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; phases.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    phases[i].x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sin&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; time) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; phases[i].xAmplitude;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    phases[i].y &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;cos&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; time) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; phases[i].yAmplitude;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // Inside the loop we can use the phases to update the particles&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  phaseConfetti.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;forEach&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;piece&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    piece.y &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; phases[i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; phases.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;].y &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.ySpeed;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; phases[i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; phases.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;].x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.xSpeed;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  })  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;canvas id=&quot;canvas-phase&quot;&gt;&lt;/canvas&gt;

&lt;div class=&quot;flex flex-row justify-between&quot;&gt;&lt;div class=&quot;flex flex-col&quot;&gt;&lt;label for=&quot;numConfetti&quot;&gt;Number of confetti: &lt;span id=&quot;phaseNumConfettiLabel&quot;&gt;100&lt;/span&gt;&lt;/label&gt;&lt;input type=&quot;range&quot; min=&quot;0&quot; max=&quot;250000&quot; value=&quot;100&quot; step=&quot;100&quot; oninput=&quot;phaseNumConfetti = this.value; document.getElementById(&apos;phaseNumConfettiLabel&apos;).innerText = this.value&quot;&gt;&lt;/div&gt;&lt;span id=&quot;phaseFPS&quot;&gt;&lt;p&gt;FPS: 0&lt;/p&gt;&lt;/span&gt;&lt;span id=&quot;phaseTTDF&quot;&gt;&lt;p&gt;Frame: 0&lt;/p&gt;&lt;/span&gt;&lt;span id=&quot;phaseTPP&quot;&gt;&lt;p&gt;Particle: 0&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;

&lt;button onclick=&quot;runPhaseAnimation ? runPhaseAnimation = false : renderPhase()&quot;&gt;Toggle Animation&lt;/button&gt;
&lt;p&gt;With this new improvement we’re already seeing significant performance improvements, but only at 250 000 confetti.
The 250 000 confetti now runs closer to 20 frames per second, but with the same drops as before.&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Number of confetti&lt;/th&gt;&lt;th&gt;Time to draw frame&lt;/th&gt;&lt;th&gt;Frames per second&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;0.1ms&lt;/td&gt;&lt;td&gt;~120&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;10 000&lt;/td&gt;&lt;td&gt;2.3ms&lt;/td&gt;&lt;td&gt;~120&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;100 000&lt;/td&gt;&lt;td&gt;20ms&lt;/td&gt;&lt;td&gt;~40&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;250 000 *&lt;/td&gt;&lt;td&gt;50ms&lt;/td&gt;&lt;td&gt;~20&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;draw-more-efficiently&quot;&gt;Draw more efficiently&lt;/h2&gt;
&lt;p&gt;One of the more expensive operations in the loop is drawing each particle.
We start a new path for each particle and draw a line.
If we can reduce the number of paths we start we can reduce the number of operations.
Each path can only hold one color, so we need to group or sort the particles by color.&lt;/p&gt;
&lt;p&gt;I’m elliding most of the existing code for brevity, but the important part is the sorting and drawing of the particles.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // Before we start the animation we can sort the particles by color &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    pathConfetti.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; a.color.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;localeCompare&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(b.color));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // Then for each frame we can draw the particles in groups by color&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; prevColor &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &amp;#39;&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    pathConfetti.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;forEach&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;piece&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(piece.color &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; prevColor) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;stroke&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;beginPath&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.strokeStyle &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.color;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        prevColor &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.color;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.lineWidth &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;moveTo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.tilt &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, piece.y);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;lineTo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(piece.x &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.tilt, piece.y &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.tilt &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; piece.radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;canvas id=&quot;canvas-path&quot;&gt;&lt;/canvas&gt;

&lt;div class=&quot;flex flex-row justify-between&quot;&gt;&lt;div class=&quot;flex flex-col&quot;&gt;&lt;label for=&quot;numConfetti&quot;&gt;Number of confetti: &lt;span id=&quot;pathNumConfettiLabel&quot;&gt;100&lt;/span&gt;&lt;/label&gt;&lt;input type=&quot;range&quot; min=&quot;0&quot; max=&quot;250000&quot; value=&quot;100&quot; step=&quot;100&quot; oninput=&quot;pathNumConfetti = this.value; document.getElementById(&apos;pathNumConfettiLabel&apos;).innerText = this.value&quot;&gt;&lt;/div&gt;&lt;span id=&quot;pathFPS&quot;&gt;&lt;p&gt;FPS: 0&lt;/p&gt;&lt;/span&gt;&lt;span id=&quot;pathTTDF&quot;&gt;&lt;p&gt;Frame: 0&lt;/p&gt;&lt;/span&gt;&lt;span id=&quot;pathTPP&quot;&gt;&lt;p&gt;Particle: 0&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;

&lt;button onclick=&quot;runPathAnimation ? runPathAnimation = false : renderPath()&quot;&gt;Toggle Animation&lt;/button&gt;
&lt;p&gt;Now we’re getting somewhere!
The 250 000 confetti now runs at about 40 frames per second, twice as fast as before.
There are still occasional drops in FPS, but they are less severe.
At 100 000 confetti it jumps between 60 and 120 frames per second.
You’ll notice now that with such a high number of confetti the canvas appears almost uniformly colored.
This is because the particles are sorted by color and drawn in groups.
For this post though we’re mostly interested in testing performance, not making pretty pictures.&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Number of confetti&lt;/th&gt;&lt;th&gt;Time to draw frame&lt;/th&gt;&lt;th&gt;Frames per second&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;0ms&lt;/td&gt;&lt;td&gt;~120&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;10 000&lt;/td&gt;&lt;td&gt;2ms&lt;/td&gt;&lt;td&gt;~120&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;100 000&lt;/td&gt;&lt;td&gt;12ms&lt;/td&gt;&lt;td&gt;~60&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;250 000&lt;/td&gt;&lt;td&gt;27ms&lt;/td&gt;&lt;td&gt;~30&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;typed-arrays&quot;&gt;Typed arrays&lt;/h2&gt;
&lt;p&gt;Up until now we’ve been using plain JavaScript objects and arrays to represent the particles.
These are often sufficient for everyday UIs and APIs that push small amounts of data around.
When you have a lot of data, like 250 000 particles, you might want to consider using something more efficient.
JavaScript arrays are actually objects with some special properties.
Thus they are always stored on the heap and you potentially miss out on some performance benefits.&lt;/p&gt;
&lt;p&gt;Let us see if we can improve performance by using typed arrays.
&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray&quot;&gt;Typed arrays&lt;/a&gt; are arrays where each element is of the same type.
This allows them to be stored in a contiguous block of memory and cached in CPU cache.
This can lead to faster access times and fewer cache misses&lt;/p&gt;
&lt;p&gt;Because this is a larger change I will show the entire implementation.
This time we will use a &lt;code&gt;Float32Array&lt;/code&gt; to store the particles.
We don’t need the full precision of double precision floating point numbers to animate confetti.&lt;/p&gt;
&lt;p&gt;As before we keep the phases in a separate list to avoid recomputing them for all particles.
7 properties at 1 byte each means each confetti particle is 7 bytes.
With 250 000 particles that’s 1.75MB of data which is well within most L2 caches.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // Setup a helper function to create the phases&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; linearTransform&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;inMin&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;inMax&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;outMin&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;outMax&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;round&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;((value &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; inMin) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (outMax &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; outMin) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (inMax &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; inMin) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; outMin);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // Setup a helper function to create the phases&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; setupTypedPhases&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; phases&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Float32Array&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;500&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      phases[i] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;       &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// xAmplitudes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      phases[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;500&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;                      &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// yAmplitudes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      phases[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sin&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(i);            &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// xPhases&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      phases[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1500&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;cos&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(i) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;        &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// yPhases&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; phases;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; setupTypedParticles&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;numParticles&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; numProperties&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 7&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// x, y, radius, tilt, xSpeed, ySpeed, color&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; particles&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Float32Array&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(numParticles &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; numProperties);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; numColors&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; colors.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;    // Initialize particles&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    for&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; numParticles; i&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; index&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; numProperties;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      particles[index] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.width;       &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// x&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      particles[index &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.height &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.height; &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// y&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      particles[index &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;        &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// radius&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      particles[index &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;        &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// tilt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      particles[index &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;          &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// xSpeed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      particles[index &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;random&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;              &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// ySpeed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      particles[index &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 6&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; linearTransform&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(i, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, numParticles, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, numColors); &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// color&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { particles, numProperties };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;With the helper functions to build typed arrays of particles and phases we can now implement the animation loop.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;canvas-typed&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; typedNumConfetti &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 100&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; renderTyped&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; setupCanvas&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;#39;canvas-typed&amp;#39;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; time &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; typedConfetti &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; setupTypedParticles&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(canvas, typedNumConfetti);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; phases&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; setupTypedPhases&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; update&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;animationTime&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      const&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;particles&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;numProperties&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; typedConfetti;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;clearRect&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, canvas.width, canvas.height);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;      // Calculate the phase values for the frame&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      for&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 500&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        phases[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sin&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; time) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; phases[i];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        phases[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1500&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;cos&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; time) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; phases[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;500&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i]; &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// yPhases updated with yAmplitudes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;beginPath&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; prevColor &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      for&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; typedNumConfetti; i&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; index&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; numProperties;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        particles[index] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; phases[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; particles[index &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;];  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// x + xSpeed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        particles[index &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; phases[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;30&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (i &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 10&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; particles[index &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]; &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// y + ySpeed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;        // Wrap around the canvas&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (particles[index] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) particles[index] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.width;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (particles[index] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.width) particles[index] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (particles[index &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; canvas.height) particles[index &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; radius&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; particles[index &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; tilt&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; particles[index &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; colorIndex&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; particles[index &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 6&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (colorIndex &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;!==&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; prevColor) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;stroke&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;beginPath&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          ctx.strokeStyle &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; colors[colorIndex];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          prevColor &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; colorIndex;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.lineWidth &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;moveTo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(particles[index] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tilt &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, particles[index &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;lineTo&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(particles[index] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tilt, particles[index &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tilt &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; radius &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ctx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;stroke&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      time &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;+=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; timeDelta;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      typedTimeToDrawFrame &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; performance.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;now&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; typedTimeToDrawFrame;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;      requestAnimationFrame&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(update);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    update&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;canvas id=&quot;canvas-typed&quot;&gt;&lt;/canvas&gt;

&lt;div class=&quot;flex flex-row justify-between&quot;&gt;&lt;div class=&quot;flex flex-col&quot;&gt;&lt;label for=&quot;numTypedConfetti&quot;&gt;Number of confetti: &lt;span id=&quot;typedNumConfettiLabel&quot;&gt;100&lt;/span&gt;&lt;/label&gt;&lt;input type=&quot;range&quot; min=&quot;0&quot; max=&quot;250000&quot; value=&quot;100&quot; step=&quot;100&quot; oninput=&quot;typedNumConfetti = parseInt(this.value); document.getElementById(&apos;typedNumConfettiLabel&apos;).innerText = this.value&quot;&gt;&lt;/div&gt;&lt;span id=&quot;typedFPS&quot;&gt;&lt;p&gt;FPS: 0&lt;/p&gt;&lt;/span&gt;&lt;span id=&quot;typedTTDF&quot;&gt;&lt;p&gt;Frame: 0&lt;/p&gt;&lt;/span&gt;&lt;span id=&quot;typedTPP&quot;&gt;&lt;p&gt;Particle: 0&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;

&lt;button onclick=&quot;runTypedAnimation ? runTypedAnimation = false : renderTyped()&quot;&gt;Toggle Animation&lt;/button&gt;
&lt;p&gt;We managed to eek out just a bit more performance, but at this point we’re starting to hit the limits of what we can do with CPU and Canvas.
The 250 000 confetti now runs at above 40 frames per second, a good improvement over the previous implementation.
Rendering up to 50 000 confetti should be no problem on most hardware with this implementation.&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Number of confetti&lt;/th&gt;&lt;th&gt;Time to draw frame&lt;/th&gt;&lt;th&gt;Frames per second&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;0ms&lt;/td&gt;&lt;td&gt;~120&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;10 000&lt;/td&gt;&lt;td&gt;2ms&lt;/td&gt;&lt;td&gt;~120&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;100 000&lt;/td&gt;&lt;td&gt;9ms&lt;/td&gt;&lt;td&gt;~90&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;250 000&lt;/td&gt;&lt;td&gt;22ms&lt;/td&gt;&lt;td&gt;~40&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;There are further room for improvements.
One could conceivably parallellise the computation of the phases and the particle updates, but I won’t cover that here.
Also the Canvas is not the most efficient way to render large amounts of particles.
For that you might want to look into WebGL or WebGPU.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;We started with a simple implementation of confetti animation and iterated on it to improve performance.
Moving expensive computations out of the hot path provided a significant performance boost.
Drawing particles in groups by color also improved performance as we could reduce the number of paths we started.
Finally we used typed arrays to store the particles and phases to improve memory locality and cache performance.&lt;/p&gt;
&lt;p&gt;The final implementation can render 250 000 confetti particles at 40 frames per second on my M1 MacBook Pro.
This is a significant improvement over the original implementation which struggled at 100 000 particles.
While you should really consider using WebGL or WebGPU for this many particles, the Canvas API can still be performant with some clever optimizations.&lt;/p&gt;
&lt;p&gt;I hope you found this post interesting and maybe even learned something new.&lt;/p&gt;</content:encoded></item><item><title>Running Bluesky PDS with Traefik proxy on Scaleway</title><link>https://snorre.io/blog/2025-09-22-running-bsky-pds-traefik-scaleway-copy/</link><guid isPermaLink="true">https://snorre.io/blog/2025-09-22-running-bsky-pds-traefik-scaleway-copy/</guid><description>Self-hosting a Bluesky Personal Data Server on Scaleway with Traefik as reverse proxy for data sovereignty.</description><pubDate>Mon, 22 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://bsky.app&quot;&gt;Bluesky&lt;/a&gt; is a decentralized social network built on the &lt;a href=&quot;https://atproto.com/&quot;&gt;AT Protocol&lt;/a&gt;.
If you’ve followed me for a while you probably know I’m a big fan.
While most users sign up on the main bsky.social PDS, you can run your own PDS instance to maintain full control over your data.
I decided to self-host my PDS to keep my social data sovereign and experiment with the protocol’s decentralized nature.
This post walks through my setup hosting a PDS on Scaleway using Traefik as a reverse proxy.&lt;/p&gt;
&lt;h2 id=&quot;part-1-personal-data-servers&quot;&gt;Part 1: Personal Data Servers&lt;/h2&gt;
&lt;p&gt;The AT Protocol Personal Data Server (PDS for short) is the service that stores user records and file uploads (blobs).
Whenever you post or repost, like a post, follow a user, or do anything else on the network you create a record on your PDS.
As of this writing (February 2025) almost every user in the ATProto network is on a Bluesky PDS.
&lt;a href=&quot;https://arewedecentralizedyet.online/&quot;&gt;Are we decentralized yet&lt;/a&gt; is a useful tracker that measures user concentration on different federated social networks.&lt;/p&gt;
&lt;p&gt;I am a big believer in the AT Protocol, even having built a &lt;a href=&quot;https://snorre.io/blog/2023-10-01-bluesky-feed-generators-giving-users-algorithmic-choice&quot;&gt;Feed Generator server&lt;/a&gt;.
But as long as the vast majority users remain on the official PDSs the decentralized nature of Bluesky is only theoretical.
To help the network move in a more decentralized direction you can host your own Personal Data Server, and that is exactly what I did (pun not intended).&lt;/p&gt;
&lt;p&gt;I did a bit of research and decided to go with the &lt;a href=&quot;https://github.com/bluesky-social/pds&quot;&gt;official PDS&lt;/a&gt; which runs on Node.js on top of SQLite.&lt;/p&gt;
&lt;h2 id=&quot;part-2-choosing-a-hosting-provider&quot;&gt;Part 2: Choosing a hosting provider&lt;/h2&gt;
&lt;p&gt;Part of the reason for hosting my own PDS was to move my data away from the US and closer to home.
My apartment isn’t really equipped for running a home lab, so I needed to find a hosting provider.
I decided to go with a hosting provider I was familiar with, &lt;a href=&quot;https://www.scaleway.com/&quot;&gt;Scaleway&lt;/a&gt;.
There are a couple of reasons for this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;They are european and have servers in Amsterdam, not too far away from Norway&lt;/li&gt;
&lt;li&gt;They offer cheap small VPS instances with unlimited traffic&lt;/li&gt;
&lt;li&gt;Storage is networked and can easily be scaled up or down&lt;/li&gt;
&lt;li&gt;You can easily scale up to a more powerful instance if needed&lt;/li&gt;
&lt;li&gt;You can create snapshots of your instance-attached storage and restore them&lt;/li&gt;
&lt;li&gt;They have a good S3-compatible block storage offering for hosting files&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I ended up going with the &lt;a href=&quot;https://www.scaleway.com/en/pricing/virtual-instances/&quot;&gt;DEV1-S&lt;/a&gt; instance which is a 2 vCPU, 2GB RAM, 20GB block storage, and 200Mbps bandwidth.
This instance is quite cheap while allowing me to run the PDS, a reverse proxy, and some supporting services.&lt;/p&gt;
&lt;h2 id=&quot;part-3-setting-up-the-pds&quot;&gt;Part 3: Setting up the PDS&lt;/h2&gt;
&lt;p&gt;The official repository is pretty opinionated on how to run the PDS.
It provides an install script that:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Installs Docker&lt;/li&gt;
&lt;li&gt;Sets up environment variables in specific location&lt;/li&gt;
&lt;li&gt;Creates a Caddy proxy config&lt;/li&gt;
&lt;li&gt;Installs a unit file for systemd to run Caddy and the PDS&lt;/li&gt;
&lt;li&gt;Starts the services&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Now I like Docker, but I feel Caddy perhaps is a bit too commercial these days.
Also I’d like to have some say over how everything is set up.
The official installer assumes you use disk storage for the PDS blobs.
I’d rather use the S3-compatible block storage offered by Scaleway.
So I decided to take a step back and do the configuration myself, after all how hard could it be?&lt;/p&gt;
&lt;h2 id=&quot;part-4-docker-setup&quot;&gt;Part 4: Docker setup&lt;/h2&gt;
&lt;p&gt;I mostly run everything I do in &lt;a href=&quot;https://www.docker.com/&quot;&gt;Docker&lt;/a&gt;.
It allows me to easily set up and tear down services without worrying about dependencies and lingering config and files.
One of the easier ways to expose Docker services I’ve found is to use &lt;a href=&quot;https://traefik.io/&quot;&gt;Traefik&lt;/a&gt;.
They support connecting to a Docker daemon and automatically set up a reverse proxy for labeled Docker Compose services.&lt;/p&gt;
&lt;p&gt;Before we look at the services you need to configure some networks and volumes.
I prefer to use docker volumes over bind mounts for data, but using bind mounts is also possible.
Observe that we only need one network, &lt;code&gt;traefik&lt;/code&gt;, as the PDS will only be accessed via the Traefik proxy.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;volumes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  bluesky-pds&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  letsencrypt&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;networks&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  traefik&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;traefik&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Let’s start with the Traefik service.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;services&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  traefik&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    image&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;traefik:v3&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    container_name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;traefik&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    restart&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;always&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    command&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;--api.insecure=true&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;--providers.docker=true&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;--providers.docker.exposedbydefault=false&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;--providers.docker.network=traefik&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;      # Web sites entrypoint&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;--entrypoints.web.address=:80&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;--entrypoints.websecure.address=:443&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;--entrypoints.websecure.http3.advertisedport=443&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;--entrypoints.web.http.redirections.entryPoint.to=websecure&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;--entrypoints.web.http.redirections.entryPoint.scheme=https&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;--entrypoints.web.http.redirections.entrypoint.permanent=true&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;      # Certificate/ACME stuff&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;--certificatesresolvers.cloudflare.acme.dnschallenge=true&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;--certificatesresolvers.cloudflare.acme.dnschallenge.provider=cloudflare&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;--certificatesresolvers.cloudflare.acme.email=${ACME_EMAIL}&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;--certificatesresolvers.cloudflare.acme.storage=/letsencrypt/acme.json&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    environment&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;CLOUDFLARE_EMAIL=${CLOUDFLARE_EMAIL}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    networks&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;traefik&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    ports&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;80:80&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;443:443&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;443:443/udp&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    volumes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;letsencrypt:/letsencrypt&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;/var/run/docker.sock:/var/run/docker.sock:ro&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Traefik is configured to listen on port 80 and 443 for http and https requests.
We configure the Traefik to redirect http requests to https, a simple security measure.
Usually when running Traefik I use the http challenge for ACME, but this does not work for wildcard certificates.
Instead we have to use a DNS challenge, in my case via Cloudflare DNS.
Traefik supports automatic handling of DNS challenges for lots of DNS providers.
We also need to map the docker socket to the Traefik container to allow it to read from the Docker daemon socket.&lt;/p&gt;
&lt;p&gt;Now let’s take a look at the Bluesky PDS service.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  bluesky-pds&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    container_name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;bluesky-pds&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    image&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ghcr.io/bluesky-social/pds:0.4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    restart&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;unless-stopped&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    networks&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;bluesky-pds&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;traefik&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    labels&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;traefik.enable=true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;traefik.http.middlewares.bluesky-pds-header.headers.customrequestheaders.Host=&amp;quot;{host}&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;traefik.http.routers.bluesky-pds.rule=Host(`pds.snorre.io`) || HostRegexp(`[a-zA-Z0-9-]+.pds.snorre.io`)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;traefik.http.routers.bluesky-pds.entrypoints=web,websecure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;traefik.http.routers.bluesky-pds.tls=true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;traefik.http.routers.bluesky-pds.tls.certresolver=cloudflare&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;traefik.http.routers.bluesky-pds.tls.domains[0].main=pds.snorre.io&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;traefik.http.routers.bluesky-pds.tls.domains[0].sans=*.pds.snorre.io&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;traefik.http.routers.bluesky-pds.middlewares=bluesky-pds-header&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;traefik.http.services.bluesky-pds.loadbalancer.server.port=3000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;traefik.docker.network=traefik&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    env_file&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;./pds/pds.env&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    volumes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;bluesky-pds:/pds&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You’ll probably notice the many labels on the PDS service.
These are used to configure Traefik to request SSL certificates from Cloudflare and to proxy requests to the PDS service.
The &lt;code&gt;traefik.http.middlewares.bluesky-pds-header.headers.customrequestheaders.Host=&amp;quot;{host}&amp;quot;&lt;/code&gt; label is especially important.
It allows the PDS to know the original hostname of the request which tells it which user the request was made for.&lt;/p&gt;
&lt;p&gt;The PDS service expects configuration in the form of environment variables.
However the &lt;code&gt;pdsadmin&lt;/code&gt; helper scripts expects the configuration to be in a .env file.
To keep things simple we can reuse the same &lt;code&gt;.env&lt;/code&gt; file for both by using the &lt;code&gt;env_file&lt;/code&gt; option in Docker Compose.
The &lt;code&gt;.env&lt;/code&gt; file looks like this:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# PDS specific variables&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PDS_HOSTNAME=pds.snorre.io&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PDS_JWT_SECRET=&amp;lt;my-jwt-secret&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PDS_ADMIN_PASSWORD=&amp;lt;my-admin-password&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX=&amp;lt;my-plc-rotation-key&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PDS_DATA_DIRECTORY=/pds&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;#PDS_BLOBSTORE_DISK_LOCATION=/pds/blocks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PDS_BLOBSTORE_S3_BUCKET=&amp;lt;my-s3-bucket-name&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PDS_BLOBSTORE_S3_REGION=&amp;lt;my-s3-region&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PDS_BLOBSTORE_S3_ENDPOINT=&amp;lt;my-s3-endpoint&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PDS_BLOBSTORE_S3_FORCE_PATH_STYLE=false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PDS_BLOBSTORE_S3_ACCESS_KEY_ID=&amp;lt;my-s3-access-key-id&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PDS_BLOBSTORE_S3_SECRET_ACCESS_KEY=&amp;lt;my-s3-secret-access-key&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PDS_BLOB_UPLOAD_LIMIT=52428800&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PDS_DID_PLC_URL=https://plc.directory&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PDS_BSKY_APP_VIEW_URL=https://api.bsky.app&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PDS_BSKY_APP_VIEW_DID=did:web:api.bsky.app&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PDS_REPORT_SERVICE_URL=https://mod.bsky.app&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PDS_REPORT_SERVICE_DID=did:plc:ar7c4by46qjdydhdevvrndac&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PDS_CRAWLERS=https://bsky.network&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# SMTP for mail sending&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PDS_EMAIL_SMTP_URL=smtps://&amp;lt;my-smtp-user&amp;gt;:&amp;lt;my-smtp-password&amp;gt;@&amp;lt;my-smtp-domain&amp;gt;/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;PDS_EMAIL_FROM_ADDRESS=&amp;lt;my-smtp-user&amp;gt;@&amp;lt;my-smtp-domain&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Logging&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;LOG_ENABLED=true&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As you can see I’m configuring the PDS to use S3 storage for blobs.
This is not officially documented in the PDS repository, but it seems to work.
Using S3 storage means I don’t need to worry about disk storage running out too fast.
The S3 bucket should be created before running the PDS and should be configured as private.
The PDS handles requests for blobs so they don’t need to be publicly accessible by default.&lt;/p&gt;
&lt;p&gt;With all this out of the way I could start the services, no systemd unit files needed.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;docker&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; compose&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; up&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -d&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;part-5-running-admin-commands&quot;&gt;Part 5: Running admin commands&lt;/h3&gt;
&lt;p&gt;As we’ve forgone the whole official installer we need to download the psdadmin scripts.
The pdsadmin script is not bundled in the PDS Docker image.
Thus we need to clone the PDS repository to get access to it.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; clone&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; https://github.com/bluesky-social/pds&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pds&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;chmod&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; +x&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pdsadmin.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then we can run the pdsadmin script.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ./pdsadmin.sh&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; help&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For some reason they require sudo to run every command, even if only the &lt;code&gt;update&lt;/code&gt; command needs it depending on which permissions you’ve set on the &lt;code&gt;env&lt;/code&gt; file.
If you wanted to create an invite code you can do so with the &lt;code&gt;create-invite-code&lt;/code&gt; command.
Because it expects the environment file to be under &lt;code&gt;/pds/pds.env&lt;/code&gt; we need to override the path to the environment file.
You can forgo that if you’ve put the environment file in the expected location.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; su&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;PDS_ENV_FILE&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;path-to&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/pds.env&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; ./pdsadmin.sh&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; create-invite-code&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can then use the invite code to create a new account on the PDS.&lt;/p&gt;
&lt;h3 id=&quot;part-6-being-discovered-by-bluesky-relay&quot;&gt;Part 6: Being discovered by Bluesky Relay&lt;/h3&gt;
&lt;p&gt;The Bluesky Relay is the service that actually makes content on PDSs discoverable on the Bluesky network/app.
To make your new PDS discoverable you need to register it with the Bluesky Relay.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; su&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;PDS_ENV_FILE&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;path-to&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/pds.env&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; ./pdsadmin.sh&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; request-crawl&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; bsky.network&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Hurray, you’re now discoverable on the Bluesky network!&lt;/p&gt;
&lt;h3 id=&quot;part-7-migrating-your-bluesky-account-to-the-new-pds&quot;&gt;Part 7: Migrating your Bluesky account to the new PDS&lt;/h3&gt;
&lt;p&gt;Now this part was the most scary part for me.
&lt;a href=&quot;https://github.com/alexclassroom/bluesky-pds/blob/main/ACCOUNT_MIGRATION.md&quot;&gt;The documentation&lt;/a&gt; makes it out to be a bit scary:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Account migration is a potentially destructive operation. Part of the operation involves signing away your old PDS’s ability to make updates to your DID. If something goes wrong, you could be permanently locked out of your account, and Bluesky will not be able to help you recover it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Fortunately I found that Bluesky has a tool that among other things can migrate your account to a new PDS.
It is called &lt;a href=&quot;https://github.com/bluesky-social/goat&quot;&gt;goat&lt;/a&gt;.
I won’t go into too many details here, instead I’ll just link to &lt;a href=&quot;https://whtwnd.com/bnewbold.net/3l5ii332pf32u&quot;&gt;this excellent guide&lt;/a&gt; by bryan newbold.
It lists all the relevant steps and commands you need to follow.
Suffice to say &lt;a href=&quot;https://bsky.app/profile/snorre.io&quot;&gt;my account&lt;/a&gt; is now on my new PDS!
I hope this post can inspire you to host your own PDS and take back control of your social data.&lt;/p&gt;</content:encoded></item><item><title>Ansible - An elegant provisioning tool for a more civilized age</title><link>https://snorre.io/blog/2024-12-24-server-setup-with-ansible/</link><guid isPermaLink="true">https://snorre.io/blog/2024-12-24-server-setup-with-ansible/</guid><description>Server provisioning with Ansible: push vs pull models, idempotent playbooks, and standardizing server setup.</description><pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It has been a while since I’ve written a blog post.
Life’s been busy, and so time has sort of slipped away.
These past few weeks I’ve been setting up some new servers and wanted to standardise the setup.
I recalled the old, trusty CLI tool Ansible and decided to give it a try.&lt;/p&gt;
&lt;img src=&quot;https://snorre.io/_astro/civilized-weapon.CbvBZt4L_ZjwuzG.webp&quot; srcset=&quot;https://snorre.io/_astro/civilized-weapon.CbvBZt4L_Z2rKrgl.webp 400w, https://snorre.io/_astro/civilized-weapon.CbvBZt4L_fqkNw.webp 800w, https://snorre.io/_astro/civilized-weapon.CbvBZt4L_Z15hrx6.webp 1200w, https://snorre.io/_astro/civilized-weapon.CbvBZt4L_ZjwuzG.webp 1268w&quot; alt=&quot;Star Wars - A more civilized weapon&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1268&quot; height=&quot;692&quot;&gt;
&lt;h2 id=&quot;server-provisioning&quot;&gt;Server provisioning&lt;/h2&gt;
&lt;p&gt;So before the advent of serverless computing, people would manage and host applications on physical or virtual servers.
Now there is something about the feeling of ssh-ing into a server and getting your hands dirty that I really like.
You can &lt;code&gt;apt install&lt;/code&gt; stuff, manage services with &lt;code&gt;systemctl&lt;/code&gt;, shoot your own foot with &lt;code&gt;rm -rf /&lt;/code&gt;, and generally just have full control over your own little corner of the internet.
But with great power comes great responsibility.
If you don’t want your server to be a target for hackers, you need to configure the &lt;code&gt;sshd&lt;/code&gt; service, set up a firewall, add intrusion detection, and so on.
You also might want to monitor the resource usage of your servers and much more.
Doing this manually for each new server is a pain, and remembering what you’ve done previously is even worse.&lt;/p&gt;
&lt;h2 id=&quot;server-provisioning-tools&quot;&gt;Server provisioning tools&lt;/h2&gt;
&lt;p&gt;But fret not, for the system administrators of old did not sit around doing this manually!
Initially sysadmins would write shell scripts to automate the setup of servers, but this was not scalable.
So they started writing tools to manage the setup of servers.
Generally there are two models of server provisioning tools:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The pull model&lt;/li&gt;
&lt;li&gt;The push model&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In the pull model, you install an agent on each server you want to manage, and the agent will pull the configuration from a central server.
The agent then applies any changes required to the server it is running on.
This models incurs some overhead on each server, and as soon as you update the configuration on the central server, the agents will pull the new configuration and apply it.&lt;/p&gt;
&lt;p&gt;In the push model, you run a central server that pushes the configuration to the servers you want to manage.
This model negates the need for an agent on each server reducing the overhead.
However, as the central server or machine have to apply the configuration on each server, this model is often slower to apply.
Further more you need to occassionally check the configuration on target servers to detect any drift that might have occurred.&lt;/p&gt;
&lt;h2 id=&quot;ansible&quot;&gt;Ansible&lt;/h2&gt;
&lt;p&gt;Ansible is a tool that implements the push model, sending python scripts to the servers you want to manage.
Each python script runs on the target server and can be used to install packages, configure services, and so on.
The only requirement for each server is thus a python interpreter, which is generally available on most Linux distributions.&lt;/p&gt;
&lt;p&gt;The tool was released way back in February 2012, and has since then become a very popular tool for server provisioning.
Some might argue that running servers and provisioning them is a bit of an old-school thing to do.
Why not just use managed cloud services?
Well, managed cloud services are great, but they can be expensive, and you don’t have full control over your own infrastructure.&lt;/p&gt;
&lt;p&gt;So what does it look like to provision a server with Ansible?&lt;/p&gt;
&lt;h3 id=&quot;the-inventory&quot;&gt;The inventory&lt;/h3&gt;
&lt;p&gt;First you want to define an inventory of servers you want to manage.
This can be done in a file called &lt;code&gt;inventory.yml&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;db-servers&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  hosts&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    server1.example.com&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      ansible_host&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;192.168.1.100&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      ansible_user&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;hunter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    server2.example.com&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      ansible_host&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;192.168.1.101&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      ansible_user&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;hunter&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This inventory file defines two servers, &lt;code&gt;server1.example.com&lt;/code&gt; and &lt;code&gt;server2.example.com&lt;/code&gt;, that we want to manage, their respective IP addresses, and the user we want to use to ssh into them.
They are both grouped under the &lt;code&gt;db-servers&lt;/code&gt; group which we can reference in our playbooks.&lt;/p&gt;
&lt;h3 id=&quot;modules&quot;&gt;Modules&lt;/h3&gt;
&lt;p&gt;Modules are the building blocks of Ansible.
They are small reusable python modules that can be used to perform specific tasks.
For example, the &lt;code&gt;package&lt;/code&gt; module is used to install and remove packages on a server using the distribution’s package manager.
Another example is the &lt;code&gt;shell&lt;/code&gt; module, which allows you to run shell commands on a server.&lt;/p&gt;
&lt;h3 id=&quot;actions&quot;&gt;Actions&lt;/h3&gt;
&lt;p&gt;Actions are the tasks that are executed on the target server(s).
They are defined in the playbooks and are executed by the Ansible agent on the target server(s).&lt;/p&gt;
&lt;h3 id=&quot;roles&quot;&gt;Roles&lt;/h3&gt;
&lt;p&gt;Roles are a way to organize tasks into reusable units.
The Ansible community has created a lot of roles for common tasks, such as installing and configuring specific services like &lt;a href=&quot;hhttps://galaxy.ansible.com/ui/standalone/roles/geerlingguy/docker/&quot;&gt;Docker&lt;/a&gt; and &lt;a href=&quot;https://galaxy.ansible.com/ui/standalone/roles/alf149/crowdsec/&quot;&gt;CrowdSec&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can also define your own roles, which can be reused in multiple playbooks.&lt;/p&gt;
&lt;h3 id=&quot;the-playbook&quot;&gt;The playbook&lt;/h3&gt;
&lt;p&gt;With modules, actions, roles and inventories defined we can finally get into the fun part: writing playbooks.
A playbook is a yaml file that describes one or more &lt;em&gt;plays&lt;/em&gt;, which are a set of tasks and/or roles that are executed on the target server(s).
Each task defines some provisioning logic to be executed on the target server(s).&lt;/p&gt;
&lt;p&gt;For example, to install a package on a server, you can use the built-in &lt;code&gt;package&lt;/code&gt; module:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Install packages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  hosts&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;db-servers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tasks&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Install ufw&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      package&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ufw&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        state&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;present&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Simple, right?&lt;/p&gt;
&lt;p&gt;If you want to do more than just install packages, you can run multiple tasks in a playbook.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Install packages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  hosts&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;db-servers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  become&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tasks&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Install ufw&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      package&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ufw&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        state&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Enable ufw&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      shell&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        cmd&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;echo &amp;quot;y&amp;quot; | ufw enable&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Let say you want to install and configure a PostgreSQL server on your db servers.
You can use the &lt;code&gt;geerlingguy.postgresql&lt;/code&gt; role to do this.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# site.yml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Provision postgresql on db-servers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  hosts&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;db-servers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  roles&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;role&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;geerlingguy.postgresql&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      become&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;yes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;      vars&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        postgresql_unix_socket_directories&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;            - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/var/run/postgresql&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        postgresql_service_state&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;started&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        postgresql_service_enabled&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can of course combine roles and tasks in a playbook.
But I won’t go into details here.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Ansible is a powerful tool for provisioning servers.
It allows you to standardise the setup of your servers, and to automate the provisioning of new servers.
It is a bit of a learning curve, but once you get the hang of it, you’ll wonder how you ever managed servers without it.
Not only does it help automate the provisioning of new servers, your playbooks also act as documentation as code for your server setup.&lt;/p&gt;</content:encoded></item><item><title>Review of Kerbal Space Program 2 - Part 1</title><link>https://snorre.io/blog/2024-01-18-kerbal-space-program-2-review/</link><guid isPermaLink="true">https://snorre.io/blog/2024-01-18-kerbal-space-program-2-review/</guid><description>First impressions of Kerbal Space Program 2: design rockets, run a space agency, and explore the solar system.</description><pubDate>Thu, 18 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;You’ve probably heard it, the famous countdown as the Apollo 11 rocket is about to launch:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;…2, 1, zero, all engine running…&lt;br&gt;
LIFT-OFF! We have a lift-off, 32 minutes past the hour. Lift-off on Apollo 11.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It must have been a very exciting moment for those who were alive to follow the launch back then.
The Apollo 11 program was the culmination of years of hard work by scientists and engineers.
Humankind’s first trip to the surface of the Moon, in a time when computers were still the size of a room.
For most of us being a part of such a momentous mission, to further mankinds knowledge of the universe, will just be a dream.
Rocket science is hard, so for most of us rocket launches and space missions are just something we get to follow from afar.&lt;/p&gt;
&lt;img src=&quot;https://snorre.io/_astro/apollo11-launch.hMRJKxcw_fJOYm.webp&quot; srcset=&quot;https://snorre.io/_astro/apollo11-launch.hMRJKxcw_mPad.webp 400w, https://snorre.io/_astro/apollo11-launch.hMRJKxcw_Z1qFlre.webp 800w, https://snorre.io/_astro/apollo11-launch.hMRJKxcw_Z1UOlwq.webp 1200w, https://snorre.io/_astro/apollo11-launch.hMRJKxcw_Zmhyp1.webp 1920w&quot; alt=&quot;Screenshot of Mac Monitor app showing Spotify processes&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;2400&quot; height=&quot;3000&quot;&gt;
&lt;small&gt;&lt;p&gt;Photo by NASA in the &lt;a href=&quot;https://www.nasa.gov/nasa-brand-center/images-and-media/&quot;&gt;public domain&lt;/a&gt;.
Downloaded from &lt;a href=&quot;https://en.wikipedia.org/wiki/File:Apollo_11_Launch_-_GPN-2000-000630.jpg&quot;&gt;Wikimedia&lt;/a&gt;.&lt;/p&gt;&lt;/small&gt;
&lt;p&gt;But what if you could?
What if you could design your own rockets?
Run a space agency?
Explore the solar system?
What if you could be the one to make the countdown, and then press the button to launch the rocket?
With Kerbal Space Program 2 you can!&lt;/p&gt;
&lt;h2 id=&quot;in-the-beginning&quot;&gt;In the beginning&lt;/h2&gt;
&lt;p&gt;In the beginning there was Kerbal Space Program, an ambitious space simulation game originally released in 2011.
It was a passion project of Felipe Falanghe, a Brazilian game developer working for a media company, Squad.
With Kerbal Space Program Felipe explored the idea of making realistic space exploration accessible to the masses.
The alpha was very rudimentary featuring only a single planet, limited physics and game play.
But the game showed promise, and little by little it gained advanced physics, a solar system to explore, and a fullfledged career mode.
I had always been in awe of the space exploration missions of NASA, ESA, and other space agencies.
So when I discovered Kerbal Space Program I bought it and had some fun doing some simple missions.
But for some reason I never really got into the game, and my space agency felt more like a satellite company.&lt;/p&gt;
&lt;p&gt;Earth orbited the sun eight more times, 2019 rolled around, and a successor was announced.
An early access version of Kerbal Space Program 2 was to take off in 2020, and it would be developed by Intercept Games.
We orbited the sun once more, 2020 came about, but there were no signs of a release on the event horizon.
It would take three more orbits before the game would be released in February 2024.&lt;/p&gt;
&lt;p&gt;But the proverbial rocket crashed on the launch, much to the chagrin of the Kerbal Space Program community.
The game received negative reviews on Steam, many complaining about the lack of gameplay content, bugs, and poor performance.
I was dissapointed, but the Apollo program wasn’t built in a day, so I decided to wait for the game to mature.&lt;/p&gt;
&lt;p&gt;Then 2023 came about, the northern hemisphere was leaning away from the sun, and Intercept Game launched the game’s firt big update “For Science!”.
With love and care the developers had added some much needed content in the form of a science progression and mission system.
Performance issues and bugs had also been adressed.
Kerbal Space Program was shaping up to look like a proper game.
I decided to put on the space suit and give it a try.&lt;/p&gt;
&lt;h2 id=&quot;a-space-agency&quot;&gt;A space agency&lt;/h2&gt;
&lt;p&gt;I arrive at the Kerbal Space Center, the headquarters of the Kerbal Space Program.
For some reason I, a total stranger with no rocket experience, have been put in charge of the space program.
Fortunately the space program already has all the buildings and facilities you’d need to get started.
I am lead through a series of tutorials teaching me the basics of rocket design and rocket control.
Kerbal Space Program 2’s tutorials quickly move you from firing rockets at the sky to orbital mechanics.
They stop short of the more advanced topics like interplanetary travel, but they give you a good foundation to build on.&lt;/p&gt;
&lt;h2 id=&quot;what-goes-up-must-come-down&quot;&gt;What goes up must come down&lt;/h2&gt;
&lt;p&gt;My fledgling space program is ready to launch its first rocket.
I don’t have that many rocket parts yet, so I’m tasked with some simple missions.
As a lesson in the futility of reaching orbit I’m told to launch a rocket up to a certain height.
I build what amounts to an oversized firework, launch it straight up, and watch it fall back down again.
My fearless Kerbalnaut Tim Kerman does not seem all too entused about the dangers, but he’s a professional.
As I watch the rocket fall down I learn a valueable lesson about the importance of parachutes.
Not to mention how Kerbin’s (the planet) rotation keeps moving my rocket away from the launch pad.
When you launch high enough you’ll find the earth moves away from under you, and your landing site will be a few kilometers away from the launch pad.
These small progressive lessons are a great way to gain some intuition about how rocket physics and orbital mechanics work.&lt;/p&gt;

&lt;img src=&quot;https://snorre.io/_astro/landing-rocket-capsule.CwG-DBCr_Zff8Ma.webp&quot; srcset=&quot;https://snorre.io/_astro/landing-rocket-capsule.CwG-DBCr_ZU1AK8.webp 400w, https://snorre.io/_astro/landing-rocket-capsule.CwG-DBCr_ZJjakD.webp 800w, https://snorre.io/_astro/landing-rocket-capsule.CwG-DBCr_ZNQQY8.webp 1200w, https://snorre.io/_astro/landing-rocket-capsule.CwG-DBCr_ZkcNVt.webp 1920w&quot; alt=&quot;Landing capsule&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;2560&quot; height=&quot;1440&quot; class=&quot;mt-4&quot;&gt;
&lt;h2 id=&quot;orbiting-a-green-rugged-marble&quot;&gt;Orbiting a green rugged marble&lt;/h2&gt;
&lt;p&gt;I complete the first few missions, and I’m rewarded with science points that I use to unlock new rocket parts.
My budding space agency is shaping up to be a real do-getter as I quickly achieve orbit around Kerbin.
The first few missions are fairly simple, yet they give you a sense of accomplishment!
As you orbit Kerbin (the planet) for the first time you can’t help but feel a sense of wonder as you admire the green marble below you.
Your space rocket is hurtling through space a couple of thousand meters per second, yet you feel calm and at peace.&lt;/p&gt;

&lt;img src=&quot;https://snorre.io/_astro/orbiting-kerbin.g9MIEAOb_ZHx50r.webp&quot; srcset=&quot;https://snorre.io/_astro/orbiting-kerbin.g9MIEAOb_PU8yQ.webp 400w, https://snorre.io/_astro/orbiting-kerbin.g9MIEAOb_Z2wQM7I.webp 800w, https://snorre.io/_astro/orbiting-kerbin.g9MIEAOb_1pdy9j.webp 1200w, https://snorre.io/_astro/orbiting-kerbin.g9MIEAOb_Z2dlDv5.webp 1920w&quot; alt=&quot;Orbiting Kerbin&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;2560&quot; height=&quot;1440&quot; class=&quot;mt-4&quot;&gt;
&lt;p&gt;Kerbin is one of the many planets and moons in the Kerbal system, the solar system of Kerbal Space Program 2.
The Kerbal system is a scaled down version of our own solar system, so Kerbin is the equivalent of Earth, and Mun is the equivalent of the Moon.
To make space travel a bit easier the entire solar system is scaled down, thus reducing the gravity of the planets, and the distances between them.
This allows your rockets to reach celestial bodies without too much fuel and mass.
You’ll still find the distances cosmic in nature though, so a fast forward button is available to speed up time.
As the game will teach you, space travel is mostly the silent waiting between the exciting storms of rocket burns to adjust your trajectories.&lt;/p&gt;
&lt;p&gt;Yet, the game is not all quiet.
First of all the game forgoes the realistic silence of space and blasts the engine noise of your rockets into your ears.
Even as you watch your rocket from outside in the cold vacuum of space you’ll hear the roar of the engines.
The game also has a beautiful soundtrack that plays as you explore the solar system.
As you near your planned maneuver nodes the music will swell into an excited crescendo.
This is a nice touch that connects the soundtrack to the gameplay, and it makes the game feel more in touch with you the player.&lt;/p&gt;
&lt;h2 id=&quot;freedom-to-explore-and-solve-things-your-way&quot;&gt;Freedom to explore and solve things your way&lt;/h2&gt;
&lt;p&gt;I complete a couple of more missions and find that increasingly I’m left to figure out my rocket designs on my own.
Getting anywhere in the game is simply a matter of strapping enough explosive fuel and some engines to a command capsule.
Kerbalnauts are fortunately very brave, so volunteering them for a mission is not a problem.
For my first Mun mission I find myself overcompensating a bit, and I end up with a rocket that would probably bankrupt my space agency.
Fortunately for me Kerbal Space Program 2 does not yet have an economy system, so I can build rockets with reckless abandon.&lt;/p&gt;
&lt;p&gt;The game gives you the option of manned and unmanned probes.
My agency begins it journey sending Tim Kerman into space and onto the two moons.
But as I progress my space agency has shifted a bit toward unmanned probes (satellites) and rovers.
An advantage of unmanned probes is that you don’t risk stranding your poor Kerbalnauts in space.&lt;/p&gt;

&lt;img src=&quot;https://snorre.io/_astro/mun-satellite.BlV09YjG_Z1pHVxN.webp&quot; srcset=&quot;https://snorre.io/_astro/mun-satellite.BlV09YjG_1U1E6B.webp 400w, https://snorre.io/_astro/mun-satellite.BlV09YjG_Z2iBtsr.webp 800w, https://snorre.io/_astro/mun-satellite.BlV09YjG_1o7cEh.webp 1200w, https://snorre.io/_astro/mun-satellite.BlV09YjG_Z1GtQhO.webp 1920w&quot; alt=&quot;Mun satellite&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;2560&quot; height=&quot;1440&quot; class=&quot;mt-4&quot;&gt;
&lt;h2 id=&quot;sunrises-and-sunrises&quot;&gt;Sunrises and Sunrises&lt;/h2&gt;
&lt;p&gt;As I orbit the various celestial bodies I get to experience the magic of the sunrise and sunset from space.
A big development from the first game is the improved graphics and graphical style.
Gone are the mostly matte textures and lighting of the first game, and in comes a sense that the sun actually shines!
With proper volumetric cloud rendering and other graphical effects space looks better than ever.
As my rocket orbits a planet and I slowly see the sun rise over the horizon I forget my mission for a moment and just enjoy the view.&lt;/p&gt;

&lt;img src=&quot;https://snorre.io/_astro/sunrise-kerbin.d3518C5t_My8BM.webp&quot; srcset=&quot;https://snorre.io/_astro/sunrise-kerbin.d3518C5t_Z1AnHaB.webp 400w, https://snorre.io/_astro/sunrise-kerbin.d3518C5t_I05GR.webp 800w, https://snorre.io/_astro/sunrise-kerbin.d3518C5t_1w3X1S.webp 1200w, https://snorre.io/_astro/sunrise-kerbin.d3518C5t_Z1Jgg02.webp 1920w&quot; alt=&quot;Kerbin sunrise&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;2560&quot; height=&quot;1440&quot; class=&quot;mt-4&quot;&gt;
&lt;h2 id=&quot;rocket-science-is-hard&quot;&gt;Rocket science is hard&lt;/h2&gt;
&lt;p&gt;The game really shines in the early game.
when you are still exploring the close vicinity of Kerbin.
But as the missions progress I miss some of the guidance you get in the early game.
Going interplanetary is almost impossible without leaving the game and doing some research on the Internet.&lt;/p&gt;
&lt;p&gt;There are also the occassional bugs and performance issues.
For example the game sometimes fail to render an orbital trajectory for your rocket in the map view.
If you can’t see the trajectory you can’t plan your rocket burns, and you can’t get anywhere.
The game’s map UI also has some usability issues.
Spaceship icons and labels often get in the way of your maneuver nodes (a way to create burn maneuver plans).
If you zoom out the map view maneuver nodes become hard to manipulate, so you’ll find yourself zooming in and out.&lt;/p&gt;

&lt;img src=&quot;https://snorre.io/_astro/duna-orbit.BZiwRAq3_Z2mik92.webp&quot; srcset=&quot;https://snorre.io/_astro/duna-orbit.BZiwRAq3_2f7PPc.webp 400w, https://snorre.io/_astro/duna-orbit.BZiwRAq3_Zt04DI.webp 800w, https://snorre.io/_astro/duna-orbit.BZiwRAq3_BHKHN.webp 1200w, https://snorre.io/_astro/duna-orbit.BZiwRAq3_Z12UcDm.webp 1920w&quot; alt=&quot;Duna orbit&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;2560&quot; height=&quot;1440&quot; class=&quot;mt-4&quot;&gt;
&lt;p&gt;Even so the game manages to be a lot of fun, and I’ve had a blast exploring Kerbin, its moons, and beyond.
My agencies latest accomplishment (as of this writing) was a Rover mission to the surface of the moon.
Another triumph for my agencies was a successful Duna (Mars) satellite.
My satellite did not suffer the catastrophic fate of the real life Mars Climate Orbiter, and it is happily orbiting Duna (Mars) as we speak.
I guess it helps that the game does not fail to account for different units of measurement, using only the metric system.
Take that American Imperial system!
Triumphs like these are what makes the game fun, and I’m looking forward to exploring the rest of the solar system.&lt;/p&gt;

&lt;img src=&quot;https://snorre.io/_astro/mun-rover.ZkCQmtzu_Zm1UGs.webp&quot; srcset=&quot;https://snorre.io/_astro/mun-rover.ZkCQmtzu_1bXpCY.webp 400w, https://snorre.io/_astro/mun-rover.ZkCQmtzu_2nCteG.webp 800w, https://snorre.io/_astro/mun-rover.ZkCQmtzu_1RdeRC.webp 1200w, https://snorre.io/_astro/mun-rover.ZkCQmtzu_MP6Xs.webp 1920w&quot; alt=&quot;Mun rover&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;2560&quot; height=&quot;1440&quot; class=&quot;mt-4&quot;&gt;
&lt;h2 id=&quot;the-future&quot;&gt;The future&lt;/h2&gt;
&lt;p&gt;The game is still in the early stages, and there are many features to come.
Upcoming features include colonization, interstellar travel, multiplayer, and more.
For now though I’m declaring Lift-off!
If you like simulation games and space exploration I recommend you give Kerbal Space Program 2 a try.
The game is already very playable, and it can only get better from here!&lt;/p&gt;
&lt;p&gt;See you around, space cowboy!&lt;/p&gt;</content:encoded></item><item><title>Protecting Traefik proxy with CrowdSec</title><link>https://snorre.io/blog/2026-01-25-protecting-traefik-proxy-with-crowdsec/</link><guid isPermaLink="true">https://snorre.io/blog/2026-01-25-protecting-traefik-proxy-with-crowdsec/</guid><description>Using CrowdSec to protect Traefik from HTTP brute force attacks: access log parsing, scenarios, and bouncers.</description><pubDate>Sun, 25 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been using &lt;a href=&quot;https://traefik.io/&quot;&gt;Traefik&lt;/a&gt; as a reverse proxy for many years now.
It’s an open-source proxy with powerful features and a great community.
They were even kind enough to send me a t-shirt once for one of my &lt;a href=&quot;https://snorre.io/blog/2021-03-31-host-local-dev-http-server&quot;&gt;blog posts&lt;/a&gt;, so I’m a bit biased.
Recently I’ve been running &lt;a href=&quot;https://crowdsec.net/&quot;&gt;Crowdsec&lt;/a&gt; as a firewall and intrusion detection system.
Until now I’ve been content protecting against SSH brute force attacks and relying on their IP blocklists to protect against malicious actors.
But now that I host more of my own services on VMs behind Traefik, I decided it was time to protect against HTTP attacks as well.
Fortunately, Crowdsec has facilities for handling Traefik HTTP traffic, and in this post I’ll show you my setup.&lt;/p&gt;
&lt;h2 id=&quot;the-traefik-access-log&quot;&gt;The Traefik access log&lt;/h2&gt;
&lt;p&gt;To protect against common HTTP brute force attacks, we need to be able to detect them.
Crowdsec is largely based around parsing and analysing logs, tracking the number of events over time to determine the IP addresses that are most likely to be malicious actors.
Traefik has a built-in access log that can be used to feed into Crowdsec.
Some of the most relevant fields in the access logs are shown below.
By extracting these fields Crowdsec can determine the IP address of the malicious actor and take action based on the patterns it finds.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &amp;quot;ClientHost&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;&amp;lt;client-ip&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &amp;quot;RequestMethod&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &amp;quot;RequestPath&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;/some/path&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &amp;quot;RequestHost&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;&amp;lt;external-domain&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &amp;quot;DownstreamStatus&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;400&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &amp;quot;RequestProtocol&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;HTTP/2.0&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &amp;quot;time&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;2026-01-25T16:18:38Z&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To configure the access log, we need to set the &lt;code&gt;accessLog&lt;/code&gt; section in the Traefik configuration file.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;accessLog&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  filePath&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/opt/traefik/logs/access.log&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  format&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;json&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you run Traefik inside Docker, you’ll want to mount the log file to the host filesystem so it can be read by Crowdsec.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;volumes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/opt/traefik/logs/access.log:/opt/traefik/logs/access.log&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;log-rotation&quot;&gt;Log rotation&lt;/h2&gt;
&lt;p&gt;Traefik only supports rotation of its own service logs, not the access log.
In order to rotate the access log you can use the logrotate service to rotate the log file.
Here is an example configuration for the logrotate service:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/opt/traefik/logs/access.log {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    daily&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    rotate 7&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    compress&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    delaycompress&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    missingok&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    notifempty&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    create 0644 root root&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    sharedscripts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    postrotate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        # Send USR1 signal to Traefik to reopen log file&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        docker kill --signal=&amp;quot;USR1&amp;quot; $(docker ps | grep traefik | awk &amp;#39;{print $1}&amp;#39;) 2&amp;gt;/dev/null || true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    endscript&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I use the &lt;code&gt;postrotate&lt;/code&gt; directive to send a USR1 signal to Traefik to reopen the log file.
This is necessary because logrotate will move the log file to &lt;code&gt;access.log.1&lt;/code&gt;, &lt;code&gt;access.log.2&lt;/code&gt;, etc.
Traefik would append to its open file descriptor indefinitely, causing it to write to the moved file under &lt;code&gt;access.log.1&lt;/code&gt;, &lt;code&gt;access.log.2&lt;/code&gt;, etc.
Sending the USR1 signal to Traefik causes it to reopen the log file and start appending to the new file.&lt;/p&gt;
&lt;h2 id=&quot;setting-up-crowdsec-to-analyze-traefik-access-logs&quot;&gt;Setting up Crowdsec to analyze Traefik access logs&lt;/h2&gt;
&lt;p&gt;Crowdsec has &lt;a href=&quot;https://app.crowdsec.net/hub/author/crowdsecurity/collections/traefik&quot;&gt;a collection&lt;/a&gt; that provides the log parser for Traefik access logs and includes base HTTP scenarios to protect against.
These scenarios include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;aggressive crawl detection&lt;/li&gt;
&lt;li&gt;scanning/probing detection&lt;/li&gt;
&lt;li&gt;bad user-agent detection&lt;/li&gt;
&lt;li&gt;path traversal detection&lt;/li&gt;
&lt;li&gt;sensitive data access attempts detection&lt;/li&gt;
&lt;li&gt;SQL injection detection&lt;/li&gt;
&lt;li&gt;administration interface probing detection&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can install it using the following command:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;cscli&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; collections&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; crowdsecurity/traefik&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For Crowdsec to analyse the logs, you need to set up an acquisition target for the logs, for example at &lt;code&gt;/etc/crowdsec/acquis.d/traefik.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;filenames&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/opt/traefik/logs/access.log&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;labels&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;traefik&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The scenarios should be enabled by default when installing the collection.
You can verify this by checking the &lt;code&gt;cscli scenarios list&lt;/code&gt; command.&lt;/p&gt;
&lt;p&gt;After enabling the scenarios on multiple VMs of mine I’ve already seen a few malicious actors get banned:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://snorre.io/_astro/crowdsec-decisions.C5HJ3qhu_1clFrW.webp&quot; alt=&quot;Crowdsec decisions page showing rows of decisions made by Crowdsec banning malicious http traffic&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1196&quot; height=&quot;366&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;a-word-of-caution&quot;&gt;A word of caution&lt;/h2&gt;
&lt;p&gt;The default &lt;code&gt;http-probing&lt;/code&gt; scenario is quite aggressive, banning IPs that generate too many 400-range responses in a short period of time.
I managed to get my own IP banned by this scenario after pushing Docker images to my Forgejo registry.
This was caused by &lt;code&gt;docker push&lt;/code&gt; making multiple requests to check for the existence of layers, resulting in a cascade of 404 responses that triggered the scenario.&lt;/p&gt;
&lt;p&gt;To avoid this, you can either disable the specific scenario or create a custom configuration to exclude certain paths or adjust the thresholds.
You could define a custom &lt;code&gt;/etc/crowdsec/scenarios/http-probing-override.yaml&lt;/code&gt; file that excludes the &lt;code&gt;/v2/&lt;/code&gt; path from the scenario and allows up to 100 400-range requests per IP within 30 seconds:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;leaky&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;crowdsecurity/http-probing-override&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;Override for http-probing scenario with much higher threshold to reduce false positives&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;evt.Meta.service == &amp;#39;http&amp;#39; &amp;amp;&amp;amp; evt.Meta.http_status in [&amp;#39;404&amp;#39;, &amp;#39;403&amp;#39;, &amp;#39;400&amp;#39;] &amp;amp;&amp;amp; evt.Parsed.static_ressource == &amp;#39;false&amp;#39; &amp;amp;&amp;amp; !(evt.Parsed.http_path matches &amp;#39;^/v2/&amp;#39;)&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;leakspeed&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;30s&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;capacity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;100&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;groupby&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;evt.Meta.source_ip + evt.Meta.http_target_fqdn&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;distinct&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;evt.Parsed.http_path&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;blackhole&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;5m&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;labels&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  service&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;http&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;scan&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;With a few quick steps, I was able to set up Crowdsec to ban malicious actors from accessing my VMs.
Note that this setup is not a replacement for a Web Application Firewall (WAF), as it does not block attacks at the application layer.
Instead, it analyses the logs and takes action based on the patterns it finds.
This makes it a good complement to a WAF, providing additional protection against common HTTP attacks.
Another positive aspect of this setup is that Crowdsec shares the IP of the attackers with the entire Crowdsec network.
This way other Crowdsec users can benefit from the information and take action against the same malicious actors without first having to identify them.&lt;/p&gt;
&lt;p&gt;If you need a WAF, you can check out &lt;a href=&quot;https://docs.crowdsec.net/docs/appsec/intro&quot;&gt;Crowdsec WAF&lt;/a&gt;, which sits as a component inside your Traefik proxy.
This allows you to block attacks at the application layer and block malicious actors in the proxy layer.
Note that blocking at the network layer via your firewall is better, as traffic never reaches the proxy layer and thus reduces computational overhead.
Fortunately, Crowdsec WAF can be used in conjunction with your firewall to provide additional protection.&lt;/p&gt;</content:encoded></item><item><title>Code Monkey Clash - A Code Competition Workshop Game</title><link>https://snorre.io/blog/2024-07-02-code-monkey-clash/</link><guid isPermaLink="true">https://snorre.io/blog/2024-07-02-code-monkey-clash/</guid><description>An open source workshop game where players compete to solve coding challenges via HTTP. Built in TypeScript.</description><pubDate>Tue, 02 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://github.com/snorremd/code-monkey-clash&quot;&gt;Code Monkey Clash is an open source code competition workshop game&lt;/a&gt; I’ve been working on.
A little more than a decade ago I first played the &lt;a href=&quot;https://github.com/rchatley/extreme_startup&quot;&gt;Extreme Startup&lt;/a&gt; workshop game.
I liked it so much that I also hosted an Extreme Startup workshop of my own during my time at university.
Later a colleague hosted a session at work, and I started thinking it would be fun to renew the experience.
Code Monkey Clash is my take on the game with new questions and an implementation from scratch in TypeScript.&lt;/p&gt;
&lt;h2 id=&quot;the-concept-and-gameplay&quot;&gt;The concept and gameplay&lt;/h2&gt;
&lt;p&gt;The game is a workshop where participants are challenged to solve questions by writing code.
Each player creates an HTTP server that accepts a &lt;code&gt;GET&lt;/code&gt; request with a question, and responds with the answer.
The game master runs a server that sends questions to the players and evaluates the answers.
Based on the answer, or the lack thereof, the game server assigns points to the players, and adjusts the question interval.
The game is played in rounds, and the player with the most points at the end of the game wins.&lt;/p&gt;

&lt;img src=&quot;https://snorre.io/_astro/admin-dashboard._Fx53bu1_Z2qp9BR.webp&quot; srcset=&quot;https://snorre.io/_astro/admin-dashboard._Fx53bu1_Z1kMSRB.webp 400w, https://snorre.io/_astro/admin-dashboard._Fx53bu1_Z1bbAhQ.webp 800w, https://snorre.io/_astro/admin-dashboard._Fx53bu1_Z17dCmU.webp 1200w, https://snorre.io/_astro/admin-dashboard._Fx53bu1_Z2qp9BR.webp 1366w&quot; alt=&quot;Screenshot of the Code Monkey Clash admin dashboard&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1366&quot; height=&quot;1239&quot;&gt;
&lt;p&gt;The questions ranges from simpler word problems to more complex algorithmic challenges.
They are expressed in a relatively natural language way, requiring users to do some string parsing.
The questions are designed to be solvable in a few minutes, but get progressively more difficult as the game progresses.
The game randomizes the input to questions to avoid players hard-coding answers.
A question might be something like:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;What is the sum of the numbers: 1, 5, 12, 13&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In order to keep the feel of the original Extreme Startup game I’ve borrowed two key algorithms:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The sliding window algorithm for question selection&lt;/li&gt;
&lt;li&gt;The linear adjustment algorithm for question rate&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The sliding window algorithm is fairly simple:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;typescript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; windowEnd&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; round &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; windowStart&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Math.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;max&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(windowEnd &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The algorithm produces this sequence of windows:&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Round&lt;/th&gt;&lt;th&gt;Start&lt;/th&gt;&lt;th&gt;End&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;This has some key benefits:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The game starts slowly the first three rounds, gradually increasing from two to four questions in the window.
After that it slides the window by two questions each round to not overwhelm the players and allow them to keep earning points.&lt;/li&gt;
&lt;li&gt;Players who lost out on a question in earlier rounds can still catch up in later rounds as the window slides.
Later rounds are worth more points, so it’s possible to catch up even if you’re behind.&lt;/li&gt;
&lt;li&gt;The game master can adjust the difficulty of the game by how fast each round progresses.
If the players are struggling, the game master can slow down the window progression to give them more time to catch up.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;question-rate-and-difficulty&quot;&gt;Question rate and difficulty&lt;/h3&gt;
&lt;p&gt;The game loop for each player essentially consist of the following steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Game server immediately schedules the next question (to avoid drift)&lt;/li&gt;
&lt;li&gt;Game server picks a random question from the window and gets random input&lt;/li&gt;
&lt;li&gt;Game server sends the question to the player&lt;/li&gt;
&lt;li&gt;The player responds with the answer, if they have one&lt;/li&gt;
&lt;li&gt;Based on the answer, or the lack thereof, the game server assigns points to the player&lt;/li&gt;
&lt;li&gt;Game server adjusts the question interval based on the player’s answer&lt;/li&gt;
&lt;li&gt;When the next question is due, it starts from step 1.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The question interval uses the linear adjustment algorithm from the original game.
It adjusts the question rate by 100 ms deltas based on the player’s last answer.
Successful players will see their question rate increase, while struggling players will see it decrease.&lt;/p&gt;
&lt;p&gt;A more advanced technique looking at score averages were tried out, but did not feel as good during simulation.
The linear adjustment technique is simple and works well in practice.
I might revisit the question interval adjustments in the future, but for now it’s good enough.&lt;/p&gt;
&lt;h2 id=&quot;the-technology&quot;&gt;The technology&lt;/h2&gt;
&lt;p&gt;The Code Monkey Clash game is implemented from scratch as I did not want to just fork the original Extreme Startup game.
My objective was to learn more about some of the new frontend technologies I had not used before.
The game is essentially a clone of the original game, but with a new set of questions and a new implementation.&lt;/p&gt;
&lt;h3 id=&quot;bun---the-all-in-one-javascript-runtime--toolkit&quot;&gt;Bun - The all-in-one JavaScript runtime &amp;amp; toolkit&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://bun.sh&quot;&gt;Bun&lt;/a&gt; is ”[…] an all-in-one JavaScript runtime &amp;amp; toolkit designed for speed, complete with a bundler, test runner, and Node.js-compatible package manager.”
As Bun supports TypeScript out of the box, it seemed like a nice fit for the project as I would not have to compile the code or use ts-node to run my code.
It also supports bundling and minification which meant I could write client side code in TypeScript as well without having to worry about the build pipeline.&lt;/p&gt;
&lt;h3 id=&quot;elysiajs---ergonomic-framework-for-humans&quot;&gt;ElysiaJS - Ergonomic Framework for Humans&lt;/h3&gt;
&lt;p&gt;As I was writing this project in TypeScript I wanted to use a web framework that supports TypeScript well.
I had read a bit about &lt;a href=&quot;https://elysiajs.com/&quot;&gt;ElysiaJS&lt;/a&gt; and decided to give it a try.
ElysiaJS’ tagline is “Ergonomic Framework for Humans” and is developed by a single developer in Thailand.
The framework somewhat resembles Express and Koa, but focuses on performance and TypeScript inference to improve developer experience.
Where other frameworks often require manual typing for middleware and request data, Elysia infer types from your schemas and middleware handlers.
If you structure the code correctly you don’t have to typecast or manually type almost anything, which is a pretty big win!
As an added benefit you also get a type-safe HTTP client library for free, but I did not use it in this project as I’m returning HTML.&lt;/p&gt;
&lt;h3 id=&quot;htmx---high-power-tools-for-html&quot;&gt;HTMX - High power tools for HTML&lt;/h3&gt;
&lt;p&gt;I’ve often used the RESTish backend paired with a single page application frontend pattern when developing web applications in the past.
In the event that I needed server side rendering for SEO I would often use Next.js or my own custom React server side rendering.
This works well for most applications, and having React at your fingertips in the client allows for some pretty dynamic applications.&lt;/p&gt;
&lt;p&gt;For this project I wanted to get away from the heavy client side frameworks and try a more traditional server side rendered application.
I still needed some client side interactivity for the game, but I wanted to keep it as simple as possible.
A buddy of mine was talking about &lt;a href=&quot;https://htmx.org/&quot;&gt;HTMX&lt;/a&gt; and how simple it made the mental model for web development.
I decided to give it a try and I must say I’m pretty impressed.
HTMX allows you to add dynamic behavior to your HTML with attributes.
Your server only needs to return HTML or HTML fragments, and you mostly don’t need to write any JavaScript.
Instead HTMX uses the &lt;code&gt;hx-*&lt;/code&gt; attributes to add behavior to your HTML elements, making server requests and updating the DOM as needed.&lt;/p&gt;

&lt;img src=&quot;https://snorre.io/_astro/signup.DidDBpdY_Z28FVwv.webp&quot; srcset=&quot;https://snorre.io/_astro/signup.DidDBpdY_aUtAx.webp 400w, https://snorre.io/_astro/signup.DidDBpdY_1EJoCL.webp 800w, https://snorre.io/_astro/signup.DidDBpdY_7ylo2.webp 1200w, https://snorre.io/_astro/signup.DidDBpdY_Z28FVwv.webp 1366w&quot; alt=&quot;Screenshot of the Code Monkey Clash signup form&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1366&quot; height=&quot;1239&quot;&gt;
&lt;p&gt;In the signup form above, only the signup form HTML with errors would be returned in the event of a validation error.
HTMX fetches the HTML fragment and replaces the form on the page with the new form without the browser having to do a page load.
This makes the application feel very snappy and responsive, while keeping most of the logic on the server side.&lt;/p&gt;
&lt;h3 id=&quot;tailwind-css-and-daisyui&quot;&gt;Tailwind CSS and DaisyUI&lt;/h3&gt;
&lt;p&gt;I’ve been using &lt;a href=&quot;https://tailwindcss.com/&quot;&gt;Tailwind CSS&lt;/a&gt; for a while now and I really like it.
It’s a utility-first CSS framework that allows you to build complex designs without having to write custom CSS.
The utility-first approach feels like functional programming.
Each utility composes neatly with other utilities, and you can build complex designs by combining simple utilities.
I’ve not had this feeling with any other way of writing CSS, and I’m really happy with the results I’ve gotten using Tailwind CSS in the past.&lt;/p&gt;
&lt;p&gt;For this project I decided to try &lt;a href=&quot;https://daisyui.com/&quot;&gt;DaisyUI&lt;/a&gt;, a plugin for Tailwind CSS that adds components and adjusts the default theme.
By using DaisyUI I was able to quickly build a nice looking UI without having to write much custom CSS for buttons, and other native HTML elements.
While I have been wary of using component libraries like Bootstrap, DaisyUI seems to fit well with the utility first approach of Tailwind CSS.
Where you lack components you can quickly build them with Tailwind CSS utilities.
And because DaisyUI is built on top of Tailwind CSS it is easily customizable with Tailwind’s own configuration system.&lt;/p&gt;
&lt;h3 id=&quot;server-sent-events-for-live-updates&quot;&gt;Server sent events for live updates&lt;/h3&gt;
&lt;p&gt;The nature of the game means that events happen pretty much all the time.
Players sign up, questions are sent, answers are received, and points are assigned.
I wanted to surface this liveness to the game master and players so that they do not have to refresh the page to see updates.
In theory one could poll the backend for changes and have it re-render HTMX fragments.
This however would have been unecessarily chatty, not to mention taxing on the server!&lt;/p&gt;
&lt;p&gt;Instead I decided to use &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events&quot;&gt;Server Sent Events&lt;/a&gt; to push updates to the clients.
Fortunately for me there is a &lt;a href=&quot;https://v1.htmx.org/extensions/server-sent-events/&quot;&gt;server sent events extension&lt;/a&gt; for HTMX that adds support.
This allowed me to push updates to the clients as they happen, and the clients would update the UI as needed.
As with everything else in HTMX, with SSE the HTML (fragments) are rendered on the server, and in this case pushed to the client as events.
This way when a player joins, the relevant player table row is rendered server side, then pushed to the client’s admin dashboard via the SSE connection.
On the client HTMX inserts the row into the table and the UI is updated accordingly!&lt;/p&gt;
&lt;p&gt;For the Chart.js based scoreboard I needed to hack a bit as HTMX does not support updating the chart data directly.
Instead I added a hidden span that initiates the SSE connection for the chart data, and then added client side logic to listen for that event.&lt;/p&gt;
&lt;p&gt;On the server side:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Use a hidden element to swap the chart data, don&amp;#39;t actually swap json into the DOM&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  class&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;hidden&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  sse-swap&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;`player-chart-${&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;player&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;nick&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  hx-swap&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;none&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then on the client:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;typescript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// On SSE messages do DOM-manipulation where necessary&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;htmx.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;htmx:sseMessage&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, (&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;evt&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;	// If the event is a player-chart event, update the chart with the new data&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;	if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;		evt &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;instanceof&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; CustomEvent&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;		evt.detail.type.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;startsWith&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;player-chart-&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;	) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;		const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; nick&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; evt.detail.type.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;player-chart-&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;		const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; data&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; JSON&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;parse&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(evt.detail.data);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;		const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; dataset&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; chart.data.datasets.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; d.label &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; nick);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;		if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (dataset) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;			dataset.data.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;push&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(data);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;			chart.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;update&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;		}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In the end I was able to push updates to the clients as they happened, and the clients would update the UI as needed.
The scoreboard looks really nice and Chart.js animates new data points as they are added.
All in all it was a bit tricky to figure out how to do this, but once I got it working it was pretty neat!&lt;/p&gt;

&lt;img src=&quot;https://snorre.io/_astro/scoreboard.B8Xl4rKU_Z1WNjXD.webp&quot; srcset=&quot;https://snorre.io/_astro/scoreboard.B8Xl4rKU_Z2hOjbE.webp 400w, https://snorre.io/_astro/scoreboard.B8Xl4rKU_Z26Kwhb.webp 800w, https://snorre.io/_astro/scoreboard.B8Xl4rKU_WvLuK.webp 1200w, https://snorre.io/_astro/scoreboard.B8Xl4rKU_Z1WNjXD.webp 1729w&quot; alt=&quot;Screenshot of the Code Monkey Clash scoreboard&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;1729&quot; height=&quot;1306&quot;&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I’ve had a lot of fun building Code Monkey Clash.
The Bun, ElysiaJS, HTMX and Tailwind CSS stack has been a joy to work with.
If you’re familiar with TypeScript and JSX and want to build a server rendered application you can consider a similar stack.
You might want to consider using a more supported framework than ElysiaJS, but it’s been a fun experiment.
In terms of developer experience I’ve been pretty happy with this stack.
I’ve also had a lot of fun coming up with questions for the game, and I’m looking forward to hosting a workshop with my colleagues.&lt;/p&gt;</content:encoded></item><item><title>Demystifying Docker – A cursory look beneath the magic</title><link>https://snorre.io/blog/2026-02-21-demystifying-docker/</link><guid isPermaLink="true">https://snorre.io/blog/2026-02-21-demystifying-docker/</guid><description>What containers and images really are: layers, namespaces, cgroups, and what happens when you run docker run.</description><pubDate>Sat, 21 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;This post features interactive content not available in RSS. &lt;a href=&quot;https://snorre.io/blog/2026-02-21-demystifying-docker&quot;&gt;View on snorre.io&lt;/a&gt; for the full experience.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Containers might feel like lightweight VMs, but under the hood they’re something else entirely.
Images, Containers, Volumes, networks and more are all built on top of fundamental concepts in Linux.
This post attempts to demystify these concepts and reveal what is actually going on under the hood.&lt;/p&gt;
&lt;h2 id=&quot;containers-vs-vms&quot;&gt;Containers vs VMs&lt;/h2&gt;
&lt;p&gt;If your frame of reference is virtual machines, it’s tempting to think of containers the same way—but they’re not.
The diagram below illustrates the difference between the two concepts.&lt;/p&gt;
&lt;div class=&quot;docker-diagram vm-vs-container docker-diagram my-6 grid grid-cols-1 md:grid-cols-2 gap-6&quot;&gt; &lt;div class=&quot;flex flex-col gap-2&quot;&gt; &lt;h3 class=&quot;text-sm font-semibold text-stone-700 dark:text-stone-300&quot;&gt;Virtual machines&lt;/h3&gt; &lt;div class=&quot;flex flex-col gap-1.5 justify-end&quot;&gt; &lt;div class=&quot;rounded-lg border px-3 py-2 text-xs font-medium text-stone-700 dark:text-stone-300 border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800&quot;&gt; &lt;span&gt;Physical hardware&lt;/span&gt; &lt;div class=&quot;text-[10px] uppercase tracking-wider text-stone-500 dark:text-stone-400 mt-0.5&quot;&gt;CPU, RAM, disk, NIC&lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;rounded-lg border px-3 py-2 text-xs font-medium text-stone-700 dark:text-stone-300 border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800&quot;&gt; &lt;span&gt;Host OS / Kernel&lt;/span&gt; &lt;div class=&quot;text-[10px] uppercase tracking-wider text-stone-500 dark:text-stone-400 mt-0.5&quot;&gt;Host kernel&lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;rounded-lg border px-3 py-2 text-xs font-medium text-stone-700 dark:text-stone-300 border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800&quot;&gt; &lt;span&gt;Hypervisor&lt;/span&gt; &lt;div class=&quot;text-[10px] uppercase tracking-wider text-stone-500 dark:text-stone-400 mt-0.5&quot;&gt;Virtualises hardware for guests (each VM)&lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-wrap gap-2 justify-start&quot;&gt; &lt;div class=&quot;flex flex-col gap-1 min-w-28 flex-1&quot;&gt; &lt;div class=&quot;rounded-lg border p-0 overflow-hidden border-violet-400 dark:border-violet-500 bg-violet-50/80 dark:bg-violet-950/30&quot;&gt; &lt;div class=&quot;px-3 py-1.5 border-b border-violet-200 dark:border-violet-800&quot;&gt; &lt;span&gt;VM 1&lt;/span&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col&quot;&gt; &lt;div class=&quot;px-3 py-1.5 text-[10px] border-b border-violet-200/80 dark:border-violet-800/80 last:border-b-0 &quot;&gt; Virtual hardware &lt;/div&gt;&lt;div class=&quot;px-3 py-1.5 text-[10px] border-b border-violet-200/80 dark:border-violet-800/80 last:border-b-0 &quot;&gt; OS / kernel &lt;/div&gt;&lt;div class=&quot;px-3 py-1.5 text-[10px] border-b border-violet-200/80 dark:border-violet-800/80 last:border-b-0 font-medium bg-violet-100/50 dark:bg-violet-900/20&quot;&gt; Processes / apps &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col gap-1 min-w-28 flex-1&quot;&gt; &lt;div class=&quot;rounded-lg border p-0 overflow-hidden border-violet-400 dark:border-violet-500 bg-violet-50/80 dark:bg-violet-950/30&quot;&gt; &lt;div class=&quot;px-3 py-1.5 border-b border-violet-200 dark:border-violet-800&quot;&gt; &lt;span&gt;VM 2&lt;/span&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col&quot;&gt; &lt;div class=&quot;px-3 py-1.5 text-[10px] border-b border-violet-200/80 dark:border-violet-800/80 last:border-b-0 &quot;&gt; Virtual hardware &lt;/div&gt;&lt;div class=&quot;px-3 py-1.5 text-[10px] border-b border-violet-200/80 dark:border-violet-800/80 last:border-b-0 &quot;&gt; OS / kernel &lt;/div&gt;&lt;div class=&quot;px-3 py-1.5 text-[10px] border-b border-violet-200/80 dark:border-violet-800/80 last:border-b-0 font-medium bg-violet-100/50 dark:bg-violet-900/20&quot;&gt; Processes / apps &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col gap-1 min-w-28 flex-1&quot;&gt; &lt;div class=&quot;rounded-lg border p-0 overflow-hidden border-violet-400 dark:border-violet-500 bg-violet-50/80 dark:bg-violet-950/30&quot;&gt; &lt;div class=&quot;px-3 py-1.5 border-b border-violet-200 dark:border-violet-800&quot;&gt; &lt;span&gt;VM 3&lt;/span&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col&quot;&gt; &lt;div class=&quot;px-3 py-1.5 text-[10px] border-b border-violet-200/80 dark:border-violet-800/80 last:border-b-0 &quot;&gt; Virtual hardware &lt;/div&gt;&lt;div class=&quot;px-3 py-1.5 text-[10px] border-b border-violet-200/80 dark:border-violet-800/80 last:border-b-0 &quot;&gt; OS / kernel &lt;/div&gt;&lt;div class=&quot;px-3 py-1.5 text-[10px] border-b border-violet-200/80 dark:border-violet-800/80 last:border-b-0 font-medium bg-violet-100/50 dark:bg-violet-900/20&quot;&gt; Processes / apps &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col gap-2&quot;&gt; &lt;h3 class=&quot;text-sm font-semibold text-stone-700 dark:text-stone-300&quot;&gt;Containers (Docker)&lt;/h3&gt; &lt;div class=&quot;flex flex-col gap-1.5 justify-end&quot;&gt; &lt;div class=&quot;rounded-lg border px-3 py-2 text-xs font-medium text-stone-700 dark:text-stone-300 border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800&quot;&gt; &lt;span&gt;Physical hardware&lt;/span&gt; &lt;div class=&quot;text-[10px] uppercase tracking-wider text-stone-500 dark:text-stone-400 mt-0.5&quot;&gt;CPU, RAM, disk, NIC&lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;rounded-lg border px-3 py-2 text-xs font-medium text-stone-700 dark:text-stone-300 border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800&quot;&gt; &lt;span&gt;Host OS / Kernel&lt;/span&gt; &lt;div class=&quot;text-[10px] uppercase tracking-wider text-stone-500 dark:text-stone-400 mt-0.5&quot;&gt;Single shared kernel&lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;rounded-lg border px-3 py-2 text-xs font-medium text-stone-700 dark:text-stone-300 border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800&quot;&gt; &lt;span&gt;Docker&lt;/span&gt; &lt;div class=&quot;text-[10px] uppercase tracking-wider text-stone-500 dark:text-stone-400 mt-0.5&quot;&gt;Daemon, image layers, runtime&lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-wrap gap-2 justify-start&quot;&gt; &lt;div class=&quot;flex flex-col gap-1 min-w-28 flex-1&quot;&gt; &lt;div class=&quot;rounded-lg border px-3 py-2 text-xs font-medium text-stone-700 dark:text-stone-300 border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800 border-emerald-500 dark:border-emerald-400 bg-emerald-50/80 dark:bg-emerald-950/30&quot;&gt; &lt;span&gt;Container A&lt;/span&gt; &lt;div class=&quot;flex flex-col gap-0.5 mt-1.5 text-[10px] text-stone-600 dark:text-stone-400&quot;&gt; &lt;div&gt;Process(es)&lt;/div&gt;&lt;div&gt;Filesystem isolation&lt;/div&gt;&lt;div&gt;Network isolation&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col gap-1 min-w-28 flex-1&quot;&gt; &lt;div class=&quot;rounded-lg border px-3 py-2 text-xs font-medium text-stone-700 dark:text-stone-300 border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800 border-emerald-500 dark:border-emerald-400 bg-emerald-50/80 dark:bg-emerald-950/30&quot;&gt; &lt;span&gt;Container B&lt;/span&gt; &lt;div class=&quot;flex flex-col gap-0.5 mt-1.5 text-[10px] text-stone-600 dark:text-stone-400&quot;&gt; &lt;div&gt;Process(es)&lt;/div&gt;&lt;div&gt;Filesystem isolation&lt;/div&gt;&lt;div&gt;Network isolation&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class=&quot;flex flex-col gap-1 min-w-28 flex-1&quot;&gt; &lt;div class=&quot;rounded-lg border px-3 py-2 text-xs font-medium text-stone-700 dark:text-stone-300 border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800 border-emerald-500 dark:border-emerald-400 bg-emerald-50/80 dark:bg-emerald-950/30&quot;&gt; &lt;span&gt;Container C&lt;/span&gt; &lt;div class=&quot;flex flex-col gap-0.5 mt-1.5 text-[10px] text-stone-600 dark:text-stone-400&quot;&gt; &lt;div&gt;Process(es)&lt;/div&gt;&lt;div&gt;Filesystem isolation&lt;/div&gt;&lt;div&gt;Network isolation&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;
&lt;p&gt;&lt;em&gt;Left:&lt;/em&gt; each VM gets emulated hardware and a full guest OS.
&lt;em&gt;Right:&lt;/em&gt; one kernel; containers are “jailed” processes with isolated filesystem, namespaces, and cgroups—no separate OS.&lt;/p&gt;
&lt;h3 id=&quot;virtual-machines&quot;&gt;Virtual machines&lt;/h3&gt;
&lt;p&gt;Physical hardware runs a host kernel and OS, plus a hypervisor that emulates hardware for each guest VM.
Each VM runs its own kernel and OS and is isolated from the host and from other VMs.
From the guest OS’s perspective it’s running on hardware; it doesn’t know about the hypervisor or the host unless the hypervisor is configured to expose the host machine.&lt;/p&gt;
&lt;h3 id=&quot;containers&quot;&gt;Containers&lt;/h3&gt;
&lt;p&gt;A container is just a regular Linux process (possibly with child processes) running on the host kernel, sharing the same OS.
Isolation comes from kernel primitives like namespaces, cgroups, chroot, and capabilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Namespaces&lt;/strong&gt; — pid (own process tree only), mount (own view of the filesystem), user (e.g. root-in-container → unprivileged on host), network (own interfaces, no visibility of host/others).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cgroups&lt;/strong&gt; — limits and accounting for CPU, memory, disk I/O, and network.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;chroot&lt;/strong&gt; — the process’s root is a chosen directory; it cannot see or reach paths outside that subtree.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Capabilities&lt;/strong&gt; — fine-grained privileges instead of full root.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Together these form a sandbox.
The process is separated from the rest of the host without a separate kernel or OS.&lt;/p&gt;
&lt;h3 id=&quot;linux-filesystem-and-permissions-primer&quot;&gt;Linux filesystem and permissions (primer)&lt;/h3&gt;
&lt;p&gt;Before we look at chroot and volume mounts, here is a quick primer on how Linux organizes files.&lt;/p&gt;
&lt;div class=&quot;docker-diagram my-6&quot;&gt; &lt;div class=&quot;text-[10px] font-medium uppercase tracking-wider text-stone-500 dark:text-stone-400 mb-2&quot;&gt;Linux filesystem and permissions (primer)&lt;/div&gt; &lt;p class=&quot;text-xs text-stone-500 dark:text-stone-400 mb-3&quot;&gt;
Paths start at &lt;code class=&quot;font-mono text-[11px]&quot;&gt;/&lt;/code&gt; (root). Each file has permissions (owner/group/others) and ownership. Docker uses this when setting up container roots and volume mounts.
&lt;/p&gt; &lt;div class=&quot;rounded-lg border p-4 border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800&quot;&gt; &lt;div class=&quot;mb-2&quot;&gt; &lt;div class=&quot;text-[10px] font-medium uppercase tracking-wider text-stone-500 dark:text-stone-400 mb-0&quot;&gt;File tree with permissions&lt;/div&gt; &lt;div class=&quot;text-[9px] font-mono text-stone-400 dark:text-stone-500 mt-0.5&quot;&gt;d rwx r-x r-x = dir owner group others&lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col gap-1&quot;&gt; &lt;div class=&quot;flex items-center justify-between gap-3 rounded-md border px-3 py-2 border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800&quot;&gt; &lt;div&gt; &lt;div class=&quot;font-mono font-medium text-stone-600 dark:text-stone-300&quot;&gt;/&lt;/div&gt; &lt;div class=&quot;text-[10px] text-stone-500 dark:text-stone-400 font-mono&quot;&gt; root of filesystem &lt;/div&gt; &lt;/div&gt; &lt;code class=&quot;shrink-0 rounded border px-2 py-1 text-[10px] font-mono text-amber-800 dark:text-amber-200 border-amber-400/50 dark:border-amber-500/40 bg-amber-50/50 dark:bg-amber-950/30&quot;&gt;drwxr-xr-x root:root&lt;/code&gt; &lt;/div&gt; &lt;div class=&quot;flex items-start gap-1 pl-2 ml-1 border-l-2 border-stone-200 dark:border-stone-700&quot;&gt; &lt;div class=&quot;flex flex-col gap-1 flex-1 min-w-0 -ml-px&quot;&gt; &lt;div class=&quot;flex items-center justify-between gap-3 rounded-md border px-3 py-1.5 border-stone-200 dark:border-stone-700 bg-stone-50 dark:bg-stone-800/80&quot;&gt; &lt;div&gt; &lt;div class=&quot;font-mono text-stone-600 dark:text-stone-300&quot;&gt;home/&lt;/div&gt; &lt;div class=&quot;text-[10px] text-stone-500 dark:text-stone-400 font-mono&quot;&gt; user home dirs &lt;/div&gt; &lt;/div&gt; &lt;code class=&quot;shrink-0 rounded border px-2 py-0.5 text-[10px] font-mono text-stone-600 dark:text-stone-400 border-amber-400/50 dark:border-amber-500/40 bg-amber-50/50 dark:bg-amber-950/30&quot;&gt;drwxr-xr-x root:root&lt;/code&gt; &lt;/div&gt; &lt;div class=&quot;flex items-center justify-between gap-3 rounded-md border px-3 py-1.5 border-stone-200 dark:border-stone-700 bg-stone-50 dark:bg-stone-800/80&quot;&gt; &lt;div&gt; &lt;div class=&quot;font-mono text-stone-600 dark:text-stone-300&quot;&gt;etc/&lt;/div&gt; &lt;div class=&quot;text-[10px] text-stone-500 dark:text-stone-400 font-mono&quot;&gt; config files &lt;/div&gt; &lt;/div&gt; &lt;code class=&quot;shrink-0 rounded border px-2 py-0.5 text-[10px] font-mono text-stone-600 dark:text-stone-400 border-amber-400/50 dark:border-amber-500/40 bg-amber-50/50 dark:bg-amber-950/30&quot;&gt;drwxr-xr-x root:root&lt;/code&gt; &lt;/div&gt; &lt;div class=&quot;flex items-center justify-between gap-3 rounded-md border px-3 py-1.5 border-stone-200 dark:border-stone-700 bg-stone-50 dark:bg-stone-800/80&quot;&gt; &lt;div&gt; &lt;div class=&quot;font-mono text-stone-600 dark:text-stone-300&quot;&gt;var/&lt;/div&gt; &lt;div class=&quot;text-[10px] text-stone-500 dark:text-stone-400 font-mono&quot;&gt; variable data (logs, caches) &lt;/div&gt; &lt;/div&gt; &lt;code class=&quot;shrink-0 rounded border px-2 py-0.5 text-[10px] font-mono text-stone-600 dark:text-stone-400 border-amber-400/50 dark:border-amber-500/40 bg-amber-50/50 dark:bg-amber-950/30&quot;&gt;drwxr-xr-x root:root&lt;/code&gt; &lt;/div&gt; &lt;div class=&quot;flex items-center justify-between gap-3 rounded-md border px-3 py-1.5 border-stone-200 dark:border-stone-700 bg-stone-50 dark:bg-stone-800/80&quot;&gt; &lt;div&gt; &lt;div class=&quot;font-mono text-stone-600 dark:text-stone-300&quot;&gt;tmp/&lt;/div&gt; &lt;div class=&quot;text-[10px] text-stone-500 dark:text-stone-400 font-mono&quot;&gt; temporary, world-writable &lt;/div&gt; &lt;/div&gt; &lt;code class=&quot;shrink-0 rounded border px-2 py-0.5 text-[10px] font-mono text-stone-600 dark:text-stone-400 border-amber-400/50 dark:border-amber-500/40 bg-amber-50/50 dark:bg-amber-950/30&quot;&gt;drwxrwxrwx root:root&lt;/code&gt; &lt;/div&gt; &lt;div class=&quot;flex items-center justify-between gap-3 rounded-md border px-3 py-1.5 border-emerald-500 dark:border-emerald-400 bg-emerald-50/80 dark:bg-emerald-950/30&quot;&gt; &lt;div&gt; &lt;div class=&quot;font-mono font-medium text-emerald-800 dark:text-emerald-200&quot;&gt;app/&lt;/div&gt; &lt;div class=&quot;text-[10px] text-stone-500 dark:text-stone-400 font-mono&quot;&gt; your app (common in containers) &lt;/div&gt; &lt;/div&gt; &lt;code class=&quot;shrink-0 rounded border px-2 py-0.5 text-[10px] font-mono text-stone-600 dark:text-stone-400 border-amber-400/50 dark:border-amber-500/40 bg-amber-50/50 dark:bg-amber-950/30&quot;&gt;drwxr-xr-x myappuser:myappuser&lt;/code&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;mt-2 text-xs text-stone-500 dark:text-stone-400&quot;&gt; &lt;span class=&quot;font-semibold text-stone-700 dark:text-stone-300&quot;&gt;r&lt;/span&gt; read
&lt;span class=&quot;font-semibold text-stone-700 dark:text-stone-300 ml-2&quot;&gt;w&lt;/span&gt; write
&lt;span class=&quot;font-semibold text-stone-700 dark:text-stone-300 ml-2&quot;&gt;x&lt;/span&gt; execute (dirs: enter)
&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;
&lt;h3 id=&quot;linux-mounts-primer&quot;&gt;Linux mounts (primer)&lt;/h3&gt;
&lt;p&gt;The single directory tree is built from many filesystems attached at &lt;em&gt;mount points&lt;/em&gt;.
The kernel keeps a &lt;em&gt;mount table&lt;/em&gt;: what is mounted where.
For example the root directory &lt;code&gt;/&lt;/code&gt; is mounted from one filesystem on disk A, the home directory &lt;code&gt;/home&lt;/code&gt; is mounted from a disk partition on disk B.
Both &lt;code&gt;/etc&lt;/code&gt; and &lt;code&gt;/home&lt;/code&gt; are in the file tree next to each other, but they are actually on different filesystems on different disks.&lt;/p&gt;
&lt;div class=&quot;docker-diagram my-6&quot;&gt; &lt;div class=&quot;text-[10px] font-medium uppercase tracking-wider text-stone-500 dark:text-stone-400 mb-2&quot;&gt;Linux mounts (primer)&lt;/div&gt; &lt;p class=&quot;text-xs text-stone-500 dark:text-stone-400 mb-3&quot;&gt;
Mount points attach filesystems into the tree; the kernel&apos;s mount table records what is mounted where. Bind mount = same filesystem at another path.
&lt;/p&gt; &lt;div class=&quot;rounded-lg border p-4 border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800&quot;&gt; &lt;div class=&quot;mb-2&quot;&gt; &lt;div class=&quot;text-[10px] font-medium uppercase tracking-wider text-stone-500 dark:text-stone-400 mb-0&quot;&gt;Mount table (conceptual)&lt;/div&gt; &lt;div class=&quot;text-[9px] font-mono text-stone-400 dark:text-stone-500 mt-0.5&quot;&gt;path ← mounted from (source)&lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;flex flex-col gap-1&quot;&gt; &lt;div class=&quot;flex items-center justify-between gap-3 rounded-md border px-3 py-2 border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800&quot;&gt; &lt;div&gt; &lt;div class=&quot;font-mono font-medium text-stone-600 dark:text-stone-300&quot;&gt;/&lt;/div&gt;  &lt;/div&gt; &lt;span class=&quot;text-[10px] font-mono text-stone-500 dark:text-stone-400&quot;&gt;rootfs (e.g. ext4 on sda1)&lt;/span&gt; &lt;/div&gt; &lt;div class=&quot;flex items-center justify-between gap-3 rounded-md border px-3 py-1.5 border-stone-200 dark:border-stone-700 bg-stone-50 dark:bg-stone-800/80&quot;&gt; &lt;div&gt; &lt;div class=&quot;font-mono text-stone-600 dark:text-stone-300&quot;&gt;/home&lt;/div&gt;  &lt;/div&gt; &lt;span class=&quot;text-[10px] font-mono text-stone-500 dark:text-stone-400&quot;&gt;ext4 on sda2&lt;/span&gt; &lt;/div&gt; &lt;div class=&quot;flex items-center justify-between gap-3 rounded-md border px-3 py-1.5 border-stone-200 dark:border-stone-700 bg-stone-50 dark:bg-stone-800/80&quot;&gt; &lt;div&gt; &lt;div class=&quot;font-mono text-stone-600 dark:text-stone-300&quot;&gt;/mnt/backup&lt;/div&gt;  &lt;/div&gt; &lt;span class=&quot;text-[10px] font-mono text-stone-500 dark:text-stone-400&quot;&gt;ext4 on sdb1&lt;/span&gt; &lt;/div&gt; &lt;div class=&quot;flex items-center justify-between gap-3 rounded-md border px-3 py-1.5 border-amber-400/50 dark:border-amber-500/40 bg-amber-50/50 dark:bg-amber-950/30&quot;&gt; &lt;div&gt; &lt;div class=&quot;font-mono text-amber-800 dark:text-amber-200&quot;&gt;/mnt/data&lt;/div&gt;  &lt;/div&gt; &lt;span class=&quot;text-[10px] font-mono text-stone-500 dark:text-stone-400&quot;&gt;bind from /data (same filesystem, other path)&lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;
&lt;h3 id=&quot;chroot--setting-a-new-root-directory-for-a-process&quot;&gt;chroot — setting a new root directory for a process&lt;/h3&gt;
&lt;p&gt;The process’s ”/” is a chosen directory on the host. It cannot see or reach anything above it.&lt;/p&gt;
&lt;div class=&quot;docker-diagram my-6 grid grid-cols-1 md:grid-cols-2 gap-6&quot;&gt; &lt;div&gt; &lt;div class=&quot;text-[10px] font-medium uppercase tracking-wider text-stone-500 dark:text-stone-400 mb-2&quot;&gt;Host filesystem&lt;/div&gt; &lt;div class=&quot;rounded-lg border p-3 border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800 &quot;&gt;  &lt;pre class=&quot;text-xs font-mono overflow-x-auto my-0 text-stone-600 dark:text-stone-400&quot; aria-label=&quot;Host filesystem tree&quot;&gt;/
├── home/
├── etc/
├── var/
│   └── lib/
│       └── docker/
│           └── containers/
│               └── &lt;span class=&quot;text-emerald-600 dark:text-emerald-400 font-medium&quot;&gt;abc123…/  ← container root&lt;/span&gt;
│                   ├── &lt;span class=&quot;text-emerald-600 dark:text-emerald-400 font-medium&quot;&gt;app/&lt;/span&gt;
│                   ├── &lt;span class=&quot;text-emerald-600 dark:text-emerald-400 font-medium&quot;&gt;etc/&lt;/span&gt;
│                   └── &lt;span class=&quot;text-emerald-600 dark:text-emerald-400 font-medium&quot;&gt;bin/&lt;/span&gt;&lt;/pre&gt;  &lt;/div&gt; &lt;/div&gt; &lt;div&gt; &lt;div class=&quot;text-[10px] font-medium uppercase tracking-wider text-stone-500 dark:text-stone-400 mb-2&quot;&gt;What the process sees (inside container)&lt;/div&gt; &lt;div class=&quot;rounded-lg border p-3 border-emerald-500 dark:border-emerald-400 bg-emerald-50/80 dark:bg-emerald-950/30 &quot;&gt;  &lt;pre class=&quot;text-xs font-mono overflow-x-auto my-0 text-emerald-800 dark:text-emerald-200&quot; aria-label=&quot;Container view filesystem tree&quot;&gt;/  ← container root
├── app/
├── etc/
└── bin/&lt;/pre&gt;  &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;
&lt;p&gt;Paths like /etc or /app refer only to files under the container root.&lt;/p&gt;
&lt;h3 id=&quot;mount-namespace--isolated-mount-table&quot;&gt;Mount namespace — isolated mount table&lt;/h3&gt;
&lt;p&gt;The container has its &lt;em&gt;own&lt;/em&gt; mount table: it only sees the mounts Docker set up (overlay for &lt;code&gt;/&lt;/code&gt;, plus any volume mounts). It cannot see or unmount the host’s mounts. Volume mapping is done by adding entries to this isolated table.&lt;/p&gt;
&lt;div class=&quot;docker-diagram my-6 grid grid-cols-1 md:grid-cols-2 gap-6&quot;&gt; &lt;div&gt; &lt;div class=&quot;text-[10px] font-medium uppercase tracking-wider text-stone-500 dark:text-stone-400 mb-2&quot;&gt;Host mount table&lt;/div&gt; &lt;div class=&quot;rounded-lg border p-3 border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800 &quot;&gt;  &lt;div class=&quot;flex flex-col gap-0.5 text-xs font-mono text-stone-600 dark:text-stone-400&quot;&gt; &lt;div&gt;&lt;span class=&quot;font-medium text-stone-700 dark:text-stone-300&quot;&gt;/&lt;/span&gt; — rootfs&lt;/div&gt; &lt;div&gt;&lt;span class=&quot;font-medium text-stone-700 dark:text-stone-300&quot;&gt;/home&lt;/span&gt; — disk partition&lt;/div&gt; &lt;div&gt;&lt;span class=&quot;font-medium text-stone-700 dark:text-stone-300&quot;&gt;/var/lib/docker/...&lt;/span&gt; — volumes, overlay&lt;/div&gt; &lt;/div&gt;  &lt;/div&gt; &lt;/div&gt; &lt;div&gt; &lt;div class=&quot;text-[10px] font-medium uppercase tracking-wider text-stone-500 dark:text-stone-400 mb-2&quot;&gt;Container mount table (isolated)&lt;/div&gt; &lt;div class=&quot;rounded-lg border p-3 border-emerald-500 dark:border-emerald-400 bg-emerald-50/80 dark:bg-emerald-950/30 &quot;&gt;  &lt;div class=&quot;flex flex-col gap-0.5 text-xs font-mono text-emerald-800 dark:text-emerald-200&quot;&gt; &lt;div&gt;&lt;span class=&quot;font-medium&quot;&gt;/&lt;/span&gt; — overlay (image + RW layer)&lt;/div&gt; &lt;div&gt;&lt;span class=&quot;font-medium&quot;&gt;/app/data&lt;/span&gt; — volume (bind or named)&lt;/div&gt; &lt;/div&gt;  &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;
&lt;h3 id=&quot;pid-namespace--isolated-process-tree&quot;&gt;PID namespace — isolated process tree&lt;/h3&gt;
&lt;p&gt;The container only sees its own processes. PID 1 inside the container is a different process on the host; host PIDs are invisible.&lt;/p&gt;
&lt;div class=&quot;docker-diagram my-6 grid grid-cols-1 md:grid-cols-2 gap-6&quot;&gt; &lt;div&gt; &lt;div class=&quot;text-[10px] font-medium uppercase tracking-wider text-stone-500 dark:text-stone-400 mb-2&quot;&gt;Host view&lt;/div&gt; &lt;div class=&quot;rounded-lg border p-3 border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800 &quot;&gt;  &lt;div class=&quot;flex flex-col gap-1&quot;&gt; &lt;div class=&quot;rounded border px-2 py-1 text-xs font-mono border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800 text-stone-700 dark:text-stone-300&quot;&gt;PID 1 — init&lt;/div&gt; &lt;div class=&quot;rounded border px-2 py-1 text-xs font-mono border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800 text-stone-700 dark:text-stone-300 ml-4&quot;&gt;PID 100 — systemd&lt;/div&gt; &lt;div class=&quot;rounded border px-2 py-1 text-xs font-mono border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800 text-stone-700 dark:text-stone-300 ml-8&quot;&gt;PID 200 — sshd&lt;/div&gt; &lt;div class=&quot;rounded border px-2 py-1 text-xs font-mono border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800 text-stone-700 dark:text-stone-300 ml-8&quot;&gt;PID 5000 — dockerd&lt;/div&gt; &lt;div class=&quot;rounded border px-2 py-1 text-xs font-mono border-emerald-500 dark:border-emerald-400 bg-emerald-50/80 dark:bg-emerald-950/30 text-emerald-800 dark:text-emerald-200 ml-12&quot;&gt;PID 5001 — app (container)&lt;/div&gt; &lt;div class=&quot;rounded border px-2 py-1 text-xs font-mono border-emerald-500 dark:border-emerald-400 bg-emerald-50/80 dark:bg-emerald-950/30 text-emerald-800 dark:text-emerald-200 ml-16&quot;&gt;PID 5002 — worker&lt;/div&gt; &lt;div class=&quot;rounded border px-2 py-1 text-xs font-mono border-emerald-500 dark:border-emerald-400 bg-emerald-50/80 dark:bg-emerald-950/30 text-emerald-800 dark:text-emerald-200 ml-16&quot;&gt;PID 5003 — worker&lt;/div&gt; &lt;/div&gt;  &lt;/div&gt; &lt;/div&gt; &lt;div&gt; &lt;div class=&quot;text-[10px] font-medium uppercase tracking-wider text-stone-500 dark:text-stone-400 mb-2&quot;&gt;Container view (same processes)&lt;/div&gt; &lt;div class=&quot;rounded-lg border p-3 border-emerald-500 dark:border-emerald-400 bg-emerald-50/80 dark:bg-emerald-950/30 &quot;&gt;  &lt;div class=&quot;flex flex-col gap-1&quot;&gt; &lt;div class=&quot;rounded border px-2 py-1 text-xs font-mono border-emerald-500 dark:border-emerald-400 bg-emerald-50/80 dark:bg-emerald-950/30 text-emerald-800 dark:text-emerald-200&quot;&gt;PID 1 — app&lt;/div&gt; &lt;div class=&quot;rounded border px-2 py-1 text-xs font-mono border-emerald-500 dark:border-emerald-400 bg-emerald-50/80 dark:bg-emerald-950/30 text-emerald-800 dark:text-emerald-200 ml-4&quot;&gt;PID 2 — worker&lt;/div&gt; &lt;div class=&quot;rounded border px-2 py-1 text-xs font-mono border-emerald-500 dark:border-emerald-400 bg-emerald-50/80 dark:bg-emerald-950/30 text-emerald-800 dark:text-emerald-200 ml-4&quot;&gt;PID 3 — worker&lt;/div&gt; &lt;/div&gt;  &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;
&lt;p&gt;Only these processes exist from the container’s perspective. Host PIDs 1, 100, 5000 are invisible.
This is why you can’t see host processes or kill host processes from inside a container.&lt;/p&gt;
&lt;h2 id=&quot;docker-images&quot;&gt;Docker images&lt;/h2&gt;
&lt;p&gt;Imagine you run the following command to build a new image from a Dockerfile:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;docker&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; build&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -t&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; my-image:1.0.0&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; .&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Docker creates a new image with the name &lt;code&gt;my-image&lt;/code&gt; and tags it with the version &lt;code&gt;1.0.0&lt;/code&gt;.
It uses your &lt;code&gt;Dockerfile&lt;/code&gt; adding the files and folders you’ve specified and running the commands you’ve specified.
A Docker image is not like a VM image, it is not a single file system snapshot with all your files and folders.
Instead it is made up of layers.
Dockerfile instructions like &lt;code&gt;RUN&lt;/code&gt;, &lt;code&gt;COPY&lt;/code&gt;, and &lt;code&gt;ADD&lt;/code&gt; create new layers.
Each layer is a read only archive that contains the files added, modified, or deleted since the previous layer.
Other instructions like &lt;code&gt;ENV&lt;/code&gt;, &lt;code&gt;WORKDIR&lt;/code&gt;, and &lt;code&gt;CMD&lt;/code&gt; do not create new layers, instead they add metadata to the image.&lt;/p&gt;
&lt;div class=&quot;docker-diagram&quot;&gt; &lt;!--xs--&gt; &lt;/div&gt; 
&lt;p&gt;After running the &lt;code&gt;docker build&lt;/code&gt; command you’ve now got an image entry that points at the last layer in the image, &lt;code&gt;sha256:000080bf7f36&lt;/code&gt;.
That layer points to the second last layer in the image (&lt;code&gt;sha256:00006e913295&lt;/code&gt;), and so on until it reaches the first layer in the image (&lt;code&gt;sha256:00007bedb7f3&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Because each layer is immutable and is identified by its instruction input, Docker can efficiently reuse layers when building images.
It is important not to confuse this with the idea of reproducible builds, which is a different concept.
Docker does not guarantee the same Dockerfile instruction will always produce the same output, this is up to the author of the Dockerfile to ensure.
Adding a single COPY or CMD (or changing one line) means every layer &lt;em&gt;before&lt;/em&gt; that line in the image is unchanged.
This allows Docker to reuse the existing layer archive file for those layers and only rebuild the changed layer and any below.&lt;/p&gt;
&lt;div class=&quot;docker-diagram&quot;&gt;  &lt;/div&gt; 
&lt;h2 id=&quot;from-instruction&quot;&gt;FROM instruction&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;FROM&lt;/code&gt; instruction is special in that it essentially links your first image layer to a previous image’s layers.
This way you can easily build on top of existing images like &lt;code&gt;FROM ubuntu:20.04&lt;/code&gt; or &lt;code&gt;FROM node:18-alpine&lt;/code&gt;.
This is also what enables the idea of multi-stage builds, where you define multiple images in a single Dockerfile which inherit from each other.&lt;/p&gt;
&lt;div class=&quot;docker-diagram&quot;&gt;  &lt;/div&gt; 
&lt;h2 id=&quot;starting-a-container-from-an-image&quot;&gt;Starting a container from an image&lt;/h2&gt;
&lt;p&gt;First, the image’s read-only layers are merged into a single coherent read-only filesystem (e.g. via overlay).
This is done by overlaying the layers on top of each other.&lt;/p&gt;
&lt;div class=&quot;docker-diagram&quot;&gt;  &lt;/div&gt; 
&lt;p&gt;When you run a container, Docker then creates a thin read-write layer on top of that, sets up namespaces and cgroups, and runs the entrypoint. The container is that writable layer plus the image layers—ephemeral unless you commit or use volumes.&lt;/p&gt;
&lt;div class=&quot;docker-diagram&quot;&gt;  &lt;/div&gt; 
&lt;h2 id=&quot;volume-mapping-bind-mounts-and-named-volumes&quot;&gt;Volume mapping (bind mounts and named volumes)&lt;/h2&gt;
&lt;p&gt;To persist or share data, you mount a path from the host (or a Docker-managed volume) into the container. Bind mounts and named volumes are implemented by adding mounts in the container’s mount namespace. With &lt;code&gt;-v /host/path:/container/path&lt;/code&gt;, the host directory appears in the container’s mount table at the chosen path; writes in the container go directly to the host path. With &lt;code&gt;-v myvol:/container/path&lt;/code&gt;, Docker creates a directory under e.g. &lt;code&gt;/var/lib/docker/volumes/&lt;/code&gt; and mounts it; the data survives &lt;code&gt;docker rm&lt;/code&gt; and can be shared between containers. Use the animation below to step through no volume, bind mount, and named volume.&lt;/p&gt;
&lt;div class=&quot;docker-diagram&quot;&gt;  &lt;/div&gt;
&lt;h2 id=&quot;user-mapping&quot;&gt;User mapping&lt;/h2&gt;
&lt;p&gt;When a container writes to a bind-mounted host path, files are created with the same UID/GID the process has—and by default that UID is the same inside and outside the container.&lt;/p&gt;
&lt;h3 id=&quot;host-user-list-examples&quot;&gt;Host user list (examples)&lt;/h3&gt;
&lt;p&gt;On the host, each user has a numeric UID. The kernel uses these IDs for file ownership and process privileges. Containers share the same kernel, so the same UID list applies unless you use user namespaces.&lt;/p&gt;
&lt;div class=&quot;docker-diagram my-6&quot;&gt; &lt;div class=&quot;rounded-lg border p-4 border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800&quot;&gt; &lt;div class=&quot;text-[10px] font-mono text-stone-600 dark:text-stone-400 space-y-1&quot;&gt; &lt;div class=&quot;flex gap-4&quot;&gt;&lt;span class=&quot;w-8 shrink-0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;font-medium text-stone-700 dark:text-stone-300&quot;&gt;root&lt;/span&gt;&lt;/div&gt; &lt;div class=&quot;flex gap-4&quot;&gt;&lt;span class=&quot;w-8 shrink-0&quot;&gt;1&lt;/span&gt;daemon&lt;/div&gt; &lt;div class=&quot;flex gap-4&quot;&gt;&lt;span class=&quot;w-8 shrink-0&quot;&gt;…&lt;/span&gt;…&lt;/div&gt; &lt;div class=&quot;flex gap-4&quot;&gt;&lt;span class=&quot;w-8 shrink-0&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;font-medium text-stone-700 dark:text-stone-300&quot;&gt;alice&lt;/span&gt;&lt;/div&gt; &lt;div class=&quot;flex gap-4&quot;&gt;&lt;span class=&quot;w-8 shrink-0&quot;&gt;1001&lt;/span&gt;&lt;span class=&quot;font-medium text-stone-700 dark:text-stone-300&quot;&gt;bob&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;
&lt;h3 id=&quot;no-user-mapping-default&quot;&gt;No user mapping (default)&lt;/h3&gt;
&lt;p&gt;By default, Docker does not use a user namespace. The container process runs with the same &lt;em&gt;numeric&lt;/em&gt; UID on the host as inside the container. What matters is the number: root (0) in the container is root on the host; UID 1000 in the container corresponds to host UID 1000 (e.g. alice). The &lt;em&gt;username&lt;/em&gt; inside the container (from the image’s &lt;code&gt;/etc/passwd&lt;/code&gt;) does not have to match the host—same UID, different names.&lt;/p&gt;
&lt;div class=&quot;docker-diagram my-6&quot;&gt; &lt;div class=&quot;grid grid-cols-1 md:grid-cols-2 gap-4&quot;&gt; &lt;div class=&quot;rounded-lg border p-4 border-emerald-500 dark:border-emerald-400 bg-emerald-50/80 dark:bg-emerald-950/30&quot;&gt; &lt;div class=&quot;text-[10px] font-medium text-emerald-800 dark:text-emerald-200 mb-2&quot;&gt;Container runs as&lt;/div&gt; &lt;div class=&quot;font-mono text-sm&quot;&gt;root (UID 0)&lt;/div&gt; &lt;div class=&quot;mt-2 text-[10px] text-stone-500 dark:text-stone-400&quot;&gt; 
→ Host sees: &lt;span class=&quot;text-emerald-600 dark:text-emerald-400 font-medium&quot;&gt;root (0)&lt;/span&gt;  &lt;/div&gt;  &lt;/div&gt; &lt;div class=&quot;rounded-lg border p-4 border-emerald-500 dark:border-emerald-400 bg-emerald-50/80 dark:bg-emerald-950/30&quot;&gt; &lt;div class=&quot;text-[10px] font-medium text-emerald-800 dark:text-emerald-200 mb-2&quot;&gt;Container runs as&lt;/div&gt; &lt;div class=&quot;font-mono text-sm&quot;&gt;appuser (UID 1000)&lt;/div&gt; &lt;div class=&quot;mt-2 text-[10px] text-stone-500 dark:text-stone-400&quot;&gt; 
→ Host sees: &lt;span class=&quot;text-emerald-600 dark:text-emerald-400 font-medium&quot;&gt;alice (1000)&lt;/span&gt;  &lt;/div&gt; &lt;div class=&quot;mt-1.5 text-[10px] text-amber-700 dark:text-amber-300 font-medium&quot;&gt;Same UID; names can differ (container &amp;quot;appuser&amp;quot; ≠ host &amp;quot;alice&amp;quot;).&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;
&lt;h3 id=&quot;with-user-mapping-user-namespace&quot;&gt;With user mapping (user namespace)&lt;/h3&gt;
&lt;p&gt;You can enable user namespace remapping (e.g. &lt;code&gt;--userns-remap=alice&lt;/code&gt; in the daemon, or &lt;code&gt;/etc/subuid&lt;/code&gt; and &lt;code&gt;/etc/subgid&lt;/code&gt;). Container UIDs are then mapped into a range on the host (e.g. 100000–165535). Root inside the container is no longer root on the host.&lt;/p&gt;
&lt;div class=&quot;docker-diagram my-6&quot;&gt; &lt;div class=&quot;rounded-lg border p-4 border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800 mb-4&quot;&gt; &lt;div class=&quot;text-[10px] font-medium text-stone-600 dark:text-stone-400 mb-2&quot;&gt;Example mapping (e.g. alice:100000:65536 in /etc/subuid)&lt;/div&gt; &lt;div class=&quot;text-[10px] font-mono text-stone-600 dark:text-stone-400 space-y-1&quot;&gt; &lt;div class=&quot;flex gap-4&quot;&gt;Container &lt;span class=&quot;font-medium&quot;&gt;0&lt;/span&gt; → Host &lt;span class=&quot;font-medium text-stone-700 dark:text-stone-300&quot;&gt;100000&lt;/span&gt;&lt;/div&gt; &lt;div class=&quot;flex gap-4&quot;&gt;Container &lt;span class=&quot;font-medium&quot;&gt;1&lt;/span&gt; → Host 100001&lt;/div&gt; &lt;div class=&quot;flex gap-4&quot;&gt;Container &lt;span class=&quot;font-medium&quot;&gt;1000&lt;/span&gt; → Host &lt;span class=&quot;font-medium text-stone-700 dark:text-stone-300&quot;&gt;101000&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;grid grid-cols-1 md:grid-cols-2 gap-4&quot;&gt; &lt;div class=&quot;rounded-lg border p-4 border-emerald-500 dark:border-emerald-400 bg-emerald-50/80 dark:bg-emerald-950/30&quot;&gt; &lt;div class=&quot;text-[10px] font-medium text-emerald-800 dark:text-emerald-200 mb-2&quot;&gt;Container runs as&lt;/div&gt; &lt;div class=&quot;font-mono text-sm&quot;&gt;root (UID 0)&lt;/div&gt; &lt;div class=&quot;mt-2 text-[10px] text-stone-500 dark:text-stone-400&quot;&gt; 
→ Host sees: &lt;span class=&quot;text-emerald-600 dark:text-emerald-400 font-medium&quot;&gt;100000&lt;/span&gt; (unprivileged)
 &lt;/div&gt;  &lt;/div&gt; &lt;div class=&quot;rounded-lg border p-4 border-emerald-500 dark:border-emerald-400 bg-emerald-50/80 dark:bg-emerald-950/30&quot;&gt; &lt;div class=&quot;text-[10px] font-medium text-emerald-800 dark:text-emerald-200 mb-2&quot;&gt;Container runs as&lt;/div&gt; &lt;div class=&quot;font-mono text-sm&quot;&gt;UID 1000&lt;/div&gt; &lt;div class=&quot;mt-2 text-[10px] text-stone-500 dark:text-stone-400&quot;&gt; 
→ Host sees: &lt;span class=&quot;text-emerald-600 dark:text-emerald-400 font-medium&quot;&gt;101000&lt;/span&gt;  &lt;/div&gt;  &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;
&lt;h2 id=&quot;docker-networking&quot;&gt;Docker networking&lt;/h2&gt;
&lt;p&gt;Network isolation for containers comes from the &lt;strong&gt;network namespace&lt;/strong&gt;: the container gets its own view of the network stack. We start with what that stack looks like on Linux, then how Docker uses it—port mapping, container-to-container, and host mode.&lt;/p&gt;
&lt;h3 id=&quot;the-linux-network-stack-primer&quot;&gt;The Linux network stack (primer)&lt;/h3&gt;
&lt;p&gt;A typical Linux host has physical interfaces (e.g. eth0), a loopback device (lo), and the kernel’s networking stack (routing, iptables/nftables, etc.). Docker’s networking builds on these same building blocks.&lt;/p&gt;
&lt;div class=&quot;docker-diagram my-6&quot;&gt; &lt;div class=&quot;text-[10px] font-medium uppercase tracking-wider text-stone-500 dark:text-stone-400 mb-2&quot;&gt;Linux network stack — how the pieces fit together&lt;/div&gt; &lt;p class=&quot;text-xs text-stone-500 dark:text-stone-400 mb-3&quot;&gt;
A packet flows through the stack. Incoming: interface → routing → iptables → app. Outgoing: app → (DNS for hostnames) → routing → iptables → interface.
&lt;/p&gt; &lt;div class=&quot;py-4&quot;&gt; &lt;svg viewBox=&quot;0 0 400 320&quot; class=&quot;w-full h-auto max-w-md mx-auto&quot; preserveAspectRatio=&quot;xMidYMid meet&quot; aria-label=&quot;Linux network stack flow: interfaces, routing, iptables, DNS, application&quot;&gt; &lt;defs&gt; &lt;marker id=&quot;arrowhead&quot; markerWidth=&quot;10&quot; markerHeight=&quot;7&quot; refX=&quot;9&quot; refY=&quot;3.5&quot; orient=&quot;auto&quot;&gt; &lt;polygon points=&quot;0 0, 10 3.5, 0 7&quot; class=&quot;fill-stone-400 dark:fill-stone-500&quot;&gt;&lt;/polygon&gt; &lt;/marker&gt; &lt;filter id=&quot;stack-shadow&quot;&gt; &lt;feDropShadow dx=&quot;0&quot; dy=&quot;1&quot; stdDeviation=&quot;2&quot; flood-opacity=&quot;0.12&quot;&gt;&lt;/feDropShadow&gt; &lt;/filter&gt; &lt;/defs&gt;  &lt;rect x=&quot;120&quot; y=&quot;20&quot; width=&quot;160&quot; height=&quot;44&quot; rx=&quot;8&quot; class=&quot;fill-emerald-50 dark:fill-emerald-950/30 stroke-emerald-400/60 dark:stroke-emerald-500/40 stroke&quot; filter=&quot;url(#stack-shadow)&quot;&gt;&lt;/rect&gt; &lt;text x=&quot;200&quot; y=&quot;42&quot; text-anchor=&quot;middle&quot; class=&quot;fill-emerald-800 dark:fill-emerald-200 text-xs font-medium&quot;&gt;Application&lt;/text&gt; &lt;text x=&quot;200&quot; y=&quot;55&quot; text-anchor=&quot;middle&quot; class=&quot;fill-stone-500 dark:fill-stone-400 text-[10px] font-mono&quot;&gt;binds :8080, sockets&lt;/text&gt;  &lt;line x1=&quot;200&quot; y1=&quot;64&quot; x2=&quot;200&quot; y2=&quot;88&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.5&quot; marker-end=&quot;url(#arrowhead)&quot; class=&quot;text-stone-400 dark:text-stone-500&quot;&gt;&lt;/line&gt;  &lt;rect x=&quot;120&quot; y=&quot;92&quot; width=&quot;160&quot; height=&quot;40&quot; rx=&quot;8&quot; class=&quot;fill-stone-100 dark:fill-stone-800 stroke-stone-300 dark:stroke-stone-600 stroke&quot; filter=&quot;url(#stack-shadow)&quot;&gt;&lt;/rect&gt; &lt;text x=&quot;200&quot; y=&quot;112&quot; text-anchor=&quot;middle&quot; class=&quot;fill-stone-700 dark:fill-stone-300 text-xs font-medium&quot;&gt;iptables / nftables&lt;/text&gt; &lt;text x=&quot;200&quot; y=&quot;125&quot; text-anchor=&quot;middle&quot; class=&quot;fill-stone-500 dark:fill-stone-400 text-[10px] font-mono&quot;&gt;NAT, filter&lt;/text&gt;  &lt;line x1=&quot;200&quot; y1=&quot;132&quot; x2=&quot;200&quot; y2=&quot;156&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.5&quot; marker-end=&quot;url(#arrowhead)&quot; class=&quot;text-stone-400 dark:text-stone-500&quot;&gt;&lt;/line&gt;  &lt;rect x=&quot;120&quot; y=&quot;160&quot; width=&quot;160&quot; height=&quot;40&quot; rx=&quot;8&quot; class=&quot;fill-stone-100 dark:fill-stone-800 stroke-stone-300 dark:stroke-stone-600 stroke&quot; filter=&quot;url(#stack-shadow)&quot;&gt;&lt;/rect&gt; &lt;text x=&quot;200&quot; y=&quot;180&quot; text-anchor=&quot;middle&quot; class=&quot;fill-stone-700 dark:fill-stone-300 text-xs font-medium&quot;&gt;Routing&lt;/text&gt; &lt;text x=&quot;200&quot; y=&quot;193&quot; text-anchor=&quot;middle&quot; class=&quot;fill-stone-500 dark:fill-stone-400 text-[10px] font-mono&quot;&gt;which interface?&lt;/text&gt;  &lt;line x1=&quot;200&quot; y1=&quot;200&quot; x2=&quot;140&quot; y2=&quot;240&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.5&quot; marker-end=&quot;url(#arrowhead)&quot; class=&quot;text-stone-400 dark:text-stone-500&quot;&gt;&lt;/line&gt; &lt;line x1=&quot;200&quot; y1=&quot;200&quot; x2=&quot;260&quot; y2=&quot;240&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.5&quot; marker-end=&quot;url(#arrowhead)&quot; class=&quot;text-stone-400 dark:text-stone-500&quot;&gt;&lt;/line&gt;  &lt;rect x=&quot;60&quot; y=&quot;244&quot; width=&quot;100&quot; height=&quot;36&quot; rx=&quot;8&quot; class=&quot;fill-stone-100 dark:fill-stone-800 stroke-stone-400 dark:stroke-stone-500 stroke&quot; filter=&quot;url(#stack-shadow)&quot;&gt;&lt;/rect&gt; &lt;text x=&quot;110&quot; y=&quot;262&quot; text-anchor=&quot;middle&quot; class=&quot;fill-stone-700 dark:fill-stone-300 text-xs font-mono font-medium&quot;&gt;eth0&lt;/text&gt; &lt;text x=&quot;110&quot; y=&quot;274&quot; text-anchor=&quot;middle&quot; class=&quot;fill-stone-500 dark:fill-stone-400 text-[10px] font-mono&quot;&gt;192.168.1.10&lt;/text&gt;  &lt;rect x=&quot;240&quot; y=&quot;244&quot; width=&quot;100&quot; height=&quot;36&quot; rx=&quot;8&quot; class=&quot;fill-stone-100 dark:fill-stone-800 stroke-stone-400 dark:stroke-stone-500 stroke&quot; filter=&quot;url(#stack-shadow)&quot;&gt;&lt;/rect&gt; &lt;text x=&quot;290&quot; y=&quot;262&quot; text-anchor=&quot;middle&quot; class=&quot;fill-stone-700 dark:fill-stone-300 text-xs font-mono font-medium&quot;&gt;lo&lt;/text&gt; &lt;text x=&quot;290&quot; y=&quot;274&quot; text-anchor=&quot;middle&quot; class=&quot;fill-stone-500 dark:fill-stone-400 text-[10px] font-mono&quot;&gt;127.0.0.1&lt;/text&gt;  &lt;path d=&quot;M 280 42 L 330 42 L 330 100 L 318 100&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1&quot; stroke-dasharray=&quot;4 3&quot; class=&quot;text-amber-500 dark:text-amber-400&quot;&gt;&lt;/path&gt; &lt;polygon points=&quot;318 100, 326 96, 326 104&quot; class=&quot;fill-amber-500 dark:fill-amber-400&quot;&gt;&lt;/polygon&gt; &lt;rect x=&quot;318&quot; y=&quot;88&quot; width=&quot;72&quot; height=&quot;32&quot; rx=&quot;6&quot; class=&quot;fill-amber-50 dark:fill-amber-950/30 stroke-amber-400/60 dark:stroke-amber-500/40 stroke&quot; filter=&quot;url(#stack-shadow)&quot;&gt;&lt;/rect&gt; &lt;text x=&quot;354&quot; y=&quot;105&quot; text-anchor=&quot;middle&quot; class=&quot;fill-amber-800 dark:fill-amber-200 text-[10px] font-medium&quot;&gt;DNS&lt;/text&gt; &lt;text x=&quot;354&quot; y=&quot;116&quot; text-anchor=&quot;middle&quot; class=&quot;fill-stone-500 dark:fill-stone-400 text-[9px] font-mono&quot;&gt;&quot;postgres&quot; → IP&lt;/text&gt; &lt;/svg&gt; &lt;/div&gt; &lt;/div&gt;
&lt;h3 id=&quot;network-namespace--own-interfaces-only&quot;&gt;Network namespace — own interfaces only&lt;/h3&gt;
&lt;p&gt;The container has its own network stack: loopback and a virtual interface (e.g. veth) paired with the host. It cannot see the host’s physical NICs or other containers’ interfaces.&lt;/p&gt;
&lt;div class=&quot;docker-diagram my-6 grid grid-cols-1 md:grid-cols-2 gap-6&quot;&gt; &lt;div&gt; &lt;div class=&quot;text-[10px] font-medium uppercase tracking-wider text-stone-500 dark:text-stone-400 mb-2&quot;&gt;Host&lt;/div&gt; &lt;div class=&quot;rounded-lg border p-3 border-stone-300 dark:border-stone-600 bg-stone-100 dark:bg-stone-800 &quot;&gt;  &lt;div class=&quot;space-y-1.5&quot;&gt; &lt;div class=&quot;rounded border px-2 py-1 text-xs font-mono inline-block&quot;&gt;eth0 (physical)&lt;/div&gt; &lt;div class=&quot;rounded border px-2 py-1 text-xs font-mono inline-block&quot;&gt;docker0 (bridge)&lt;/div&gt; &lt;div class=&quot;text-xs text-stone-500 dark:text-stone-400&quot;&gt;veth0abc ←→ container&apos;s eth0&lt;/div&gt; &lt;/div&gt;  &lt;/div&gt; &lt;/div&gt; &lt;div&gt; &lt;div class=&quot;text-[10px] font-medium uppercase tracking-wider text-stone-500 dark:text-stone-400 mb-2&quot;&gt;Container&lt;/div&gt; &lt;div class=&quot;rounded-lg border p-3 border-emerald-500 dark:border-emerald-400 bg-emerald-50/80 dark:bg-emerald-950/30 &quot;&gt;  &lt;div class=&quot;space-y-1.5&quot;&gt; &lt;div class=&quot;rounded border px-2 py-1 text-xs font-mono inline-block border-emerald-500 dark:border-emerald-400&quot;&gt;lo (127.0.0.1)&lt;/div&gt; &lt;div class=&quot;rounded border px-2 py-1 text-xs font-mono inline-block border-emerald-500 dark:border-emerald-400&quot;&gt;eth0 (e.g. 172.17.0.2)&lt;/div&gt; &lt;/div&gt;  &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;
&lt;p&gt;Only these interfaces exist. No visibility of host eth0 or other containers.&lt;/p&gt;
&lt;h3 id=&quot;port-mapping-host-8080--container-8080&quot;&gt;Port mapping (host :8080 → container :8080)&lt;/h3&gt;
&lt;p&gt;When you publish a port with &lt;code&gt;-p 8080:8080&lt;/code&gt;, the host listens on 8080 and uses iptables/nftables DNAT to rewrite the destination to the container’s IP and port. The packet is then forwarded via docker0 and the veth pair into the container. Use the animation below to step through the path.&lt;/p&gt;
&lt;div class=&quot;docker-diagram&quot;&gt;  &lt;/div&gt; 
&lt;h3 id=&quot;networking-between-containers&quot;&gt;Networking between containers&lt;/h3&gt;
&lt;p&gt;When two containers are on the same user-defined network (e.g. &lt;code&gt;docker network create mynet&lt;/code&gt;), they each get a veth pair onto the same bridge on the host. The bridge is outside the containers—it lives in the host network namespace. Packets between containers go from one container’s eth0 through its veth to the bridge, then through the other veth to the other container’s eth0; no NAT, just bridge forwarding. On user-defined networks, Docker runs an embedded DNS so containers can reach each other by name (e.g. “ping app” resolves “app” to that container’s IP). The animation below shows the layout (which interface belongs to which container, and that the bridge is on the host), then DNS resolution, then the packet path.&lt;/p&gt;
&lt;div class=&quot;docker-diagram&quot;&gt;  &lt;/div&gt;
&lt;h3 id=&quot;host-network-mode&quot;&gt;Host network mode&lt;/h3&gt;
&lt;p&gt;With &lt;code&gt;--network host&lt;/code&gt;, the container does not get its own network namespace. It uses the host’s network stack directly—no veth pair, no bridge, no NAT. The container sees the host’s eth0 and lo; if it listens on port 8080, it binds to the host’s 8080. Port mapping (&lt;code&gt;-p&lt;/code&gt;) is ignored. This mode is useful when you need maximum performance or direct access to host network interfaces (e.g. for certain monitoring or high-throughput workloads), but it removes network isolation.&lt;/p&gt;
&lt;div class=&quot;docker-diagram&quot;&gt;  &lt;/div&gt;
&lt;h2 id=&quot;why-docker-the-daemon-and-the-engine&quot;&gt;Why Docker? The daemon and the engine&lt;/h2&gt;
&lt;p&gt;If containers are “just” processes plus namespaces, cgroups, and chroot, why do we need Docker at all? You could in principle create a container by hand: use &lt;code&gt;unshare&lt;/code&gt; to create new namespaces, &lt;code&gt;chroot&lt;/code&gt; into a rootfs, configure cgroups, and run your process. The reason Docker exists is that it &lt;strong&gt;orchestrates&lt;/strong&gt; all of these primitives and adds a consistent workflow around images, networking, and storage.&lt;/p&gt;
&lt;p&gt;When you run &lt;code&gt;docker run&lt;/code&gt; or &lt;code&gt;docker build&lt;/code&gt;, the &lt;code&gt;docker&lt;/code&gt; command-line tool does not perform the work itself. It talks to the &lt;strong&gt;Docker daemon&lt;/strong&gt; (often called the Docker engine)—a long-running process (e.g. &lt;code&gt;dockerd&lt;/code&gt;) that runs on the host, usually with root privileges. The daemon is responsible for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Images and layers&lt;/strong&gt; — Storing and resolving image manifests and layer blobs, building images from Dockerfiles (running each instruction in a temporary container, committing layers), and managing the content-addressable layer store (e.g. under &lt;code&gt;/var/lib/docker&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Containers&lt;/strong&gt; — Creating the container’s filesystem (e.g. overlay merge of image layers plus a writable layer), creating the namespaces (pid, mount, network, user, etc.), applying cgroup limits, setting up the rootfs and mounts, and starting the entrypoint process. On shutdown, it cleans up namespaces, mounts, and the writable layer unless you use volumes or commit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Networking&lt;/strong&gt; — Creating and attaching virtual interfaces (veth pairs), bridges (e.g. &lt;code&gt;docker0&lt;/code&gt;), and iptables/nftables rules for port publishing and container-to-container communication. It also runs an embedded DNS for user-defined networks so containers can resolve each other by name.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Volumes&lt;/strong&gt; — Creating and mounting bind mounts or named volumes into the container’s mount namespace and managing volume lifecycle.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So the &lt;strong&gt;engine&lt;/strong&gt; is the daemon plus the low-level plumbing (containerd, runc, etc., depending on your Docker version).
The CLI is a client; the daemon is the single place that owns image and container state and ties all the Linux primitives together.
Without it, you’d be manually creating namespaces, mounting overlays, and wiring cgroups and networks every time.
Docker gives you a single API, a portable image format, layer caching, and declarative Dockerfiles so you don’t have to script those steps yourself.&lt;/p&gt;
&lt;h3 id=&quot;alternatives&quot;&gt;Alternatives&lt;/h3&gt;
&lt;p&gt;Because containers are just processes plus Linux primitives, the same workflow — images, layers, run, build — can be implemented by different tools.
&lt;a href=&quot;https://podman.io/&quot;&gt;Podman&lt;/a&gt; is a prominent alternative.
It is daemonless: there is no long-running &lt;code&gt;podman&lt;/code&gt; process.
When you run &lt;code&gt;podman run&lt;/code&gt; or &lt;code&gt;podman build&lt;/code&gt;, the Podman CLI (or its subprocesses) sets up namespaces, overlay mounts, and cgroups directly and then exits or hands the container to a short-lived conmon process for monitoring.
That avoids a single root-owned daemon and can make it easier to run containers as an unprivileged user (rootless mode).
Podman is CLI-compatible with Docker for many commands (&lt;code&gt;podman run&lt;/code&gt; accepts the same flags as &lt;code&gt;docker run&lt;/code&gt;), and it uses the same image format (OCI) and can pull from the same registries.
So existing Docker images and Dockerfiles usually work as-is with Podman.&lt;/p&gt;
&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;
&lt;p&gt;Containers are not lightweight VMs.
They are processes on the host kernel, isolated by &lt;strong&gt;namespaces&lt;/strong&gt; (pid, mount, user, network), &lt;strong&gt;cgroups&lt;/strong&gt;, &lt;strong&gt;chroot&lt;/strong&gt;, and &lt;strong&gt;capabilities&lt;/strong&gt;.
The &lt;strong&gt;Docker daemon&lt;/strong&gt; (engine) is what ties it all together.
The CLI talks to the daemon, which owns images, layers, container lifecycle, networking, and volumes.
It orchestrates the Linux primitives so you get a single API and portable image format instead of scripting namespaces and mounts by hand.
An image is a stack of read-only layers; a running container adds a thin writable layer and uses overlay (or similar) to present a single filesystem.
Volumes and port mapping are just bind mounts and NAT rules in the container’s mount and network namespaces.
Once you see Docker as a tidy wrapper around these Linux primitives, the “magic” becomes predictable: same kernel, same building blocks, just a different view of the system.&lt;/p&gt;</content:encoded></item><item><title>A likes feature with Cloudflare D1 and Astro API endpoints</title><link>https://snorre.io/blog/2024-05-06-likes-cloudflare-d1-astro-api-endpoints/</link><guid isPermaLink="true">https://snorre.io/blog/2024-05-06-likes-cloudflare-d1-astro-api-endpoints/</guid><description>Privacy-friendly likes without registration: Cloudflare D1, Drizzle ORM, and Astro API endpoints.</description><pubDate>Mon, 06 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve always had a goal of keeping Snorre.io a privacy-friendly website.
However, this privacy-friendly approach does come with a trade-off.
It means that I have a limited amount of insight into what content people enjoy the most.
This is because I prioritize your privacy over extensive data collection.
Cloudflare provides some statistics for my domain, including the number of unique visitors the domain receives per day, week, and month.
If Cloudflare is to be believed, at the time of this writing I’ve had about 3.3 thousand unique visitors in the past month.
I have yet to learn which blog posts they read.
To help me gauge the interest in my content, I needed some form of like system, so why not build one?&lt;/p&gt;
&lt;h2 id=&quot;the-likes-feature&quot;&gt;The likes feature&lt;/h2&gt;
&lt;p&gt;You have undoubtedly seen them, the claps emoji adorning a blog post on Medium.com or a heart or thumbs up on some blog.
The number of likes indicates how many people might have found the content worth reading, watching, or listening to.
I had a few requirements I wanted to satisfy when building my like system. It should:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;be easy to use, but not in your face&lt;/li&gt;
&lt;li&gt;not require user registration or collection of personal information&lt;/li&gt;
&lt;li&gt;prevent like-spam&lt;/li&gt;
&lt;li&gt;allow liking blog posts, recordings, beer recipes, etc&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Based on these requirements, it was clear I needed some form of backend capable of storing the likes.
Each like would be associated with a collection (e.g. blog), slug (content identifier), and session ID.
The session ID would tie a like to a user session, but not allow for the identification of a specific user.&lt;/p&gt;
&lt;h2 id=&quot;implementation&quot;&gt;Implementation&lt;/h2&gt;
&lt;p&gt;As I am already running on Cloudflare, I found &lt;a href=&quot;https://blog.cloudflare.com/building-d1-a-global-database&quot;&gt;Cloudflare D1&lt;/a&gt; a compelling tool to persist the likes.
D1 is a global “serverless” relational database built by Cloudflare.
It uses the SQLite dialect for its SQL queries making it easy to use SQLite for local development.
They automatically handle creating read replicas based on your Cloudflare Pages or Worker DB usage.
This way, reads should always be reasonably fast, while writes must be routed to the write instance.&lt;/p&gt;
&lt;p&gt;D1 has a low-level client library for JavaScript, but I wanted something to help me with migrations and query building.
I’m normally very skeptical of ORMs, but I recalled having read good things about &lt;a href=&quot;https://orm.drizzle.team/&quot;&gt;Drizzle&lt;/a&gt; in the past.
Their tag-line really resonated with me:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Drizzle is a good friend who’s there for you when necessary and doesn’t bother when you need some space.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is exactly what I want from an ORM.
It should not force me to do things in a specific way, but it should provide me helpers when I need them.&lt;/p&gt;
&lt;h3 id=&quot;db-schema&quot;&gt;DB schema&lt;/h3&gt;
&lt;p&gt;Given the aforementioned requirements, I ended up with a simple schema for the likes table:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;typescript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { primaryKey, sqliteTable, text, unique } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &apos;drizzle-orm/sqlite-core&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; likes&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; sqliteTable&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;likes&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  sessionId: &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;session_id&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  collection: &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;collection&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  slug: &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;slug&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;likes&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    pk: &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;primaryKey&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({ columns: [likes.sessionId, likes.collection, likes.slug] }),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This schema defines a &lt;code&gt;likes&lt;/code&gt; table with three columns:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sessionId&lt;/code&gt; is a string that identifies a user session&lt;/li&gt;
&lt;li&gt;&lt;code&gt;collection&lt;/code&gt; is a string that identifies the collection of content the like is associated with&lt;/li&gt;
&lt;li&gt;&lt;code&gt;slug&lt;/code&gt; is a string that identifies the specific content the like is associated with&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The primary key is a composite key of all the columns to ensure that a user can only like a piece of content once per session.
I could have added a &lt;code&gt;createdAt&lt;/code&gt; column to store the time of the like, but this seems unnecessary for now.&lt;/p&gt;
&lt;h3 id=&quot;api-endpoints&quot;&gt;API endpoints&lt;/h3&gt;
&lt;p&gt;I did not want to change away from static site generation, so I needed a way to interact with the D1 database from my Astro site.
Fortunately Astro provides a concept called &lt;code&gt;adapters&lt;/code&gt; that allows you to run Astro in various serverless environments.
The &lt;a href=&quot;https://docs.astro.build/en/guides/integrations-guide/cloudflare/&quot;&gt;Cloudflare adapter&lt;/a&gt; is a perfect fit for my use case.
It supports a &lt;a href=&quot;https://docs.astro.build/en/basics/rendering-modes/#on-demand-rendered&quot;&gt;hybrid&lt;/a&gt; rendering approach where the site is mostly static, but with some on-demand rendered pages.
I could then keep my site as is, but add a few dynamic API page routes to handle likes!&lt;/p&gt;
&lt;p&gt;I ended up with a &lt;code&gt;/pages/api/likes.ts&lt;/code&gt; file with a &lt;code&gt;GET&lt;/code&gt; and &lt;code&gt;POST&lt;/code&gt; function to fetch and add/remove likes.&lt;/p&gt;
&lt;p&gt;The post function loads the JSON body from the request.
Then checks if the user has a session ID cookie, and creates one if not.
Finally, it toggles the like for the given slug and collection based on the session ID before returning a success response.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;typescript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; async&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; POST&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;context&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; APIContext&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; runtime&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; context.locals.runtime;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; d1&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; runtime.env.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;DB&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; db&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; drizzle&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(d1, { schema: { likes } });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;slug&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;collection&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; context.request.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;json&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;    slug&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;?:&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; string&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;    collection&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;?:&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; string&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;context.cookies.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;has&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;sessionId&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    context.cookies.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;sessionId&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, crypto.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;randomUUID&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(), {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      httpOnly: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      secure: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      sameSite: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;strict&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      path: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      maxAge: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;60&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 60&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 24&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; *&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 365&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; sessionId&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; context.cookies.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;sessionId&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.value;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; liked&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ((&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      await&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt; db&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({ likes: &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(likes)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;where&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;eq&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(likes.slug, slug), &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;eq&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(likes.sessionId, sessionId)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ).&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;at&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)?.likes &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (liked) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    await&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; db&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;delete&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(likes)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;where&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;        and&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;          eq&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(likes.slug, slug),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;          eq&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(likes.collection, collection),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;          eq&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(likes.sessionId, sessionId),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        ),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;execute&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    await&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; db.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;insert&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(likes).&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({ slug, sessionId, collection }).&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;execute&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Response&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;JSON&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;stringify&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({ success: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; }));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The GET functions is no more complex.
It fetches the slug and collection from the query parameters.
Then it fetches the session ID from the cookie.
It then queries the database for the number of likes and whether the user has liked the content before returning the result.
Because we don’t want to unecessarily add cookies to a user’s browser, we never set a cookie for a data retrieval request.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;typescript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; async&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; GET&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;context&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; APIContext&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; runtime&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; context.locals.runtime;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; d1&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; runtime.env.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;DB&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; db&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; drizzle&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(d1, { schema: { likes } });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // Get slug and collection from query parameters&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; slug&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; context.url.searchParams.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;slug&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; collection&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; context.url.searchParams.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;collection&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;  // Get the session ID from the cookie&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; sessionId&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; context.cookies.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;sessionId&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)?.value;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  console.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Slug&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, slug, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Collection&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, collection);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; likesCount&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    await&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt; db&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({ likes: &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(likes)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;where&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;eq&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(likes.slug, slug), &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;eq&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(likes.collection, collection)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ).&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;at&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)?.likes;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; liked &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (sessionId) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; sessionCount&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;        await&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; db&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({ likes: &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(likes)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;where&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;eq&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(likes.slug, slug), &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;eq&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(likes.sessionId, sessionId)))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      ).&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;at&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)?.likes &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    liked &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; sessionCount &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Response&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;JSON&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;stringify&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({ likes: likesCount, liked }), {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    headers: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;Content-Type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;client-side-like-counter-and-button&quot;&gt;Client side Like counter and button&lt;/h3&gt;
&lt;p&gt;To allow dynamic rendering of likes count and allowing users to like content I added a simple &lt;code&gt;Likes&lt;/code&gt; component to my Astro setup.
Astro supports client side rendering using something called &lt;a href=&quot;https://docs.astro.build/en/concepts/islands/&quot;&gt;Astro Islands&lt;/a&gt;.
I decided to use &lt;a href=&quot;https://www.solidjs.com/&quot;&gt;Solid.js&lt;/a&gt; for the client side rendering as I was already using it for my comments system.
The whole implementation ended up being 35 lines of code:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;typescript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Component, createResource } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;solid-js&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { VsHeart, VsHeartFilled } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;solid-icons/vs&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;interface&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; LikesProps&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;  slug&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; string&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;  collection&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; string&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; fetchLikes&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; async&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; ({&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;slug&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;collection&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; LikesProps&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; res&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; fetch&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;`/api/likes?slug=${&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;slug&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}&amp;#x26;collection=${&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;collection&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; data&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; res.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;json&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;likes&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; number&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;liked&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; boolean&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; data;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Likes&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Component&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;LikesProps&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt; &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; ({ &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;slug&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;collection&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; }) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;likes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, { &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;refetch&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; }] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; createResource&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(() &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; ({ slug, collection }), fetchLikes);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;div class&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;flex flex-row gap-2 text-stone-800 dark:text-stone-400&quot;&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;likes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()?.likes}&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;button&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        class&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        onClick&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; () &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;          await&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; fetch&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;`/api/likes`&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;            method&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;POST&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;            body&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;JSON&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;stringify&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({ slug, collection }),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;          });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;          refetch&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        }}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      &gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        {&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;likes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()?.&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;liked&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; ? &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;VsHeartFilled&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; /&gt; : &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;VsHeart&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; /&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;      &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The whole thing ends up compiling to less than 20 kilobytes of JavaScript (compressed) having a negligible impact on the performance of the site.&lt;/p&gt;
&lt;h3 id=&quot;tooling-local-environment-and-cloudflare&quot;&gt;Tooling, local environment and Cloudflare&lt;/h3&gt;
&lt;p&gt;To develop and test this locally was a bit more complex than I had hoped.
Fortunately I found an &lt;a href=&quot;https://kevinkipp.com/blog/going-full-stack-on-astro-with-cloudflare-d1-and-drizzle/&quot;&gt;informative blog post&lt;/a&gt; by Kevin Kipp that helped me get started.
Note that the Astro config for the Cloudflare adapter has changed since Kevin’s post.
As of Astro Cloudflare adapter version &lt;code&gt;10.2.5&lt;/code&gt; you want to use the following configuration:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;typescript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  adapter&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;cloudflare&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    platformProxy: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      enabled: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      persist: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Feel free to check out my &lt;a href=&quot;https://github.com/snorremd/snorreio&quot;&gt;source code&lt;/a&gt; for a complete example of how to use Cloudflare D1 with Astro.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I now have a simple like system that allows me to gauge the interest in my content.
It is privacy-friendly, easy to use, and does not require user registration.
The like system is a bit vulnerable to abuse as you can like content multiple times by clearing your cookies.
But this is a risk I’m willing to take to keep the site privacy-friendly.&lt;/p&gt;
&lt;p&gt;If you enjoyed this blog post, please give it a like!&lt;/p&gt;</content:encoded></item><item><title>Musical recordings on Snorre.io</title><link>https://snorre.io/blog/2024-04-14-music-recordings-on-snorre-io/</link><guid isPermaLink="true">https://snorre.io/blog/2024-04-14-music-recordings-on-snorre-io/</guid><description>Recording synth improvisations with Focusrite Scarlett and GarageBand, and sharing music on Soundcloud and this site.</description><pubDate>Sun, 14 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I bought a &lt;a href=&quot;https://focusrite.com/products/scarlett-4i4&quot;&gt;Focusrite Scarlett 4i4 Gen 4&lt;/a&gt; as a christmas present to myself last year.
I’ve always enjoyed improvising music on my synthesizers, but I never really had the gear to record something properly.
The situation changed with the Scarlett soundcard and I’ve now started to practice recording my synths with the GarageBand app.&lt;/p&gt;
&lt;p&gt;So far I’ve &lt;a href=&quot;https://snorre.io/music/2024-04-13-contemplations-synth-neon-scapes&quot;&gt;recorded one track&lt;/a&gt; and I’m planning to record more in the future.
I do not predict a regular schedule or high musical talent for these recordings, but I hope you’ll enjoy them anyway.
If you find them interesting or enjoyable, please let me know and I’ll be more motivated to continue recording and sharing them.&lt;/p&gt;
&lt;h2 id=&quot;distributing-my-music&quot;&gt;Distributing my music&lt;/h2&gt;
&lt;p&gt;For now I’ll be sharing my music on two platforms: Soundcloud and my own website.
Soundcloud gives me a good platform to get a bit of reach and allows people to provide feedback.
It is however not privacy friendly and I want to make sure that my music is available to everyone!
That’s why I’ll also be sharing my music on my own website as well.&lt;/p&gt;
&lt;p&gt;Currently I’m using the standard HTML5 audio player to allow playback of the music straight from my website.
There are also download links to the music files in various formats if you want to listen to them in a player of your choice.
The web audio player will select the best format for your device if you choose to play the music directly from my website.&lt;/p&gt;
&lt;p&gt;I convert my recordings to the various formats using a simple ffmpeg script.
I’ve added a function to my shell configuration to make this easier.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;zsh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# Convert wav files to other audio formats&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; convert_audio&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    local&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; input&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;$1&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    local&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; basename&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;${&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;input&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    ffmpeg&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -i&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;$input&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;           -c:a&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; flac&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;${&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;basename&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}.flac&quot;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;           -c:a&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; libmp3lame&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -qscale:a&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;${&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;basename&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}.mp3&quot;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;           -c:a&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; libvorbis&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -qscale:a&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 4&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;${&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;basename&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}.ogg&quot;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;           -c:a&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; aac&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -b:a&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; 192k&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;${&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;basename&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}.m4a&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# Create an alias to the function&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; convert_audio&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;convert_audio&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Including an audio player on a web page is not so complicated.
My code for achieving this with Astro boils down to the following:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;audio&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; controls&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;w-full&quot;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; preload&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;none&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  {track.downloads.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;download&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;source&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;        src&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;`/downloads/music/${&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;download&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;url&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;        type&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;`audio/${&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;download&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}`&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  })}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;audio&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here I’m using the &lt;code&gt;track&lt;/code&gt; object that I pass to the page to render the audio player.
A track can contain multiple downloads, essentially different formats of the same recording.
For each track I include a &lt;code&gt;source&lt;/code&gt; element with the URL to the music file and the format of the file.
The browser will then select the best format to play based on the capabilities of the device, neat!&lt;/p&gt;
&lt;p&gt;In the future I might build a Soundcloud like player for my website using [Wavesurfer][&lt;a href=&quot;https://wavesurfer.xyz/&quot;&gt;https://wavesurfer.xyz/&lt;/a&gt;].
This is a bigger task and I’ll have to see if I can find the time to do it.
For now I hope you enjoy the music as it is provided.&lt;/p&gt;
&lt;h2 id=&quot;licensing&quot;&gt;Licensing&lt;/h2&gt;
&lt;p&gt;See &lt;a href=&quot;https://snorre.io/privacy#music&quot;&gt;privacy and license page&lt;/a&gt; for information on how you can use my music.
I’ve used the &lt;a href=&quot;https://creativecommons.org/licenses/by/4.0/&quot;&gt;Creative Commons Attribution 4.0 International License&lt;/a&gt; for the other content on my website.
For my music I’ve chosen to keep the rights to myself, but I’m happy to share it with you for personal listening.
All songs can be listened to and downloaded for free on my website in various open DRM-free formats.
If you want to use my music in any other way please &lt;a href=&quot;https://snorre.io/contact&quot;&gt;contact me&lt;/a&gt; and we can discuss it further.&lt;/p&gt;</content:encoded></item></channel></rss>