diff options
| author | Ludovic Courtès <ludo@gnu.org> | 2019-03-29 15:30:39 +0100 |
|---|---|---|
| committer | Ludovic Courtès <ludo@gnu.org> | 2019-03-29 15:36:54 +0100 |
| commit | 182d2051a8039d0e85ebc1942a187539720fd6d2 (patch) | |
| tree | f3f1c19f9da0a364992e34ca922b677a2688eb19 /website | |
| parent | website: graphics: Remove GuixSD logo. (diff) | |
| download | guix-artwork-182d2051a8039d0e85ebc1942a187539720fd6d2.tar.gz | |
website: Add post about Software Heritage.
* website/posts/swh-guix.md: New file.
* website/static/blog/img/software-heritage-logo-title.svg: New file.
Diffstat (limited to 'website')
| -rw-r--r-- | website/posts/swh-guix.md | 264 | ||||
| -rw-r--r-- | website/static/blog/img/software-heritage-logo-title.svg | 602 |
2 files changed, 866 insertions, 0 deletions
diff --git a/website/posts/swh-guix.md b/website/posts/swh-guix.md new file mode 100644 index 0000000..6db2c64 --- /dev/null +++ b/website/posts/swh-guix.md @@ -0,0 +1,264 @@ +title: Connecting reproducible deployment to a long-term source code archive +author: Ludovic Courtès +tags: Reproducible builds, Reproducibility, Research, Scheme API +date: 2019-03-29 15:50:00 +--- + +GNU Guix can be used as a “package manager” to install and upgrade +software packages as is familiar to GNU/Linux users, or as an +environment manager, but it can also provision containers or virtual +machines, and manage the operating system running on your machine. + +One foundation that sets it apart from other tools in these areas is +_reproducibility_. From a high-level view, Guix allows users to +_declare_ complete software environments and instantiate them. They can +share those environments with others, which can replicate them or adapt +them to their needs. This aspect is key to reproducible computational +experiments: scientists need to reproduce software environments before +they can reproduce experimental results, and this is one of the things +we are focusing on in the context of the +[Guix-HPC](https://guix-hpc.bordeaux.inria.fr) effort. At a lower +level, the project, along with others in the [Reproducible +Builds](https://reproducible-builds.org) community, is working to ensure +that software build outputs are [reproducible, +bit-for-bit](https://reproducible-builds.org/docs/definition/). + +Work on reproducibility at all levels has been making great progress. +Guix for instance allows you to [travel back in +time](https://www.gnu.org/software/guix/blog/2018/multi-dimensional-transactions-and-rollbacks-oh-my/). +That Guix can travel back in time _and_ build software reproducibly is a +great step forward. But there’s still an important piece that’s missing +to make this viable: a stable source code archive. This is where +[Software Heritage](https://www.softwareheritage.org) (SWH for short) +comes in. + +# When source code vanishes + +Guix contains thousands of package definitions. Each [package +definition](https://www.gnu.org/software/guix/manual/en/html_node/Defining-Packages.html) +specifies the package’s source code URL and hash, the package’s +dependencies, and its build procedure. Most of the time, the package’s +source code is an archive (a “tarball”) fetched from a web site, but +more and more frequently the source code is a specific revision checked +out directly from a version control system. + +The obvious question, then, is: what happens if the source code URL +becomes unreachable? The whole reproducibility endeavor collapses when +source code disappears. And source code _does_ disappear, or, even +worse, it can be modified in place. At GNU we’re doing a good job of +having stable hosting that keeps releases around “forever”, unchanged +(modulo rare exceptions). But a lot of free software out there is +hosted on personal web pages with a short lifetime and on commercial +hosting services that come and go. + +By default Guix would look up source code by hash in the caches of our +build farms. This comes for free: the [“substitute” +mechanism](https://www.gnu.org/software/guix/manual/en/html_node/Substitutes.html) +extends to all “build artifacts”, including downloads. However, with +limited capacity, our build farms do not keep all the source code of all +the packages for a long time. Thus, one could very well find themself +unable to rebuild a package months or years later, simply because its +source code disappeared or moved to a different location. + +# Connecting to the archive + +It quickly became clear that reproducible builds had “reproducible +source code downloads”, so to speak, as a prerequisite. The Software +Heritage archive is the missing piece that would finally allow us to +reproduce software environments years later in spite of the volatility +of code hosting sites. Software Heritage’s mission is to archive +essentially “all” the source code ever published, including version +control history. Its archive already periodically ingests release +tarballs from the GNU servers, repositories from GitHub, packages from +PyPI, and much more. + + + +We quickly settled on a scheme where Guix would fall back to the +Software Heritage archive whenever it fails to download source code from +its original location. That way, package definitions don’t need to be +modified: they still refer to the original source code URL, but the +downloading machinery transparently goes to Software Heritage when +needed. + +There are two types of source code downloads in Guix: tarball downloads, +and version control checkouts. In the former case, resorting to +Software Heritage is easy: Guix knows the SHA256 hash of the tarball so +it can look it up by hash using [the `/content` endpoint of the +archive’s +interface](https://archive.softwareheritage.org/api/1/content/raw/). + +Fetching version control checkouts is more involved. In this case, the +downloader would first resolve the commit identifier to obtain a +[Software Heritage +revision](https://archive.softwareheritage.org/api/1/revision/). The +actual code for that revision is then fetched through the +[_vault_](https://docs.softwareheritage.org/devel/swh-vault/api.html). + +The vault conveniently allows users to fetch the tarball corresponding +to a revision. However, not all revisions are readily available as +tarballs (understandably), so the vault has an interface that allows you +to request the “_cooking_” of a specific revision. Cooking is +asynchronous and can take some time. Currently, if a revision hasn’t +been cooked yet, the Guix download machinery will request it and wait +until it is available. The process can take some time but will +eventually succeed. + +Success! At this point, we have essentially bridged the gap between the +stable archive that Software Heritage provides and the reproducible +software deployment pipeline of Guix. This code [was +integrated](https://issues.guix.info/issue/33432) in November 2018, +making it the first free software distribution backed by a stable +archive. + +# The challenges ahead + +This milestone was encouraging: we had seemingly achieved our goal, but +we also knew of several shortcomings. First, even though the software +we package is still primarily distributed as tarballs, Software Heritage +keeps relatively few of these tarballs. Software Heritage does ingest +tarballs, notably those found on [the GNU +servers](https://ftp.gnu.org/gnu/), but the primary focus is on +preserving complete version control repositories rather than release +tarballs. + +It is not yet clear to us what to do with plain old tarballs. On one +hand, there are here and cannot be ignored. Furthermore, some provide +artifacts that are not in version control, such as `configure` scripts, +and often enough they are accompanied by a cryptographic signature from +the developers that allows recipients to _authenticate_ the code—an +important piece of information that’s often missing from version control +history. On the other hand, version control tags are increasingly +becoming the mechanism of choice to distribute software releases. It +may be that tags will become the primary mechanism for software release +distribution soon enough. + +Version control tags turn out not to be ideal either, because they’re +mutable and per-repository. Conversely, Git commit identifiers are +unambiguous and repository-independent because they’re essentially +content-addressed, but our package definitions often refer to tags, not +commits, because that makes it clearer that we’re providing an actual +release and not an arbitrary revision (this is another illustration of +[Zooko’s triangle](https://en.wikipedia.org/wiki/Zooko's_triangle)). + +This leads me to another limitation that stems from the mismatch between +the way Guix and Software Heritage compute hashes over version control +checkouts: both compute a hash over a serialized representation of the +directory, but they serialize the directory in a different way (SWH +serializes directories as Git trees, while Guix uses “normalized +archives” or Nars, the format the build daemon manipulates, which is +inherited from Nix.) That prevents Guix from looking up revisions by +content hash. The solution will probably involve changing Guix to +support the same method as Software Heritage, and/or adding Guix’ method +to Software Heritage. + +Having to wait for “cooking” completion can also be problematic. The +Software Heritage team is investigating the possibility to +[automatically cook all version control +tags](https://forge.softwareheritage.org/T1350). That way, relevant +revisions would almost always be readily available through the vault. + +Similarly, we have no guarantee that software provided by Guix is +available in the archive. Our plan is to [extend Software +Heritage](https://forge.softwareheritage.org/T1352) such that it would +periodically archive the source code of software packaged by Guix. + +# Going further + +In the process of adding support for Software Heritage, Guix [gained +Guile bindings to the Software Heritage HTTP +interface](https://issues.guix.info/issue/33432). Here’s a couple of +things we can do: + +```scheme +(use-modules (guix swh)) + +;; Check whether SWH has ever crawled our repository. +(define o (lookup-origin "https://git.savannah.gnu.org/git/guix.git")) +⇒ #<<origin> id: 86312956 …> + +;; It did! When was its last visit? +(define last-visit + (first (origin-visits o))) + +(date->string (visit-date last-visit)) +⇒ "Fri Mar 29 10:07:45Z 2019" + +;; Does it have our “v0.15.0” Git tag? +(lookup-origin-revision "https://git.savannah.gnu.org/git/guix.git" "v0.15.0") +⇒ #<<revision> id: "359fdda40f754bbf1b5dc261e7427b75463b59be" …> +``` + +Guix itself is a Guile library so when we combine the two, there are +interesting things we can do: + +```scheme +(use-modules (guix) (guix swh) + (gnu packages base) + (gnu packages golang)) + +;; This is our GNU Coreutils package. +coreutils +⇒ #<package coreutils@8.30 gnu/packages/base.scm:342 1c67b40> + +;; Does SWH have its tarball? +(lookup-content (origin-sha256 (package-source coreutils)) + "sha256") +⇒ #<<content> checksums: (("sha1" …)) data-url: …> + +;; Our package for HashiCorp’s Configuration Language (HCL) is +;; built from a Git commit. +(define commit + (git-reference-commit + (origin-uri (package-source go-github-com-hashicorp-hcl)))) + +;; Is this particular commit available in the archive? +(lookup-revision commit) +⇒ #<<revision> id: "23c074d0eceb2b8a5bfdbb271ab780cde70f05a8" …> +``` + +We’re currently using a subset of this interface, but there’s certainly +more we could do. For example, we can compute archive coverage of the +Guix packages; we can also request the archival of each package’s source +code _via_ the [“save code” +interface](https://archive.softwareheritage.org/api/1/origin/save/)—though +all this is subject to [rate +limiting](https://archive.softwareheritage.org/api/#rate-limiting). + +# Wrap-up + +Software Heritage support in Guix creates a bridge from the stable +source code archive to reproducible software deployment with complete +provenance tracking. For the first time it gives us a software package +distribution that can be rebuilt months or years later. This is +particularly beneficial in the context of reproducible science: finally +we can describe reproducible software environments, a prerequisite for +reproducible computational experiments. + +Going further, we can provide a complete software supply tool chain with +provenance tracking that links revisions in the archive to +bit-reproducible build artifacts produced by Guix. Oh and Guix itself +[is +archived](https://archive.softwareheritage.org/api/1/origin/git/url/https://git.savannah.gnu.org/git/guix.git/), +so we have this meta-level where we could link Guix revisions to the +revisions of packages it provides… There are still technical challenges +to overcome, but that vision is shaping up. + +#### About GNU Guix + +[GNU Guix](https://www.gnu.org/software/guix) is a transactional package +manager and an advanced distribution of the GNU system that [respects +user +freedom](https://www.gnu.org/distros/free-system-distribution-guidelines.html). +Guix can be used on top of any system running the kernel Linux, or it +can be used as a standalone operating system distribution for i686, +x86_64, ARMv7, and AArch64 machines. + +In addition to standard package management features, Guix supports +transactional upgrades and roll-backs, unprivileged package management, +per-user profiles, and garbage collection. When used as a standalone +GNU/Linux distribution, Guix offers a declarative, stateless approach to +operating system configuration management. Guix is highly customizable +and hackable through [Guile](https://www.gnu.org/software/guile) +programming interfaces and extensions to the +[Scheme](http://schemers.org) language. diff --git a/website/static/blog/img/software-heritage-logo-title.svg b/website/static/blog/img/software-heritage-logo-title.svg new file mode 100644 index 0000000..bebc6b4 --- /dev/null +++ b/website/static/blog/img/software-heritage-logo-title.svg @@ -0,0 +1,602 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + id="svg2" + version="1.1" + inkscape:version="0.92.3 (2405546, 2018-03-11)" + xml:space="preserve" + width="377.82294" + height="82.554665" + viewBox="0 0 354.20901 77.394997" + sodipodi:docname="software-heritage-logo-title.svg" + inkscape:export-filename="/home/zack/swh/annex/public/logo/software-heritage-logo-title.512px.png" + inkscape:export-xdpi="130.24098" + inkscape:export-ydpi="130.24098"><metadata + id="metadata8"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs + id="defs6"><clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath16"><path + d="m 30.027,68.987 1.337,-1.343 4.826,1.607 -1.61,-4.823 1.34,-1.34 2.95,8.844 z m -3.387,-1.073 5.746,-10.675 1.252,1.252 -5.747,10.674 z m -2.552,-10.762 1.608,4.823 -1.34,1.34 -2.949,-8.846 8.842,2.949 -1.338,1.343 z m 19.376,8.722 2.274,-5.144 h 1.894 l -4.167,8.935 -4.17,-8.038 1.895,-0.154 z m -5.797,-7.103 12,-3.485 v 1.77 l -12,3.484 z m 5.797,-9.502 -2.273,4.461 h -1.895 l 4.169,-8.252 4.167,8.379 -1.896,-0.018 z m 13.276,20.108 -8.843,2.95 2.945,-8.844 1.342,1.338 -1.607,4.825 4.823,-1.609 z m 4.597,-2.282 -10.674,-5.748 1.251,-1.25 10.675,5.746 z m -0.269,-4.728 1.609,-4.822 -4.822,1.607 -1.34,-1.34 8.843,-2.948 -2.948,8.842 z m -3.401,18.722 -8.219,-4.168 8.396,-4.17 0.033,1.896 -4.653,2.274 4.443,2.273 z m 3.391,-10.359 3.486,12 h -1.771 l -3.484,-12 z m 5.609,2.022 7.967,4.169 -8.522,4.168 -0.095,-1.896 4.873,-2.272 -4.223,-2.274 z m -10.321,11.547 -1.339,1.342 -4.824,-1.608 1.608,4.823 -1.34,1.341 -2.948,-8.844 z m 3.387,1.072 -5.746,10.675 -1.253,-1.253 5.748,-10.673 z m 2.551,10.763 -1.608,-4.823 1.341,-1.339 2.947,8.843 -8.842,-2.949 1.339,-1.341 z M 45.182,91.364 42.908,86.999 40.634,91.73 H 38.74 l 4.168,-8.521 4.17,8.245 z m 4.485,3.151 -12,3.485 v -1.77 l 12,-3.485 z m -6.759,9.088 2.274,-4.873 h 1.895 l -4.169,8.664 -4.169,-8.175 1.896,-0.083 z m -7.379,-13.8 -1.341,-1.34 1.608,-4.823 -4.823,1.608 -1.34,-1.34 8.844,-2.949 z m -10.494,-3.611 10.674,5.746 -1.251,1.251 -10.675,-5.746 z m 0.268,4.726 -1.608,4.823 4.824,-1.608 1.339,1.341 -8.844,2.948 2.949,-8.844 z m 3.364,-18.722 8.338,4.169 -8.338,4.169 v -1.896 l 4.547,-2.273 -4.547,-2.274 z m -5.069,-1.466 3.485,11 h -1.769 l -3.485,-11 z m -10.269,5.635 8.338,4.169 v -1.896 l -4.547,-2.273 4.547,-2.274 v -1.895 z" + id="path18" + inkscape:connector-curvature="0" /></clipPath><linearGradient + x1="0" + y1="0" + x2="1" + y2="0" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.32883,76.436119)" + spreadMethod="pad" + id="linearGradient24"><stop + style="stop-opacity:1;stop-color:#ec1c28" + offset="0" + id="stop26" /><stop + style="stop-opacity:1;stop-color:#ec1c28" + offset="0.331971" + id="stop28" /><stop + style="stop-opacity:1;stop-color:#fbc81f" + offset="1" + id="stop30" /></linearGradient><clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath38"><path + d="M 0,141.73 H 311 V 0 H 0 Z" + id="path40" + inkscape:connector-curvature="0" /></clipPath><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient945" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + x1="0" + y1="0" + x2="1" + y2="0" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + spreadMethod="pad" + id="linearGradient24-3"><stop + style="stop-opacity:1;stop-color:#ec1c28" + offset="0" + id="stop26-6" /><stop + style="stop-opacity:1;stop-color:#ec1c28" + offset="0.331971" + id="stop28-7" /><stop + style="stop-opacity:1;stop-color:#fbc81f" + offset="1" + id="stop30-5" /></linearGradient><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient943" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.308309,0,0,-61.305366,12.56513,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient5655" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient5657" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient5659" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient5661" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient5663" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient5665" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient5667" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient5669" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient5671" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient5673" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient5675" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient5677" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient5679" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient5681" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient5683" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient5685" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient5687" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient5689" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient5691" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient5693" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient5695" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /><linearGradient + inkscape:collect="always" + xlink:href="#linearGradient24-3" + id="linearGradient5697" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(61.305366,0,0,-61.305366,13.87633,76.436119)" + x1="0" + y1="0" + x2="1" + y2="0" + spreadMethod="pad" /></defs><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1866" + inkscape:window-height="1016" + id="namedview4" + showgrid="false" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" + inkscape:zoom="3.1953577" + inkscape:cx="147.91687" + inkscape:cy="31.733747" + inkscape:window-x="2500" + inkscape:window-y="312" + inkscape:window-maximized="0" + inkscape:current-layer="g10" /><g + id="g10" + inkscape:groupmode="layer" + inkscape:label="SWH-logo" + transform="matrix(1.25,0,0,-1.25,-16.66125,134.2425)"><g + id="g5768" + inkscape:export-xdpi="520.48999" + inkscape:export-ydpi="520.48999"><g + id="g34"><g + clip-path="url(#clipPath38)" + id="g36"><g + transform="translate(94.5123,88.1873)" + id="g42"><path + inkscape:connector-curvature="0" + id="path44" + style="fill:#52566d;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 0,0 -0.378,-2.235 -0.407,-0.116 c -1.131,0.87 -2.438,1.335 -3.657,1.335 -2.265,0 -3.513,-1.567 -3.513,-3.019 0,-3.716 8.506,-3.339 8.506,-8.709 0,-2.904 -2.497,-5.342 -6.242,-5.342 -1.596,0 -3.454,0.436 -4.992,1.307 l 0.29,2.38 0.319,0.145 c 1.423,-1.394 3.222,-1.911 4.615,-1.945 2.725,-0.067 4.521,1.406 3.716,3.135 -1.653,3.553 -8.476,3.368 -8.476,8.768 0,2.874 2.467,5.167 6.067,5.167 C -3.048,0.871 -1.568,0.639 0,0" /></g><g + transform="translate(99.4159,77.3007)" + id="g46"><path + inkscape:connector-curvature="0" + id="path48" + style="fill:#52566d;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 0,0 c 0,-3.745 1.307,-5.574 3.687,-5.574 2.438,0 3.745,1.626 3.745,4.877 0,3.687 -1.307,5.603 -3.688,5.603 C 1.307,4.906 0,3.194 0,0 m 9.58,-0.174 c 0,-4.471 -2.178,-7.054 -6.039,-7.054 -3.628,0 -5.718,2.438 -5.718,6.706 0,4.47 2.205,7.054 6.067,7.054 3.599,0 5.69,-2.439 5.69,-6.706" /></g><g + transform="translate(115.1763,76.1395)" + id="g50"><path + inkscape:connector-curvature="0" + id="path52" + style="fill:#52566d;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 0,0 0.145,-5.835 h -2.293 l 0.174,5.661 -0.058,6.067 h -2.003 l -0.116,0.175 0.145,1.364 h 1.974 l -0.029,1.916 c -0.029,3.135 1.655,4.848 4.586,4.848 0.726,0 1.511,-0.087 2.294,-0.262 L 4.645,12.135 4.471,11.99 c -0.813,0.406 -1.452,0.522 -2.149,0.522 -1.393,0 -2.177,-0.958 -2.206,-2.845 L 0.088,7.432 H 7.287 L 7.374,7.258 7.229,5.893 h -7.17 z" /></g><g + transform="translate(127.8893,72.6559)" + id="g54"><path + inkscape:connector-curvature="0" + id="path56" + style="fill:#52566d;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 0,0 0.262,-0.174 0.029,-1.683 C -1.045,-2.177 -1.887,-2.439 -2.874,-2.525 -5.08,-2.09 -5.98,-0.987 -5.98,1.307 l 0.087,2.061 -0.029,6.009 h -1.829 l -0.116,0.174 0.145,1.364 h 1.771 v 2.149 l 2.003,0.87 0.232,-0.202 -0.058,-2.817 H 0.174 L 0.291,10.742 0.145,9.377 H -3.774 L -3.919,1.51 c -0.029,-1.568 0.552,-2.091 1.829,-2.091 0.61,0 1.248,0.146 2.09,0.581" /></g><g + transform="translate(134.3326,72.8013)" + id="g58"><path + inkscape:connector-curvature="0" + id="path60" + style="fill:#52566d;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 0,0 h 0.145 l 2.816,9.057 0.464,1.742 H 5.69 L 6.009,9.174 8.448,0 h 0.145 l 2.844,9.057 0.407,1.742 h 2.032 L 9.493,-2.497 H 7.286 L 4.529,7.809 H 4.326 L 1.103,-2.497 h -2.264 l -3.716,13.238 2.118,0.145 0.32,-1.712 z" /></g><g + transform="translate(152.6459,75.4428)" + id="g62"><path + inkscape:connector-curvature="0" + id="path64" + style="fill:#52566d;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 0,0 c -0.726,-0.203 -1.103,-0.551 -1.103,-1.393 0,-1.278 0.784,-2.032 1.974,-2.032 1.132,0 2.207,0.754 3.252,2.061 l 0.087,2.38 z m 6.387,4.906 c 0,-1.015 -0.349,-6.154 -0.349,-7.17 0,-0.842 0.233,-1.132 0.9,-1.132 0.232,0 0.523,0.028 0.987,0.174 L 8.158,-3.425 7.925,-4.732 C 7.432,-5.022 6.851,-5.254 6.271,-5.312 5.08,-5.196 4.326,-4.441 4.268,-3.164 H 4.064 C 3.078,-4.18 2.061,-4.935 0.958,-5.342 c -2.613,0 -4.122,1.394 -4.122,3.629 0,1.772 0.987,2.7 2.7,3.106 l 4.703,1.104 0.029,1.887 c 0,1.538 -0.842,2.351 -2.294,2.351 -1.307,0 -2.583,-0.609 -4.093,-1.916 l -0.233,0.117 -0.29,1.654 c 1.597,1.19 3.309,1.8 4.964,1.8 2.497,0 4.065,-1.307 4.065,-3.484" /></g><g + transform="translate(171.1063,83.5713)" + id="g66"><path + inkscape:connector-curvature="0" + id="path68" + style="fill:#52566d;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 0,0 v -2.235 l -0.262,-0.087 c -0.405,0.116 -0.811,0.145 -1.044,0.145 -1.249,0 -2.322,-0.929 -3.368,-3.222 l -0.028,-2.033 0.145,-5.835 h -2.294 l 0.175,5.632 -0.146,7.519 2.206,0.203 -0.029,-2.729 h 0.175 c 1.189,2.091 2.583,2.701 3.716,2.701 0.26,0 0.551,-0.03 0.754,-0.059" /></g><g + transform="translate(174.9374,78.6073)" + id="g70"><path + inkscape:connector-curvature="0" + id="path72" + style="fill:#52566d;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 0,0 6.386,0.174 6.444,0.523 C 6.444,2.613 5.312,3.57 3.716,3.57 1.741,3.57 0.406,2.293 0,0 m -0.145,-1.626 c 0,-3.135 1.306,-5.051 3.976,-5.051 1.249,0 2.672,0.465 3.891,1.306 L 7.983,-5.516 7.751,-7.461 C 6.503,-8.099 5.08,-8.535 3.716,-8.535 c -3.804,0 -6.038,2.613 -6.038,6.793 0,4.297 2.437,6.938 6.241,6.938 2.903,0 4.586,-1.858 4.586,-4.993 0,-0.319 -0.029,-0.987 -0.057,-1.335 L 7.954,-1.51 -0.145,-1.539 Z" /></g><g + transform="translate(208.5502,73.5561)" + id="g74"><path + inkscape:connector-curvature="0" + id="path76" + style="fill:#52566d;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 0,0 c 0,-1.568 0.261,-1.974 1.276,-1.974 0.582,0 1.307,0.087 1.307,0.087 L 2.642,-2.003 2.38,-3.339 c 0,0 -2.293,0.088 -3.57,0.088 -1.017,0 -3.34,-0.058 -3.34,-0.058 l 0.262,1.306 c 1.829,0.029 2.206,0.551 2.206,3.106 v 4.383 c 0,0 -3.077,0.03 -4.412,0.03 -0.929,0 -4.819,-0.319 -4.819,-0.319 L -11.409,0 c 0,-1.568 0.261,-1.974 1.277,-1.974 0.581,0 1.307,0.087 1.307,0.087 l 0.057,-0.116 -0.261,-1.336 c 0,0.03 -1.451,0.088 -2.468,0.088 -1.683,0 -4.354,-0.204 -4.412,-0.349 l 0.174,1.336 c 1.801,0.348 2.265,0.871 2.265,2.496 l 0.028,12.193 c 0,1.248 -0.203,1.568 -1.074,1.568 -0.347,0 -0.987,-0.059 -0.987,-0.059 l -0.057,0.117 0.203,1.277 c 0,0 2.119,-0.087 3.222,-0.087 1.248,0 3.106,0.261 3.106,0.261 l -0.116,-1.306 c -1.683,-0.262 -1.829,-0.581 -1.916,-2.613 L -11.235,6.88 -6.358,6.851 c 1.452,0 2.584,0.087 4.296,0.29 l 0.029,5.284 c 0,1.248 -0.203,1.568 -1.074,1.568 -0.348,0 -0.986,-0.059 -0.986,-0.059 l -0.059,0.117 0.204,1.277 c 0,-0.029 1.915,-0.087 2.844,-0.087 1.394,0 3.484,0.261 3.484,0.261 L 2.264,14.196 C 0.812,13.993 0.464,13.644 0.406,12.541 0.203,8.303 0,2.41 0,0" /></g><g + transform="translate(221.7249,79.1299)" + id="g78"><path + inkscape:connector-curvature="0" + id="path80" + style="fill:#52566d;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 0,0 c 0.581,0.058 0.726,0.203 0.726,0.784 0,1.538 -0.871,2.38 -2.409,2.38 -1.801,0 -3.223,-1.306 -3.572,-3.425 z M -5.371,-1.335 V -1.8 c 0,-3.251 1.713,-5.399 4.297,-5.399 1.8,0 3.571,0.9 3.571,0.9 L 2.671,-6.358 2.99,-7.199 c 0,0 -2.7,-1.975 -4.441,-1.975 -3.658,0 -6.097,2.584 -6.097,6.416 0,3.977 2.961,7.403 6.416,7.403 2.845,0 4.326,-1.452 4.326,-4.209 0,-0.726 -0.175,-1.423 -0.175,-1.423 L 2.642,-1.335 Z" /></g><g + transform="translate(229.5901,73.7595)" + id="g82"><path + inkscape:connector-curvature="0" + id="path84" + style="fill:#52566d;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 0,0 v 6.387 c 0,1.277 -0.319,1.77 -1.104,1.77 -0.319,0 -0.609,-0.087 -0.609,-0.087 l -0.145,0.203 0.087,0.901 C 0,9.493 2.148,10.044 2.148,10.044 L 2.351,9.87 c 0,0 -0.29,-1.625 -0.261,-2.99 L 2.206,6.793 c 1.191,1.829 2.932,3.106 4.093,3.106 0.639,0 0.9,-0.116 0.9,-0.116 L 7.286,9.667 c 0,0 -0.406,-2.381 -0.464,-4.152 L 5.69,5.428 c 0,1.597 -0.145,1.974 -0.785,1.974 -0.841,0 -1.886,-0.754 -2.699,-1.974 0,0 -0.232,-5.283 -0.232,-5.922 0,-1.306 0.29,-1.683 1.393,-1.683 0.406,0 1.278,0.058 1.278,0.058 l 0.028,-0.117 -0.26,-1.277 c 0,0 -1.83,0.058 -2.962,0.058 -1.713,0 -3.048,-0.116 -3.048,-0.116 l 0.145,1.161 C -0.291,-2.294 0,-1.829 0,0" /></g><g + transform="translate(240.2704,89.2612)" + id="g86"><path + inkscape:connector-curvature="0" + id="path88" + style="fill:#52566d;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 0,0 C 0,0.958 0.755,1.713 1.713,1.713 2.525,1.713 3.135,1.104 3.135,0.232 3.135,-0.726 2.381,-1.48 1.423,-1.48 0.581,-1.48 0,-0.87 0,0 m -1.045,-18.115 c 1.161,0.32 1.626,0.872 1.626,1.887 v 7.374 c 0,1.074 -0.349,1.568 -1.075,1.568 -0.319,0 -0.726,-0.116 -0.726,-0.116 l 0.117,1.074 c 1.945,0.29 4.181,0.842 4.181,0.842 l 0.144,-0.349 c -0.348,-0.813 -0.667,-5.719 -0.667,-10.277 0,-1.131 0.29,-1.625 1.015,-1.625 0.349,0 1.016,0.058 1.016,0.058 l 0.059,-0.116 -0.232,-1.249 c 0,0 -1.51,0.088 -2.584,0.088 -1.219,0 -2.99,-0.349 -2.99,-0.349 z" /></g><g + transform="translate(248.6878,80.6106)" + id="g90"><path + inkscape:connector-curvature="0" + id="path92" + style="fill:#52566d;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 0,0 c 0,1.045 -0.377,1.393 -1.654,1.451 l -0.116,0.175 0.144,0.87 c 1.888,0.929 3.601,2.642 3.601,2.642 l 0.58,-0.232 c 0,0 -0.116,-0.755 -0.233,-2.178 L 6.591,2.816 6.677,2.728 6.416,1.19 2.207,1.277 C 2.09,-0.552 2.003,-2.99 2.003,-5.981 c 0,-1.974 0.61,-2.699 2.265,-2.699 0.958,0 1.974,0.522 1.974,0.522 l 0.29,-0.755 c 0,0 -2.235,-1.741 -2.931,-1.741 C 0.958,-10.654 0,-9.697 0,-7.142 Z" /></g><g + transform="translate(264.333,76.401)" + id="g94"><path + inkscape:connector-curvature="0" + id="path96" + style="fill:#52566d;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 0,0 -3.92,-1.19 c -0.551,-0.174 -0.841,-0.61 -0.841,-1.219 0,-1.104 0.841,-1.946 2.002,-1.946 0.726,0 1.83,0.581 2.643,1.394 z m 0.116,2.38 c 0,1.946 -0.929,3.078 -2.555,3.078 -1.887,0 -3.483,-1.452 -3.483,-1.452 l -0.146,0.087 -0.348,1.249 c 0,0 3.484,2.032 4.732,2.032 2.526,0 4.035,-1.394 4.035,-3.745 0,-1.045 -0.522,-4.964 -0.522,-6.677 0,-0.842 0.435,-1.335 1.19,-1.335 0.929,0 1.742,0.725 1.742,0.725 l 0.406,-0.464 c 0,0 -1.073,-1.829 -2.525,-2.323 -1.568,0 -2.439,0.784 -2.584,2.352 l -0.117,0.029 c -1.393,-1.394 -2.612,-2.265 -3.192,-2.265 -2.149,0 -3.716,1.51 -3.716,3.6 0,1.133 0.61,2.062 1.539,2.323 l 5.486,1.509 z" /></g><g + transform="translate(281.5161,67.5759)" + id="g98"><path + inkscape:connector-curvature="0" + id="path100" + style="fill:#52566d;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 0,0 c 0,1.132 -1.017,1.539 -5.662,2.148 0,0 -1.799,-1.335 -1.799,-2.642 0,-1.48 1.19,-2.38 3.193,-2.38 C -2.003,-2.874 0,-1.51 0,0 m -1.336,10.945 c 0,2.235 -1.364,3.773 -3.338,3.773 -1.771,0 -2.874,-1.248 -2.874,-3.193 0,-2.235 1.335,-3.745 3.338,-3.745 1.771,0 2.874,1.191 2.874,3.165 M -6.591,6.735 C -7.374,6.3 -7.809,5.835 -7.809,5.458 c 0,-0.9 1.103,-1.336 3.483,-1.423 4.5,-0.232 6.184,-1.074 6.184,-3.106 0,-2.671 -3.513,-5.225 -7.2,-5.225 -2.757,0 -4.383,1.422 -4.383,3.861 0.957,1.277 2.874,2.612 2.874,2.612 v 0.175 c -1.8,0.232 -3.165,1.451 -3.165,2.844 0.9,0.929 2.439,1.858 2.439,1.858 V 7.17 c -1.364,0.726 -2.148,2.149 -2.148,3.861 0,2.758 2.526,5.168 5.399,5.168 1.104,0 2.09,-0.32 2.845,-0.32 1.481,0.175 4.006,0.872 4.006,0.872 L 2.612,16.635 2.293,15.009 c 0,0 -1.277,-0.175 -2.496,-0.262 L -0.32,14.602 c 0.755,-0.842 1.161,-1.858 1.161,-2.932 0,-2.903 -2.525,-5.167 -5.747,-5.167 -0.552,0 -1.075,0.087 -1.685,0.232" /></g><g + transform="translate(293.5022,79.1299)" + id="g102"><path + inkscape:connector-curvature="0" + id="path104" + style="fill:#52566d;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 0,0 c 0.581,0.058 0.726,0.203 0.726,0.784 0,1.538 -0.871,2.38 -2.409,2.38 -1.801,0 -3.223,-1.306 -3.572,-3.425 z M -5.371,-1.335 V -1.8 c 0,-3.251 1.713,-5.399 4.297,-5.399 1.8,0 3.571,0.9 3.571,0.9 L 2.671,-6.358 2.99,-7.199 c 0,0 -2.7,-1.975 -4.441,-1.975 -3.658,0 -6.097,2.584 -6.097,6.416 0,3.977 2.961,7.403 6.416,7.403 2.845,0 4.326,-1.452 4.326,-4.209 0,-0.726 -0.175,-1.423 -0.175,-1.423 L 2.642,-1.335 Z" /></g></g></g><g + inkscape:export-ydpi="1255.96" + inkscape:export-xdpi="1255.96" + inkscape:export-filename="software-heritage-logo.1024px.png" + id="g946" + style="display:inline" + transform="matrix(0.99846318,0,0,0.99846318,0.84843673,0.09374526)"><path + style="fill:url(#linearGradient5655);stroke:none" + d="m 30.5745,68.987 1.337,-1.343 4.826,1.607 -1.61,-4.823 1.34,-1.34 2.95,8.844 z" + id="path941" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient5657);stroke:none" + d="m 27.1875,67.914 5.746,-10.675 1.252,1.252 -5.747,10.674 z" + id="path939" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient5659);stroke:none" + d="m 24.6355,57.152 1.608,4.823 -1.34,1.34 -2.949,-8.846 8.842,2.949 -1.338,1.343 z" + id="path937" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient5661);stroke:none" + d="m 44.0115,65.874 2.274,-5.144 h 1.894 l -4.167,8.935 -4.17,-8.038 1.895,-0.154 z" + id="path935" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient5663);stroke:none" + d="m 38.2145,58.771 12,-3.485 v 1.77 l -12,3.484 z" + id="path933" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient5665);stroke:none" + d="m 44.0115,49.269 -2.273,4.461 h -1.895 l 4.169,-8.252 4.167,8.379 -1.896,-0.018 z" + id="path931" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient5667);stroke:none" + d="m 57.2875,69.377 -8.843,2.95 2.945,-8.844 1.342,1.338 -1.607,4.825 4.823,-1.609 z" + id="path929" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient5669);stroke:none" + d="m 61.8845,67.095 -10.674,-5.748 1.251,-1.25 10.675,5.746 z" + id="path927" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient5671);stroke:none" + d="m 61.6155,62.367 1.609,-4.822 -4.822,1.607 -1.34,-1.34 8.843,-2.948 -2.948,8.842 z" + id="path925" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient5673);stroke:none" + d="m 58.2145,81.089 -8.219,-4.168 8.396,-4.17 0.033,1.896 -4.653,2.274 4.443,2.273 z" + id="path923" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient5675);stroke:none" + d="m 61.6055,70.73 3.486,12 h -1.771 l -3.484,-12 z" + id="path921" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient5677);stroke:none" + d="m 67.2145,72.752 7.967,4.169 -8.522,4.168 -0.095,-1.896 4.873,-2.272 -4.223,-2.274 z" + id="path919" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient5679);stroke:none" + d="m 56.8935,84.299 -1.339,1.342 -4.824,-1.608 1.608,4.823 -1.34,1.341 -2.948,-8.844 z" + id="path917" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient5681);stroke:none" + d="m 60.2805,85.371 -5.746,10.675 -1.253,-1.253 5.748,-10.673 z" + id="path915" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient5683);stroke:none" + d="m 62.8315,96.134 -1.608,-4.823 1.341,-1.339 2.947,8.843 -8.842,-2.949 1.339,-1.341 z" + id="path913" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient5685);stroke:none" + d="m 45.7295,91.364 -2.274,-4.365 -2.274,4.731 h -1.894 l 4.168,-8.521 4.17,8.245 z" + id="path911" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient5687);stroke:none" + d="m 50.2145,94.515 -12,3.485 v -1.77 l 12,-3.485 z" + id="path909" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient5689);stroke:none" + d="m 43.4555,103.603 2.274,-4.873 h 1.895 l -4.169,8.664 -4.169,-8.175 1.896,-0.083 z" + id="path907" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient5691);stroke:none" + d="m 36.0765,89.803 -1.341,-1.34 1.608,-4.823 -4.823,1.608 -1.34,-1.34 8.844,-2.949 z" + id="path905" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient5693);stroke:none" + d="m 25.5825,86.192 10.674,5.746 -1.251,1.251 -10.675,-5.746 z" + id="path903" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient5695);stroke:none" + d="m 25.8505,90.918 -1.608,4.823 4.824,-1.608 1.339,1.341 -8.844,2.948 2.949,-8.844 z" + id="path901" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient5697);stroke:none" + d="m 29.2145,72.196 8.338,4.169 -8.338,4.169 v -1.896 l 4.547,-2.273 -4.547,-2.274 z" + id="path899" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient945);stroke:none" + d="m 24.1455,70.73 3.485,11 h -1.769 l -3.485,-11 z" + id="path897" + inkscape:connector-curvature="0" /><path + style="fill:url(#linearGradient943);stroke:none;stroke-width:1.00002396" + d="m 12.5653,76.365 8.3384,4.169 V 78.638 L 16.356482,76.365 20.9037,74.091 v -1.895 z" + id="path32-3" + inkscape:connector-curvature="0" /><text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.99999905px;line-height:18.75px;font-family:'Alegreya SC';-inkscape-font-specification:'Alegreya SC';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="21.706713" + y="-49.201427" + id="text24" + transform="scale(1,-1)"><tspan + sodipodi:role="line" + id="tspan22" + x="21.706713" + y="-36.189709" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Alegreya SC';-inkscape-font-specification:'Alegreya SC';stroke-width:0.75px" /></text> +<text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.99999905px;line-height:18.75px;font-family:'Alegreya SC';-inkscape-font-specification:'Alegreya SC';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:0.54901961;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="17.983284" + y="-46.719143" + id="text28" + transform="scale(1,-1)"><tspan + sodipodi:role="line" + id="tspan26" + x="17.983284" + y="-33.707424" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:'Alegreya SC';-inkscape-font-specification:'Alegreya SC';fill:#000000;fill-opacity:0.54901961;stroke-width:0.75px" /></text> +<text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:18.75px;font-family:'Alegreya SC';-inkscape-font-specification:'Alegreya SC';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:0.54901961;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="16.121571" + y="-47.960289" + id="text4526" + transform="scale(1,-1)"><tspan + sodipodi:role="line" + id="tspan4524" + x="16.121571" + y="-34.429039" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:'Alegreya SC';-inkscape-font-specification:'Alegreya SC';fill:#000000;fill-opacity:0.54901961;stroke-width:0.75px" /></text> +<text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:18.75px;font-family:'Alegreya SC';-inkscape-font-specification:'Alegreya SC';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:0.54901961;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="16.431856" + y="-48.270573" + id="text4530" + transform="scale(1,-1)"><tspan + sodipodi:role="line" + id="tspan4528" + x="16.431856" + y="-34.739323" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;font-family:'Alegreya SC';-inkscape-font-specification:'Alegreya SC';fill:#000000;fill-opacity:0.54901961;stroke-width:0.75px" /></text> +<text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.99999905px;line-height:18.75px;font-family:'Alegreya SC';-inkscape-font-specification:'Alegreya SC';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="14.570143" + y="-46.719143" + id="text4557" + transform="scale(1,-1)"><tspan + sodipodi:role="line" + id="tspan4555" + x="14.570143" + y="-33.707424" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16px;font-family:'Alegreya SC';-inkscape-font-specification:'Alegreya SC Bold';fill:#000000;fill-opacity:0.54901961;stroke-width:0.75px" /></text> +</g></g></g></svg>
\ No newline at end of file |
