Merge branch 'master' into feature/update-azure-icons-v18

pull/980/head
Ebby Peter 2 months ago committed by GitHub
commit 1d351cf553
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -10,7 +10,7 @@ RUN apk update && apk add --no-cache \
RUN go install github.com/mingrammer/round@latest RUN go install github.com/mingrammer/round@latest
# install fonts # install fonts
RUN curl -O https://noto-website.storage.googleapis.com/pkgs/NotoSansCJKjp-hinted.zip \ RUN curl -O https://noto-website-2.storage.googleapis.com/pkgs/NotoSansCJKjp-hinted.zip \
&& mkdir -p /usr/share/fonts/NotoSansCJKjp \ && mkdir -p /usr/share/fonts/NotoSansCJKjp \
&& unzip NotoSansCJKjp-hinted.zip -d /usr/share/fonts/NotoSansCJKjp/ \ && unzip NotoSansCJKjp-hinted.zip -d /usr/share/fonts/NotoSansCJKjp/ \
&& rm NotoSansCJKjp-hinted.zip \ && rm NotoSansCJKjp-hinted.zip \

@ -25,7 +25,7 @@
"extensions": [ "extensions": [
"ms-python.python", "ms-python.python",
"ms-python.debugpy", "ms-python.debugpy",
"mhutchie.git-graph", "mhutchie.git-graph",
"mutantdino.resourcemonitor", "mutantdino.resourcemonitor",
"tehpeng.diagramspreviewer" "tehpeng.diagramspreviewer"
] ]
@ -35,4 +35,4 @@
"workspaceFolder": "/usr/src/diagrams" "workspaceFolder": "/usr/src/diagrams"
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root" // "remoteUser": "root"
} }

@ -67,6 +67,21 @@ find . -type f -name "*.svg" -exec bash -c 'rm "$0"' {} \;
If you get any errors with autogen, it will probably be a '+' in filename If you get any errors with autogen, it will probably be a '+' in filename
### Add new provider
To add a new provider to Diagrams, please follow the steps below in addition to the image intructions above:
- in `autogen.sh` add in the `providers` variable the new provider code
- in `config.py`:
- in the `providers` variable, add the new provider code
- in the `FILE_PREFIXES` variable, add a new entry with your new provider code. And eventually a file prefix
- Optionnaly, update the `UPPER_WORDS` variable to a new entry with your new provider code.
- in the `ALIASES` variable, add a new entry with your new provider code. See below on how to add new aliases.
- in `scripts/resource.py`:
- add a function `cleaner_XXX` (replace XXX by your provider name). For the implementation look at the existing functions
- in the `cleaners` variable, add an entry with your new provider code and the function defined above
- in `sidebars.json`, update the `Nodes` array to add the reference of the new provider
- in the `diagrams` folder, add a new file `__init__.py` for the new provider. For the content look at the existing providers
### Update Aliases ### Update Aliases
Some node classes have alias. For example, `aws.compute.ECS` class is an alias Some node classes have alias. For example, `aws.compute.ECS` class is an alias

@ -82,6 +82,8 @@ To contribute to diagram, check out [contribution guidelines](CONTRIBUTING.md).
[Airflow Diagrams](https://github.com/feluelle/airflow-diagrams) is an Airflow plugin that aims to easily visualise your Airflow DAGs on service level from providers like AWS, GCP, Azure, etc. via diagrams. [Airflow Diagrams](https://github.com/feluelle/airflow-diagrams) is an Airflow plugin that aims to easily visualise your Airflow DAGs on service level from providers like AWS, GCP, Azure, etc. via diagrams.
[KubeDiagrams](https://github.com/philippemerle/KubeDiagrams) is a tool to generate Kubernetes architecture diagrams from Kubernetes manifest files, kustomization files, Helm charts, and actual cluster state. [KubeDiagrams](https://github.com/philippemerle/KubeDiagrams) supports all Kubernetes built-in resources, any custom resources, and label-based resource clustering.
## Other languages ## Other languages
- If you are familiar with Go, you can use [go-diagrams](https://github.com/blushft/go-diagrams) as well. - If you are familiar with Go, you can use [go-diagrams](https://github.com/blushft/go-diagrams) as well.

@ -20,6 +20,7 @@ providers=(
"generic" "generic"
"openstack" "openstack"
"outscale" "outscale"
"gis"
) )
if ! [ -x "$(command -v round)" ]; then if ! [ -x "$(command -v round)" ]; then

@ -29,6 +29,7 @@ PROVIDERS = (
"generic", "generic",
"openstack", "openstack",
"outscale", "outscale",
"gis"
) )
######################### #########################
@ -59,6 +60,7 @@ FILE_PREFIXES = {
"outscale": (), "outscale": (),
"generic": (), "generic": (),
"openstack": (), "openstack": (),
"gis": (),
} }
######################### #########################
@ -87,8 +89,9 @@ UPPER_WORDS = {
"generic": ("vpn", "ios", "xen", "sql", "lxc"), "generic": ("vpn", "ios", "xen", "sql", "lxc"),
"outscale": ("osc",), "outscale": ("osc",),
"openstack": ("rpm", "loci", "nfv", "ec2api"), "openstack": ("rpm", "loci", "nfv", "ec2api"),
"pve": ("pve"), "pve": ("pve",),
"ibm": ("ibm"), "ibm": ("ibm",),
"gis": ("gis","ban","ign","ogc","qgis","wfs","wms"),
} }
TITLE_WORDS = { TITLE_WORDS = {
@ -143,6 +146,7 @@ ALIASES = {
"Mssql": "MSSQL", "Mssql": "MSSQL",
"Mysql": "MySQL", "Mysql": "MySQL",
"Postgresql": "PostgreSQL", "Postgresql": "PostgreSQL",
"Qdrant": "Qdrant",
}, },
"gitops": { "gitops": {
"Argocd": "ArgoCD", "Argocd": "ArgoCD",
@ -411,6 +415,7 @@ ALIASES = {
} }
}, },
"digitalocean": {}, "digitalocean": {},
"gis": {},
"oci": { "oci": {
"compute": { "compute": {
"VM": "VirtualMachine", "VM": "VirtualMachine",

@ -528,7 +528,7 @@ class Edge:
for o in other: for o in other:
if isinstance(o, Edge): if isinstance(o, Edge):
o.forward = forward if forward else o.forward o.forward = forward if forward else o.forward
o.reverse = forward if forward else o.reverse o.reverse = reverse if reverse else o.reverse
self._attrs = o.attrs.copy() self._attrs = o.attrs.copy()
result.append(o) result.append(o)
else: else:

@ -96,6 +96,10 @@ class ElasticContainerServiceService(_Compute):
_icon = "elastic-container-service-service.png" _icon = "elastic-container-service-service.png"
class ElasticContainerServiceTask(_Compute):
_icon = "elastic-container-service-task.png"
class ElasticContainerService(_Compute): class ElasticContainerService(_Compute):
_icon = "elastic-container-service.png" _icon = "elastic-container-service.png"

@ -20,6 +20,10 @@ class Cloud9(_Devtools):
_icon = "cloud9.png" _icon = "cloud9.png"
class Cloudshell(_Devtools):
_icon = "cloudshell.png"
class Codeartifact(_Devtools): class Codeartifact(_Devtools):
_icon = "codeartifact.png" _icon = "codeartifact.png"

@ -32,10 +32,30 @@ class EventbridgeDefaultEventBusResource(_Integration):
_icon = "eventbridge-default-event-bus-resource.png" _icon = "eventbridge-default-event-bus-resource.png"
class EventbridgeEvent(_Integration):
_icon = "eventbridge-event.png"
class EventbridgePipes(_Integration):
_icon = "eventbridge-pipes.png"
class EventbridgeRule(_Integration):
_icon = "eventbridge-rule.png"
class EventbridgeSaasPartnerEventBusResource(_Integration): class EventbridgeSaasPartnerEventBusResource(_Integration):
_icon = "eventbridge-saas-partner-event-bus-resource.png" _icon = "eventbridge-saas-partner-event-bus-resource.png"
class EventbridgeScheduler(_Integration):
_icon = "eventbridge-scheduler.png"
class EventbridgeSchema(_Integration):
_icon = "eventbridge-schema.png"
class Eventbridge(_Integration): class Eventbridge(_Integration):
_icon = "eventbridge.png" _icon = "eventbridge.png"

@ -236,6 +236,10 @@ class TrustedAdvisor(_Management):
_icon = "trusted-advisor.png" _icon = "trusted-advisor.png"
class UserNotifications(_Management):
_icon = "user-notifications.png"
class WellArchitectedTool(_Management): class WellArchitectedTool(_Management):
_icon = "well-architected-tool.png" _icon = "well-architected-tool.png"

@ -16,6 +16,10 @@ class AugmentedAi(_ML):
_icon = "augmented-ai.png" _icon = "augmented-ai.png"
class Bedrock(_ML):
_icon = "bedrock.png"
class Comprehend(_ML): class Comprehend(_ML):
_icon = "comprehend.png" _icon = "comprehend.png"
@ -72,6 +76,10 @@ class Polly(_ML):
_icon = "polly.png" _icon = "polly.png"
class Q(_ML):
_icon = "q.png"
class RekognitionImage(_ML): class RekognitionImage(_ML):
_icon = "rekognition-image.png" _icon = "rekognition-image.png"

@ -12,8 +12,8 @@ class AzureOpenAI(_Ml):
_icon = "azure-open-ai.png" _icon = "azure-open-ai.png"
class AzureSpeedToText(_Ml): class AzureSpeechService(_Ml):
_icon = "azure-speed-to-text.png" _icon = "azure-speech-service.png"
class BatchAI(_Ml): class BatchAI(_Ml):

@ -0,0 +1,38 @@
import argparse
import sys
def run() -> int:
"""
Run diagrams code files in a diagrams environment.
Args:
paths: A list of paths to Python files containing diagrams code.
Returns:
The exit code.
"""
parser = argparse.ArgumentParser(
description="Run diagrams code files in a diagrams environment.",
)
parser.add_argument(
"paths",
metavar="path",
type=str,
nargs="+",
help="a Python file containing diagrams code",
)
args = parser.parse_args()
for path in args.paths:
with open(path, encoding='utf-8') as f:
exec(f.read())
return 0
def main():
sys.exit(run())
if __name__ == "__main__":
main()

@ -0,0 +1,12 @@
"""
GIS provides a set of services for Geographic Information Systems provider.
"""
from diagrams import Node
class _GIS(Node):
_provider = "gis"
_icon_dir = "resources/gis"
fontcolor = "#2d3436"

@ -0,0 +1,35 @@
# This module is automatically generated by autogen.sh. DO NOT EDIT.
from . import _GIS
class _Cli(_GIS):
_type = "cli"
_icon_dir = "resources/gis/cli"
class Gdal(_Cli):
_icon = "gdal.png"
class Imposm(_Cli):
_icon = "imposm.png"
class Lastools(_Cli):
_icon = "lastools.png"
class Mapnik(_Cli):
_icon = "mapnik.png"
class Mdal(_Cli):
_icon = "mdal.png"
class Pdal(_Cli):
_icon = "pdal.png"
# Aliases

@ -0,0 +1,15 @@
# This module is automatically generated by autogen.sh. DO NOT EDIT.
from . import _GIS
class _Cplusplus(_GIS):
_type = "cplusplus"
_icon_dir = "resources/gis/cplusplus"
class Mapnik(_Cplusplus):
_icon = "mapnik.png"
# Aliases

@ -0,0 +1,31 @@
# This module is automatically generated by autogen.sh. DO NOT EDIT.
from . import _GIS
class _Data(_GIS):
_type = "data"
_icon_dir = "resources/gis/data"
class BAN(_Data):
_icon = "ban.png"
class Here(_Data):
_icon = "here.png"
class IGN(_Data):
_icon = "ign.png"
class Openstreetmap(_Data):
_icon = "openstreetmap.png"
class Overturemaps(_Data):
_icon = "overturemaps.png"
# Aliases

@ -0,0 +1,15 @@
# This module is automatically generated by autogen.sh. DO NOT EDIT.
from . import _GIS
class _Database(_GIS):
_type = "database"
_icon_dir = "resources/gis/database"
class Postgis(_Database):
_icon = "postgis.png"
# Aliases

@ -0,0 +1,19 @@
# This module is automatically generated by autogen.sh. DO NOT EDIT.
from . import _GIS
class _Desktop(_GIS):
_type = "desktop"
_icon_dir = "resources/gis/desktop"
class Maptunik(_Desktop):
_icon = "maptunik.png"
class QGIS(_Desktop):
_icon = "qgis.png"
# Aliases

@ -0,0 +1,19 @@
# This module is automatically generated by autogen.sh. DO NOT EDIT.
from . import _GIS
class _Format(_GIS):
_type = "format"
_icon_dir = "resources/gis/format"
class Geopackage(_Format):
_icon = "geopackage.png"
class Geoparquet(_Format):
_icon = "geoparquet.png"
# Aliases

@ -0,0 +1,27 @@
# This module is automatically generated by autogen.sh. DO NOT EDIT.
from . import _GIS
class _Geocoding(_GIS):
_type = "geocoding"
_icon_dir = "resources/gis/geocoding"
class Addok(_Geocoding):
_icon = "addok.png"
class Gisgraphy(_Geocoding):
_icon = "gisgraphy.png"
class Nominatim(_Geocoding):
_icon = "nominatim.png"
class Pelias(_Geocoding):
_icon = "pelias.png"
# Aliases

@ -0,0 +1,11 @@
# This module is automatically generated by autogen.sh. DO NOT EDIT.
from . import _GIS
class _Georchestra(_GIS):
_type = "georchestra"
_icon_dir = "resources/gis/georchestra"
# Aliases

@ -0,0 +1,15 @@
# This module is automatically generated by autogen.sh. DO NOT EDIT.
from . import _GIS
class _Java(_GIS):
_type = "java"
_icon_dir = "resources/gis/java"
class Geotools(_Java):
_icon = "geotools.png"
# Aliases

@ -0,0 +1,43 @@
# This module is automatically generated by autogen.sh. DO NOT EDIT.
from . import _GIS
class _Javascript(_GIS):
_type = "javascript"
_icon_dir = "resources/gis/javascript"
class Cesium(_Javascript):
_icon = "cesium.png"
class Geostyler(_Javascript):
_icon = "geostyler.png"
class Keplerjs(_Javascript):
_icon = "keplerjs.png"
class Leaflet(_Javascript):
_icon = "leaflet.png"
class Maplibre(_Javascript):
_icon = "maplibre.png"
class OlExt(_Javascript):
_icon = "ol-ext.png"
class Openlayers(_Javascript):
_icon = "openlayers.png"
class Turfjs(_Javascript):
_icon = "turfjs.png"
# Aliases

@ -0,0 +1,23 @@
# This module is automatically generated by autogen.sh. DO NOT EDIT.
from . import _GIS
class _Mobile(_GIS):
_type = "mobile"
_icon_dir = "resources/gis/mobile"
class Mergin(_Mobile):
_icon = "mergin.png"
class Qfield(_Mobile):
_icon = "qfield.png"
class Smash(_Mobile):
_icon = "smash.png"
# Aliases

@ -0,0 +1,23 @@
# This module is automatically generated by autogen.sh. DO NOT EDIT.
from . import _GIS
class _OGC(_GIS):
_type = "ogc"
_icon_dir = "resources/gis/ogc"
class OGC(_OGC):
_icon = "ogc.png"
class WFS(_OGC):
_icon = "wfs.png"
class WMS(_OGC):
_icon = "wms.png"
# Aliases

@ -0,0 +1,15 @@
# This module is automatically generated by autogen.sh. DO NOT EDIT.
from . import _GIS
class _Organization(_GIS):
_type = "organization"
_icon_dir = "resources/gis/organization"
class Osgeo(_Organization):
_icon = "osgeo.png"
# Aliases

@ -0,0 +1,19 @@
# This module is automatically generated by autogen.sh. DO NOT EDIT.
from . import _GIS
class _Python(_GIS):
_type = "python"
_icon_dir = "resources/gis/python"
class Geopandas(_Python):
_icon = "geopandas.png"
class Pysal(_Python):
_icon = "pysal.png"
# Aliases

@ -0,0 +1,27 @@
# This module is automatically generated by autogen.sh. DO NOT EDIT.
from . import _GIS
class _Routing(_GIS):
_type = "routing"
_icon_dir = "resources/gis/routing"
class Graphhopper(_Routing):
_icon = "graphhopper.png"
class Osrm(_Routing):
_icon = "osrm.png"
class Pgrouting(_Routing):
_icon = "pgrouting.png"
class Valhalla(_Routing):
_icon = "valhalla.png"
# Aliases

@ -0,0 +1,99 @@
# This module is automatically generated by autogen.sh. DO NOT EDIT.
from . import _GIS
class _Server(_GIS):
_type = "server"
_icon_dir = "resources/gis/server"
class Actinia(_Server):
_icon = "actinia.png"
class Baremaps(_Server):
_icon = "baremaps.png"
class Deegree(_Server):
_icon = "deegree.png"
class G3WSuite(_Server):
_icon = "g3w-suite.png"
class Geohealthcheck(_Server):
_icon = "geohealthcheck.png"
class Geomapfish(_Server):
_icon = "geomapfish.png"
class Geomesa(_Server):
_icon = "geomesa.png"
class Geonetwork(_Server):
_icon = "geonetwork.png"
class Geonode(_Server):
_icon = "geonode.png"
class Georchestra(_Server):
_icon = "georchestra.png"
class Geoserver(_Server):
_icon = "geoserver.png"
class Geowebcache(_Server):
_icon = "geowebcache.png"
class Kepler(_Server):
_icon = "kepler.png"
class Mapproxy(_Server):
_icon = "mapproxy.png"
class Mapserver(_Server):
_icon = "mapserver.png"
class Mapstore(_Server):
_icon = "mapstore.png"
class Mviewer(_Server):
_icon = "mviewer.png"
class Pg_Tileserv(_Server):
_icon = "pg_tileserv.png"
class Pycsw(_Server):
_icon = "pycsw.png"
class Pygeoapi(_Server):
_icon = "pygeoapi.png"
class QGISServer(_Server):
_icon = "qgis-server.png"
class Zooproject(_Server):
_icon = "zooproject.png"
# Aliases

@ -0,0 +1,11 @@
# This module is automatically generated by autogen.sh. DO NOT EDIT.
from . import _GIS
class _Toolkit(_GIS):
_type = "toolkit"
_icon_dir = "resources/gis/toolkit"
# Aliases

@ -36,6 +36,10 @@ class Druid(_Database):
_icon = "druid.png" _icon = "druid.png"
class Duckdb(_Database):
_icon = "duckdb.png"
class Hbase(_Database): class Hbase(_Database):
_icon = "hbase.png" _icon = "hbase.png"
@ -76,6 +80,10 @@ class Postgresql(_Database):
_icon = "postgresql.png" _icon = "postgresql.png"
class Qdrant(_Database):
_icon = "qdrant.png"
class Scylla(_Database): class Scylla(_Database):
_icon = "scylla.png" _icon = "scylla.png"
@ -93,3 +101,4 @@ MongoDB = Mongodb
MSSQL = Mssql MSSQL = Mssql
MySQL = Mysql MySQL = Mysql
PostgreSQL = Postgresql PostgreSQL = Postgresql
Qdrant = Qdrant

@ -20,6 +20,10 @@ class Awx(_Iac):
_icon = "awx.png" _icon = "awx.png"
class Pulumi(_Iac):
_icon = "pulumi.png"
class Puppet(_Iac): class Puppet(_Iac):
_icon = "puppet.png" _icon = "puppet.png"

@ -24,6 +24,18 @@ class Caddy(_Network):
_icon = "caddy.png" _icon = "caddy.png"
class CiscoRouter(_Network):
_icon = "cisco-router.png"
class CiscoSwitchL2(_Network):
_icon = "cisco-switch-l2.png"
class CiscoSwitchL3(_Network):
_icon = "cisco-switch-l3.png"
class Consul(_Network): class Consul(_Network):
_icon = "consul.png" _icon = "consul.png"

@ -0,0 +1,15 @@
# This module is automatically generated by autogen.sh. DO NOT EDIT.
from . import _Saas
class _Automation(_Saas):
_type = "automation"
_icon_dir = "resources/saas/automation"
class N8N(_Automation):
_icon = "n8n.png"
# Aliases

@ -20,4 +20,8 @@ class Fastly(_Cdn):
_icon = "fastly.png" _icon = "fastly.png"
class Imperva(_Cdn):
_icon = "imperva.png"
# Aliases # Aliases

@ -1,5 +1,5 @@
# use latest python alpine image. # use latest python alpine image.
FROM python:3.13.1-alpine3.20 FROM python:3.13.3-alpine3.20
# install system dependencies. # install system dependencies.
RUN apk update && apk add --no-cache \ RUN apk update && apk add --no-cache \

@ -211,9 +211,9 @@ with Diagram("Advanced Web Service with On-Premises", show=False):
ingress >> grpcsvc >> aggregator ingress >> grpcsvc >> aggregator
``` ```
![advanced web service with on-premise diagram](/img/advanced_web_service_with_on-premise.png) ![advanced web service with on-premises diagram](/img/advanced_web_service_with_on-premises.png)
## Advanced Web Service with On-Premise (with colors and labels) ## Advanced Web Service with On-Premises (with colors and labels)
```python ```python
from diagrams import Cluster, Diagram, Edge from diagrams import Cluster, Diagram, Edge
@ -226,7 +226,7 @@ from diagrams.onprem.monitoring import Grafana, Prometheus
from diagrams.onprem.network import Nginx from diagrams.onprem.network import Nginx
from diagrams.onprem.queue import Kafka from diagrams.onprem.queue import Kafka
with Diagram(name="Advanced Web Service with On-Premise (colored)", show=False): with Diagram(name="Advanced Web Service with On-Premises (colored)", show=False):
ingress = Nginx("ingress") ingress = Nginx("ingress")
metrics = Prometheus("metric") metrics = Prometheus("metric")
@ -254,7 +254,7 @@ with Diagram(name="Advanced Web Service with On-Premise (colored)", show=False):
ingress >> Edge(color="darkgreen") << grpcsvc >> Edge(color="darkorange") >> aggregator ingress >> Edge(color="darkgreen") << grpcsvc >> Edge(color="darkorange") >> aggregator
``` ```
![advanced web service with on-premise diagram colored](/img/advanced_web_service_with_on-premise_colored.png) ![advanced web service with on-premises diagram colored](/img/advanced_web_service_with_on-premises_colored.png)
## RabbitMQ Consumers with Custom Nodes ## RabbitMQ Consumers with Custom Nodes

@ -7,7 +7,7 @@ title: Installation
**diagrams** uses [Graphviz](https://www.graphviz.org/) to render the diagram, so you need to [install Graphviz](https://graphviz.gitlab.io/download/) to use it. **diagrams** uses [Graphviz](https://www.graphviz.org/) to render the diagram, so you need to [install Graphviz](https://graphviz.gitlab.io/download/) to use it.
> macOS users using [Homebrew](https://brew.sh) can install Graphviz via `brew install graphviz` . Similarly, Windows users with [Chocolatey](https://chocolatey.org) installed can run `choco install graphviz`. > macOS users using [Homebrew](https://brew.sh) can install Graphviz via `brew install graphviz` . Similarly, Windows users with [Chocolatey](https://chocolatey.org) installed can run `choco install graphviz` or use [Winget](https://learn.microsoft.com/windows/package-manager/) via `winget install Graphviz.Graphviz -i`.
After installing Graphviz (or if you already have it), install **diagrams**: After installing Graphviz (or if you already have it), install **diagrams**:
@ -20,6 +20,9 @@ $ pipenv install diagrams
# using poetry # using poetry
$ poetry add diagrams $ poetry add diagrams
# using uv
$ uv tool install diagrams
``` ```
## Quick Start ## Quick Start
@ -47,6 +50,14 @@ This generates the diagram below:
It will be saved as `web_service.png` in your working directory. It will be saved as `web_service.png` in your working directory.
### CLI
With the `diagrams` CLI you can process one or more diagram files at once.
```shell
$ diagrams diagram1.py diagram2.py
```
## Next ## Next
See more [Examples](/docs/getting-started/examples) or see the [Guides](/docs/guides/diagram) page for more details. See more [Examples](/docs/getting-started/examples) or see the [Guides](/docs/guides/diagram) page for more details.

@ -65,5 +65,131 @@ with Diagram(name="Advanced Web Service with On-Premises (colored)", show=False)
>> Edge(color="darkorange") \ >> Edge(color="darkorange") \
>> aggregator >> aggregator
``` ```
![advanced web service with on-premise diagram colored](/img/advanced_web_service_with_on-premise_colored.png)
![advanced web service with on-premises diagram colored](/img/advanced_web_service_with_on-premises_colored.png) ## Less Edges
As you can see on the previous graph the edges can quickly become noisy. Below are two examples to solve this problem.
One approach is to get creative with the Node class to create blank placeholders, together with named nodes within Clusters, and then only pointing to single named elements within those Clusters.
Compare the output below to the example output above .
```python
from diagrams import Cluster, Diagram, Node
from diagrams.onprem.analytics import Spark
from diagrams.onprem.compute import Server
from diagrams.onprem.database import PostgreSQL
from diagrams.onprem.inmemory import Redis
from diagrams.onprem.aggregator import Fluentd
from diagrams.onprem.monitoring import Grafana, Prometheus
from diagrams.onprem.network import Nginx
from diagrams.onprem.queue import Kafka
with Diagram("\nAdvanced Web Service with On-Premise Less edges", show=False) as diag:
ingress = Nginx("ingress")
with Cluster("Service Cluster"):
serv1 = Server("grpc1")
serv2 = Server("grpc2")
serv3 = Server("grpc3")
with Cluster(""):
blankHA = Node("", shape="plaintext", width="0", height="0")
metrics = Prometheus("metric")
metrics << Grafana("monitoring")
aggregator = Fluentd("logging")
blankHA >> aggregator >> Kafka("stream") >> Spark("analytics")
with Cluster("Database HA"):
db = PostgreSQL("users")
db - PostgreSQL("replica") << metrics
blankHA >> db
with Cluster("Sessions HA"):
sess = Redis("session")
sess - Redis("replica") << metrics
blankHA >> sess
ingress >> serv2 >> blankHA
diag
```
![advanced web service with on-premise less edges](/img/advanced_web_service_with_on-premise_less_edges.png)
## Merged Edges
Yet another option is to set the graph_attr dictionary key "concentrate" to "true".
Note the following restrictions:
1. the Edge must end at the same headport
2. This only works when the "splines" graph_attr key is set to the value "spline". It has no effect when the value was set to "ortho", which is the default for the diagrams library.
3. this will only work with the "dot" layout engine, which is the default for the diagrams library.
For more information see:
https://graphviz.gitlab.io/doc/info/attrs.html#d:concentrate
https://www.graphviz.org/pdf/dotguide.pdf Section 3.3 Concentrators
```python
from diagrams import Cluster, Diagram, Edge, Node
from diagrams.onprem.analytics import Spark
from diagrams.onprem.compute import Server
from diagrams.onprem.database import PostgreSQL
from diagrams.onprem.inmemory import Redis
from diagrams.onprem.aggregator import Fluentd
from diagrams.onprem.monitoring import Grafana, Prometheus
from diagrams.onprem.network import Nginx
from diagrams.onprem.queue import Kafka
graph_attr = {
"concentrate": "true",
"splines": "spline",
}
edge_attr = {
"minlen":"3",
}
with Diagram("\n\nAdvanced Web Service with On-Premise Merged edges", show=False,
graph_attr=graph_attr,
edge_attr=edge_attr) as diag:
ingress = Nginx("ingress")
metrics = Prometheus("metric")
metrics << Edge(minlen="0") << Grafana("monitoring")
with Cluster("Service Cluster"):
grpsrv = [
Server("grpc1"),
Server("grpc2"),
Server("grpc3")]
blank = Node("", shape="plaintext", height="0.0", width="0.0")
with Cluster("Sessions HA"):
sess = Redis("session")
sess - Redis("replica") << metrics
with Cluster("Database HA"):
db = PostgreSQL("users")
db - PostgreSQL("replica") << metrics
aggregator = Fluentd("logging")
aggregator >> Kafka("stream") >> Spark("analytics")
ingress >> [grpsrv[0], grpsrv[1], grpsrv[2],]
[grpsrv[0], grpsrv[1], grpsrv[2],] - Edge(headport="w", minlen="1") - blank
blank >> Edge(headport="w", minlen="2") >> [sess, db, aggregator]
diag
```
![advanced web service with on-premise merged edges](/img/advanced_web_service_with_on-premise_merged_edges.png)

@ -203,6 +203,9 @@ Node classes list of the aws provider.
<img width="30" src="/img/resources/aws/compute/elastic-container-service-service.png" alt="ElasticContainerServiceService" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/compute/elastic-container-service-service.png" alt="ElasticContainerServiceService" style="float: left; padding-right: 5px;" >
**diagrams.aws.compute.ElasticContainerServiceService** **diagrams.aws.compute.ElasticContainerServiceService**
<img width="30" src="/img/resources/aws/compute/elastic-container-service-task.png" alt="ElasticContainerServiceTask" style="float: left; padding-right: 5px;" >
**diagrams.aws.compute.ElasticContainerServiceTask**
<img width="30" src="/img/resources/aws/compute/elastic-container-service.png" alt="ElasticContainerService" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/compute/elastic-container-service.png" alt="ElasticContainerService" style="float: left; padding-right: 5px;" >
**diagrams.aws.compute.ElasticContainerService**, **ECS** (alias) **diagrams.aws.compute.ElasticContainerService**, **ECS** (alias)
@ -395,6 +398,9 @@ Node classes list of the aws provider.
<img width="30" src="/img/resources/aws/devtools/cloud9.png" alt="Cloud9" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/devtools/cloud9.png" alt="Cloud9" style="float: left; padding-right: 5px;" >
**diagrams.aws.devtools.Cloud9** **diagrams.aws.devtools.Cloud9**
<img width="30" src="/img/resources/aws/devtools/cloudshell.png" alt="Cloudshell" style="float: left; padding-right: 5px;" >
**diagrams.aws.devtools.Cloudshell**
<img width="30" src="/img/resources/aws/devtools/codeartifact.png" alt="Codeartifact" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/devtools/codeartifact.png" alt="Codeartifact" style="float: left; padding-right: 5px;" >
**diagrams.aws.devtools.Codeartifact** **diagrams.aws.devtools.Codeartifact**
@ -584,9 +590,24 @@ Node classes list of the aws provider.
<img width="30" src="/img/resources/aws/integration/eventbridge-default-event-bus-resource.png" alt="EventbridgeDefaultEventBusResource" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/integration/eventbridge-default-event-bus-resource.png" alt="EventbridgeDefaultEventBusResource" style="float: left; padding-right: 5px;" >
**diagrams.aws.integration.EventbridgeDefaultEventBusResource** **diagrams.aws.integration.EventbridgeDefaultEventBusResource**
<img width="30" src="/img/resources/aws/integration/eventbridge-event.png" alt="EventbridgeEvent" style="float: left; padding-right: 5px;" >
**diagrams.aws.integration.EventbridgeEvent**
<img width="30" src="/img/resources/aws/integration/eventbridge-pipes.png" alt="EventbridgePipes" style="float: left; padding-right: 5px;" >
**diagrams.aws.integration.EventbridgePipes**
<img width="30" src="/img/resources/aws/integration/eventbridge-rule.png" alt="EventbridgeRule" style="float: left; padding-right: 5px;" >
**diagrams.aws.integration.EventbridgeRule**
<img width="30" src="/img/resources/aws/integration/eventbridge-saas-partner-event-bus-resource.png" alt="EventbridgeSaasPartnerEventBusResource" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/integration/eventbridge-saas-partner-event-bus-resource.png" alt="EventbridgeSaasPartnerEventBusResource" style="float: left; padding-right: 5px;" >
**diagrams.aws.integration.EventbridgeSaasPartnerEventBusResource** **diagrams.aws.integration.EventbridgeSaasPartnerEventBusResource**
<img width="30" src="/img/resources/aws/integration/eventbridge-scheduler.png" alt="EventbridgeScheduler" style="float: left; padding-right: 5px;" >
**diagrams.aws.integration.EventbridgeScheduler**
<img width="30" src="/img/resources/aws/integration/eventbridge-schema.png" alt="EventbridgeSchema" style="float: left; padding-right: 5px;" >
**diagrams.aws.integration.EventbridgeSchema**
<img width="30" src="/img/resources/aws/integration/eventbridge.png" alt="Eventbridge" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/integration/eventbridge.png" alt="Eventbridge" style="float: left; padding-right: 5px;" >
**diagrams.aws.integration.Eventbridge** **diagrams.aws.integration.Eventbridge**
@ -980,6 +1001,9 @@ Node classes list of the aws provider.
<img width="30" src="/img/resources/aws/management/trusted-advisor.png" alt="TrustedAdvisor" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/management/trusted-advisor.png" alt="TrustedAdvisor" style="float: left; padding-right: 5px;" >
**diagrams.aws.management.TrustedAdvisor** **diagrams.aws.management.TrustedAdvisor**
<img width="30" src="/img/resources/aws/management/user-notifications.png" alt="UserNotifications" style="float: left; padding-right: 5px;" >
**diagrams.aws.management.UserNotifications**
<img width="30" src="/img/resources/aws/management/well-architected-tool.png" alt="WellArchitectedTool" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/management/well-architected-tool.png" alt="WellArchitectedTool" style="float: left; padding-right: 5px;" >
**diagrams.aws.management.WellArchitectedTool** **diagrams.aws.management.WellArchitectedTool**
@ -1073,6 +1097,9 @@ Node classes list of the aws provider.
<img width="30" src="/img/resources/aws/ml/augmented-ai.png" alt="AugmentedAi" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/ml/augmented-ai.png" alt="AugmentedAi" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.AugmentedAi** **diagrams.aws.ml.AugmentedAi**
<img width="30" src="/img/resources/aws/ml/bedrock.png" alt="Bedrock" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.Bedrock**
<img width="30" src="/img/resources/aws/ml/comprehend.png" alt="Comprehend" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/ml/comprehend.png" alt="Comprehend" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.Comprehend** **diagrams.aws.ml.Comprehend**
@ -1115,6 +1142,9 @@ Node classes list of the aws provider.
<img width="30" src="/img/resources/aws/ml/polly.png" alt="Polly" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/ml/polly.png" alt="Polly" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.Polly** **diagrams.aws.ml.Polly**
<img width="30" src="/img/resources/aws/ml/q.png" alt="Q" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.Q**
<img width="30" src="/img/resources/aws/ml/rekognition-image.png" alt="RekognitionImage" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/ml/rekognition-image.png" alt="RekognitionImage" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.RekognitionImage** **diagrams.aws.ml.RekognitionImage**

@ -1571,8 +1571,8 @@ Node classes list of azure provider.
<img width="30" src="/img/resources/azure/ml/azure-open-ai.png" alt="AzureOpenAI" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/azure/ml/azure-open-ai.png" alt="AzureOpenAI" style="float: left; padding-right: 5px;" >
**diagrams.azure.ml.AzureOpenAI** **diagrams.azure.ml.AzureOpenAI**
<img width="30" src="/img/resources/azure/ml/azure-speed-to-text.png" alt="AzureSpeedToText" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/azure/ml/azure-speech-service.png" alt="AzureSpeechService" style="float: left; padding-right: 5px;" >
**diagrams.azure.ml.AzureSpeedToText** **diagrams.azure.ml.AzureSpeechService**
<img width="30" src="/img/resources/azure/ml/batch-ai.png" alt="BatchAI" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/azure/ml/batch-ai.png" alt="BatchAI" style="float: left; padding-right: 5px;" >
**diagrams.azure.ml.BatchAI** **diagrams.azure.ml.BatchAI**

@ -0,0 +1,243 @@
---
id: gis
title: GIS
---
Node classes list of the gis provider.
## gis.cli
<img width="30" src="/img/resources/gis/cli/gdal.png" alt="Gdal" style="float: left; padding-right: 5px;" >
**diagrams.gis.cli.Gdal**
<img width="30" src="/img/resources/gis/cli/imposm.png" alt="Imposm" style="float: left; padding-right: 5px;" >
**diagrams.gis.cli.Imposm**
<img width="30" src="/img/resources/gis/cli/lastools.png" alt="Lastools" style="float: left; padding-right: 5px;" >
**diagrams.gis.cli.Lastools**
<img width="30" src="/img/resources/gis/cli/mapnik.png" alt="Mapnik" style="float: left; padding-right: 5px;" >
**diagrams.gis.cli.Mapnik**
<img width="30" src="/img/resources/gis/cli/mdal.png" alt="Mdal" style="float: left; padding-right: 5px;" >
**diagrams.gis.cli.Mdal**
<img width="30" src="/img/resources/gis/cli/pdal.png" alt="Pdal" style="float: left; padding-right: 5px;" >
**diagrams.gis.cli.Pdal**
## gis.data
<img width="30" src="/img/resources/gis/data/ban.png" alt="BAN" style="float: left; padding-right: 5px;" >
**diagrams.gis.data.BAN**
<img width="30" src="/img/resources/gis/data/here.png" alt="Here" style="float: left; padding-right: 5px;" >
**diagrams.gis.data.Here**
<img width="30" src="/img/resources/gis/data/ign.png" alt="IGN" style="float: left; padding-right: 5px;" >
**diagrams.gis.data.IGN**
<img width="30" src="/img/resources/gis/data/openstreetmap.png" alt="Openstreetmap" style="float: left; padding-right: 5px;" >
**diagrams.gis.data.Openstreetmap**
<img width="30" src="/img/resources/gis/data/overturemaps.png" alt="Overturemaps" style="float: left; padding-right: 5px;" >
**diagrams.gis.data.Overturemaps**
## gis.database
<img width="30" src="/img/resources/gis/database/postgis.png" alt="Postgis" style="float: left; padding-right: 5px;" >
**diagrams.gis.database.Postgis**
## gis.desktop
<img width="30" src="/img/resources/gis/desktop/maptunik.png" alt="Maptunik" style="float: left; padding-right: 5px;" >
**diagrams.gis.desktop.Maptunik**
<img width="30" src="/img/resources/gis/desktop/qgis.png" alt="QGIS" style="float: left; padding-right: 5px;" >
**diagrams.gis.desktop.QGIS**
## gis.format
<img width="30" src="/img/resources/gis/format/geopackage.png" alt="Geopackage" style="float: left; padding-right: 5px;" >
**diagrams.gis.format.Geopackage**
<img width="30" src="/img/resources/gis/format/geoparquet.png" alt="Geoparquet" style="float: left; padding-right: 5px;" >
**diagrams.gis.format.Geoparquet**
## gis.geocoding
<img width="30" src="/img/resources/gis/geocoding/addok.png" alt="Addok" style="float: left; padding-right: 5px;" >
**diagrams.gis.geocoding.Addok**
<img width="30" src="/img/resources/gis/geocoding/gisgraphy.png" alt="Gisgraphy" style="float: left; padding-right: 5px;" >
**diagrams.gis.geocoding.Gisgraphy**
<img width="30" src="/img/resources/gis/geocoding/nominatim.png" alt="Nominatim" style="float: left; padding-right: 5px;" >
**diagrams.gis.geocoding.Nominatim**
<img width="30" src="/img/resources/gis/geocoding/pelias.png" alt="Pelias" style="float: left; padding-right: 5px;" >
**diagrams.gis.geocoding.Pelias**
## gis.georchestra
## gis.java
<img width="30" src="/img/resources/gis/java/geotools.png" alt="Geotools" style="float: left; padding-right: 5px;" >
**diagrams.gis.java.Geotools**
## gis.javascript
<img width="30" src="/img/resources/gis/javascript/cesium.png" alt="Cesium" style="float: left; padding-right: 5px;" >
**diagrams.gis.javascript.Cesium**
<img width="30" src="/img/resources/gis/javascript/geostyler.png" alt="Geostyler" style="float: left; padding-right: 5px;" >
**diagrams.gis.javascript.Geostyler**
<img width="30" src="/img/resources/gis/javascript/keplerjs.png" alt="Keplerjs" style="float: left; padding-right: 5px;" >
**diagrams.gis.javascript.Keplerjs**
<img width="30" src="/img/resources/gis/javascript/leaflet.png" alt="Leaflet" style="float: left; padding-right: 5px;" >
**diagrams.gis.javascript.Leaflet**
<img width="30" src="/img/resources/gis/javascript/maplibre.png" alt="Maplibre" style="float: left; padding-right: 5px;" >
**diagrams.gis.javascript.Maplibre**
<img width="30" src="/img/resources/gis/javascript/ol-ext.png" alt="OlExt" style="float: left; padding-right: 5px;" >
**diagrams.gis.javascript.OlExt**
<img width="30" src="/img/resources/gis/javascript/openlayers.png" alt="Openlayers" style="float: left; padding-right: 5px;" >
**diagrams.gis.javascript.Openlayers**
<img width="30" src="/img/resources/gis/javascript/turfjs.png" alt="Turfjs" style="float: left; padding-right: 5px;" >
**diagrams.gis.javascript.Turfjs**
## gis.mobile
<img width="30" src="/img/resources/gis/mobile/mergin.png" alt="Mergin" style="float: left; padding-right: 5px;" >
**diagrams.gis.mobile.Mergin**
<img width="30" src="/img/resources/gis/mobile/qfield.png" alt="Qfield" style="float: left; padding-right: 5px;" >
**diagrams.gis.mobile.Qfield**
<img width="30" src="/img/resources/gis/mobile/smash.png" alt="Smash" style="float: left; padding-right: 5px;" >
**diagrams.gis.mobile.Smash**
## gis.ogc
<img width="30" src="/img/resources/gis/ogc/ogc.png" alt="OGC" style="float: left; padding-right: 5px;" >
**diagrams.gis.ogc.OGC**
<img width="30" src="/img/resources/gis/ogc/wfs.png" alt="WFS" style="float: left; padding-right: 5px;" >
**diagrams.gis.ogc.WFS**
<img width="30" src="/img/resources/gis/ogc/wms.png" alt="WMS" style="float: left; padding-right: 5px;" >
**diagrams.gis.ogc.WMS**
## gis.organization
<img width="30" src="/img/resources/gis/organization/osgeo.png" alt="Osgeo" style="float: left; padding-right: 5px;" >
**diagrams.gis.organization.Osgeo**
## gis.python
<img width="30" src="/img/resources/gis/python/geopandas.png" alt="Geopandas" style="float: left; padding-right: 5px;" >
**diagrams.gis.python.Geopandas**
<img width="30" src="/img/resources/gis/python/pysal.png" alt="Pysal" style="float: left; padding-right: 5px;" >
**diagrams.gis.python.Pysal**
## gis.routing
<img width="30" src="/img/resources/gis/routing/graphhopper.png" alt="Graphhopper" style="float: left; padding-right: 5px;" >
**diagrams.gis.routing.Graphhopper**
<img width="30" src="/img/resources/gis/routing/osrm.png" alt="Osrm" style="float: left; padding-right: 5px;" >
**diagrams.gis.routing.Osrm**
<img width="30" src="/img/resources/gis/routing/pgrouting.png" alt="Pgrouting" style="float: left; padding-right: 5px;" >
**diagrams.gis.routing.Pgrouting**
<img width="30" src="/img/resources/gis/routing/valhalla.png" alt="Valhalla" style="float: left; padding-right: 5px;" >
**diagrams.gis.routing.Valhalla**
## gis.server
<img width="30" src="/img/resources/gis/server/actinia.png" alt="Actinia" style="float: left; padding-right: 5px;" >
**diagrams.gis.server.Actinia**
<img width="30" src="/img/resources/gis/server/baremaps.png" alt="Baremaps" style="float: left; padding-right: 5px;" >
**diagrams.gis.server.Baremaps**
<img width="30" src="/img/resources/gis/server/deegree.png" alt="Deegree" style="float: left; padding-right: 5px;" >
**diagrams.gis.server.Deegree**
<img width="30" src="/img/resources/gis/server/g3w-suite.png" alt="G3WSuite" style="float: left; padding-right: 5px;" >
**diagrams.gis.server.G3WSuite**
<img width="30" src="/img/resources/gis/server/geohealthcheck.png" alt="Geohealthcheck" style="float: left; padding-right: 5px;" >
**diagrams.gis.server.Geohealthcheck**
<img width="30" src="/img/resources/gis/server/geomapfish.png" alt="Geomapfish" style="float: left; padding-right: 5px;" >
**diagrams.gis.server.Geomapfish**
<img width="30" src="/img/resources/gis/server/geomesa.png" alt="Geomesa" style="float: left; padding-right: 5px;" >
**diagrams.gis.server.Geomesa**
<img width="30" src="/img/resources/gis/server/geonetwork.png" alt="Geonetwork" style="float: left; padding-right: 5px;" >
**diagrams.gis.server.Geonetwork**
<img width="30" src="/img/resources/gis/server/geonode.png" alt="Geonode" style="float: left; padding-right: 5px;" >
**diagrams.gis.server.Geonode**
<img width="30" src="/img/resources/gis/server/georchestra.png" alt="Georchestra" style="float: left; padding-right: 5px;" >
**diagrams.gis.server.Georchestra**
<img width="30" src="/img/resources/gis/server/geoserver.png" alt="Geoserver" style="float: left; padding-right: 5px;" >
**diagrams.gis.server.Geoserver**
<img width="30" src="/img/resources/gis/server/geowebcache.png" alt="Geowebcache" style="float: left; padding-right: 5px;" >
**diagrams.gis.server.Geowebcache**
<img width="30" src="/img/resources/gis/server/kepler.png" alt="Kepler" style="float: left; padding-right: 5px;" >
**diagrams.gis.server.Kepler**
<img width="30" src="/img/resources/gis/server/mapproxy.png" alt="Mapproxy" style="float: left; padding-right: 5px;" >
**diagrams.gis.server.Mapproxy**
<img width="30" src="/img/resources/gis/server/mapserver.png" alt="Mapserver" style="float: left; padding-right: 5px;" >
**diagrams.gis.server.Mapserver**
<img width="30" src="/img/resources/gis/server/mapstore.png" alt="Mapstore" style="float: left; padding-right: 5px;" >
**diagrams.gis.server.Mapstore**
<img width="30" src="/img/resources/gis/server/mviewer.png" alt="Mviewer" style="float: left; padding-right: 5px;" >
**diagrams.gis.server.Mviewer**
<img width="30" src="/img/resources/gis/server/pg_tileserv.png" alt="Pg_Tileserv" style="float: left; padding-right: 5px;" >
**diagrams.gis.server.Pg_Tileserv**
<img width="30" src="/img/resources/gis/server/pycsw.png" alt="Pycsw" style="float: left; padding-right: 5px;" >
**diagrams.gis.server.Pycsw**
<img width="30" src="/img/resources/gis/server/pygeoapi.png" alt="Pygeoapi" style="float: left; padding-right: 5px;" >
**diagrams.gis.server.Pygeoapi**
<img width="30" src="/img/resources/gis/server/qgis-server.png" alt="QGISServer" style="float: left; padding-right: 5px;" >
**diagrams.gis.server.QGISServer**
<img width="30" src="/img/resources/gis/server/zooproject.png" alt="Zooproject" style="float: left; padding-right: 5px;" >
**diagrams.gis.server.Zooproject**

@ -203,6 +203,9 @@ Node classes list of the onprem provider.
<img width="30" src="/img/resources/onprem/database/druid.png" alt="Druid" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/onprem/database/druid.png" alt="Druid" style="float: left; padding-right: 5px;" >
**diagrams.onprem.database.Druid** **diagrams.onprem.database.Druid**
<img width="30" src="/img/resources/onprem/database/duckdb.png" alt="Duckdb" style="float: left; padding-right: 5px;" >
**diagrams.onprem.database.Duckdb**
<img width="30" src="/img/resources/onprem/database/hbase.png" alt="Hbase" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/onprem/database/hbase.png" alt="Hbase" style="float: left; padding-right: 5px;" >
**diagrams.onprem.database.Hbase**, **HBase** (alias) **diagrams.onprem.database.Hbase**, **HBase** (alias)
@ -233,6 +236,9 @@ Node classes list of the onprem provider.
<img width="30" src="/img/resources/onprem/database/postgresql.png" alt="Postgresql" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/onprem/database/postgresql.png" alt="Postgresql" style="float: left; padding-right: 5px;" >
**diagrams.onprem.database.Postgresql**, **PostgreSQL** (alias) **diagrams.onprem.database.Postgresql**, **PostgreSQL** (alias)
<img width="30" src="/img/resources/onprem/database/qdrant.png" alt="Qdrant" style="float: left; padding-right: 5px;" >
**diagrams.onprem.database.Qdrant**, **Qdrant** (alias)
<img width="30" src="/img/resources/onprem/database/scylla.png" alt="Scylla" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/onprem/database/scylla.png" alt="Scylla" style="float: left; padding-right: 5px;" >
**diagrams.onprem.database.Scylla** **diagrams.onprem.database.Scylla**
@ -281,6 +287,9 @@ Node classes list of the onprem provider.
<img width="30" src="/img/resources/onprem/iac/awx.png" alt="Awx" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/onprem/iac/awx.png" alt="Awx" style="float: left; padding-right: 5px;" >
**diagrams.onprem.iac.Awx** **diagrams.onprem.iac.Awx**
<img width="30" src="/img/resources/onprem/iac/pulumi.png" alt="Pulumi" style="float: left; padding-right: 5px;" >
**diagrams.onprem.iac.Pulumi**
<img width="30" src="/img/resources/onprem/iac/puppet.png" alt="Puppet" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/onprem/iac/puppet.png" alt="Puppet" style="float: left; padding-right: 5px;" >
**diagrams.onprem.iac.Puppet** **diagrams.onprem.iac.Puppet**
@ -401,6 +410,15 @@ Node classes list of the onprem provider.
<img width="30" src="/img/resources/onprem/network/caddy.png" alt="Caddy" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/onprem/network/caddy.png" alt="Caddy" style="float: left; padding-right: 5px;" >
**diagrams.onprem.network.Caddy** **diagrams.onprem.network.Caddy**
<img width="30" src="/img/resources/onprem/network/cisco-router.png" alt="CiscoRouter" style="float: left; padding-right: 5px;" >
**diagrams.onprem.network.CiscoRouter**
<img width="30" src="/img/resources/onprem/network/cisco-switch-l2.png" alt="CiscoSwitchL2" style="float: left; padding-right: 5px;" >
**diagrams.onprem.network.CiscoSwitchL2**
<img width="30" src="/img/resources/onprem/network/cisco-switch-l3.png" alt="CiscoSwitchL3" style="float: left; padding-right: 5px;" >
**diagrams.onprem.network.CiscoSwitchL3**
<img width="30" src="/img/resources/onprem/network/consul.png" alt="Consul" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/onprem/network/consul.png" alt="Consul" style="float: left; padding-right: 5px;" >
**diagrams.onprem.network.Consul** **diagrams.onprem.network.Consul**

@ -35,6 +35,12 @@ Node classes list of the saas provider.
<img width="30" src="/img/resources/saas/analytics/stitch.png" alt="Stitch" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/saas/analytics/stitch.png" alt="Stitch" style="float: left; padding-right: 5px;" >
**diagrams.saas.analytics.Stitch** **diagrams.saas.analytics.Stitch**
## saas.automation
<img width="30" src="/img/resources/saas/automation/n8n.png" alt="N8N" style="float: left; padding-right: 5px;" >
**diagrams.saas.automation.N8N**
## saas.cdn ## saas.cdn
@ -47,6 +53,9 @@ Node classes list of the saas provider.
<img width="30" src="/img/resources/saas/cdn/fastly.png" alt="Fastly" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/saas/cdn/fastly.png" alt="Fastly" style="float: left; padding-right: 5px;" >
**diagrams.saas.cdn.Fastly** **diagrams.saas.cdn.Fastly**
<img width="30" src="/img/resources/saas/cdn/imperva.png" alt="Imperva" style="float: left; padding-right: 5px;" >
**diagrams.saas.cdn.Imperva**
## saas.chat ## saas.chat

82
poetry.lock generated

@ -1,4 +1,4 @@
# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. # This file is automatically @generated by Poetry 2.1.3 and should not be changed by hand.
[[package]] [[package]]
name = "astroid" name = "astroid"
@ -6,6 +6,7 @@ version = "3.3.8"
description = "An abstract syntax tree for Python with inference support." description = "An abstract syntax tree for Python with inference support."
optional = false optional = false
python-versions = ">=3.9.0" python-versions = ">=3.9.0"
groups = ["dev"]
files = [ files = [
{file = "astroid-3.3.8-py3-none-any.whl", hash = "sha256:187ccc0c248bfbba564826c26f070494f7bc964fd286b6d9fff4420e55de828c"}, {file = "astroid-3.3.8-py3-none-any.whl", hash = "sha256:187ccc0c248bfbba564826c26f070494f7bc964fd286b6d9fff4420e55de828c"},
{file = "astroid-3.3.8.tar.gz", hash = "sha256:a88c7994f914a4ea8572fac479459f4955eeccc877be3f2d959a33273b0cf40b"}, {file = "astroid-3.3.8.tar.gz", hash = "sha256:a88c7994f914a4ea8572fac479459f4955eeccc877be3f2d959a33273b0cf40b"},
@ -20,6 +21,7 @@ version = "24.10.0"
description = "The uncompromising code formatter." description = "The uncompromising code formatter."
optional = false optional = false
python-versions = ">=3.9" python-versions = ">=3.9"
groups = ["dev"]
files = [ files = [
{file = "black-24.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6668650ea4b685440857138e5fe40cde4d652633b1bdffc62933d0db4ed9812"}, {file = "black-24.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6668650ea4b685440857138e5fe40cde4d652633b1bdffc62933d0db4ed9812"},
{file = "black-24.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1c536fcf674217e87b8cc3657b81809d3c085d7bf3ef262ead700da345bfa6ea"}, {file = "black-24.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1c536fcf674217e87b8cc3657b81809d3c085d7bf3ef262ead700da345bfa6ea"},
@ -66,6 +68,7 @@ version = "3.4.0"
description = "Validate configuration and produce human readable error messages." description = "Validate configuration and produce human readable error messages."
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["dev"]
files = [ files = [
{file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"},
{file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"},
@ -77,6 +80,7 @@ version = "8.1.7"
description = "Composable command line interface toolkit" description = "Composable command line interface toolkit"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
groups = ["dev"]
files = [ files = [
{file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"},
{file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"},
@ -91,6 +95,8 @@ version = "0.4.6"
description = "Cross-platform colored terminal text." description = "Cross-platform colored terminal text."
optional = false optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
groups = ["dev"]
markers = "sys_platform == \"win32\" or platform_system == \"Windows\""
files = [ files = [
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
@ -102,6 +108,7 @@ version = "0.3.9"
description = "serialize all of Python" description = "serialize all of Python"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["dev"]
files = [ files = [
{file = "dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a"}, {file = "dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a"},
{file = "dill-0.3.9.tar.gz", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c"}, {file = "dill-0.3.9.tar.gz", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c"},
@ -117,6 +124,7 @@ version = "0.3.9"
description = "Distribution utilities" description = "Distribution utilities"
optional = false optional = false
python-versions = "*" python-versions = "*"
groups = ["dev"]
files = [ files = [
{file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"},
{file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"},
@ -128,6 +136,8 @@ version = "1.2.2"
description = "Backport of PEP 654 (exception groups)" description = "Backport of PEP 654 (exception groups)"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
groups = ["dev"]
markers = "python_version < \"3.11\""
files = [ files = [
{file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"},
{file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"},
@ -142,6 +152,7 @@ version = "3.16.1"
description = "A platform independent file lock." description = "A platform independent file lock."
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["dev"]
files = [ files = [
{file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"},
{file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"},
@ -150,7 +161,7 @@ files = [
[package.extras] [package.extras]
docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"]
testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"]
typing = ["typing-extensions (>=4.12.2)"] typing = ["typing-extensions (>=4.12.2) ; python_version < \"3.11\""]
[[package]] [[package]]
name = "graphviz" name = "graphviz"
@ -158,6 +169,7 @@ version = "0.20.3"
description = "Simple Python interface for Graphviz" description = "Simple Python interface for Graphviz"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["main"]
files = [ files = [
{file = "graphviz-0.20.3-py3-none-any.whl", hash = "sha256:81f848f2904515d8cd359cc611faba817598d2feaac4027b266aa3eda7b3dde5"}, {file = "graphviz-0.20.3-py3-none-any.whl", hash = "sha256:81f848f2904515d8cd359cc611faba817598d2feaac4027b266aa3eda7b3dde5"},
{file = "graphviz-0.20.3.zip", hash = "sha256:09d6bc81e6a9fa392e7ba52135a9d49f1ed62526f96499325930e87ca1b5925d"}, {file = "graphviz-0.20.3.zip", hash = "sha256:09d6bc81e6a9fa392e7ba52135a9d49f1ed62526f96499325930e87ca1b5925d"},
@ -174,6 +186,7 @@ version = "2.6.2"
description = "File identification library for Python" description = "File identification library for Python"
optional = false optional = false
python-versions = ">=3.9" python-versions = ">=3.9"
groups = ["dev"]
files = [ files = [
{file = "identify-2.6.2-py2.py3-none-any.whl", hash = "sha256:c097384259f49e372f4ea00a19719d95ae27dd5ff0fd77ad630aa891306b82f3"}, {file = "identify-2.6.2-py2.py3-none-any.whl", hash = "sha256:c097384259f49e372f4ea00a19719d95ae27dd5ff0fd77ad630aa891306b82f3"},
{file = "identify-2.6.2.tar.gz", hash = "sha256:fab5c716c24d7a789775228823797296a2994b075fb6080ac83a102772a98cbd"}, {file = "identify-2.6.2.tar.gz", hash = "sha256:fab5c716c24d7a789775228823797296a2994b075fb6080ac83a102772a98cbd"},
@ -188,6 +201,7 @@ version = "2.0.0"
description = "brain-dead simple config-ini parsing" description = "brain-dead simple config-ini parsing"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
groups = ["dev"]
files = [ files = [
{file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"},
{file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"},
@ -199,6 +213,7 @@ version = "5.13.2"
description = "A Python utility / library to sort Python imports." description = "A Python utility / library to sort Python imports."
optional = false optional = false
python-versions = ">=3.8.0" python-versions = ">=3.8.0"
groups = ["dev"]
files = [ files = [
{file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"},
{file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"},
@ -213,6 +228,7 @@ version = "3.1.4"
description = "A very fast and expressive template engine." description = "A very fast and expressive template engine."
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
groups = ["main"]
files = [ files = [
{file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"},
{file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"},
@ -230,6 +246,7 @@ version = "3.0.2"
description = "Safely add untrusted strings to HTML/XML markup." description = "Safely add untrusted strings to HTML/XML markup."
optional = false optional = false
python-versions = ">=3.9" python-versions = ">=3.9"
groups = ["main"]
files = [ files = [
{file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"},
{file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"},
@ -300,6 +317,7 @@ version = "0.7.0"
description = "McCabe checker, plugin for flake8" description = "McCabe checker, plugin for flake8"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
groups = ["dev"]
files = [ files = [
{file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"},
{file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"},
@ -311,6 +329,7 @@ version = "1.0.0"
description = "Type system extensions for programs checked with the mypy type checker." description = "Type system extensions for programs checked with the mypy type checker."
optional = false optional = false
python-versions = ">=3.5" python-versions = ">=3.5"
groups = ["dev"]
files = [ files = [
{file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"},
{file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"},
@ -322,6 +341,7 @@ version = "1.9.1"
description = "Node.js virtual environment builder" description = "Node.js virtual environment builder"
optional = false optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
groups = ["dev"]
files = [ files = [
{file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"},
{file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"},
@ -333,6 +353,7 @@ version = "24.2"
description = "Core utilities for Python packages" description = "Core utilities for Python packages"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["dev"]
files = [ files = [
{file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"},
{file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"},
@ -344,6 +365,7 @@ version = "0.12.1"
description = "Utility library for gitignore style pattern matching of file paths." description = "Utility library for gitignore style pattern matching of file paths."
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["dev"]
files = [ files = [
{file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"},
{file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"},
@ -355,6 +377,7 @@ version = "4.3.6"
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["dev"]
files = [ files = [
{file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"},
{file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"},
@ -371,6 +394,7 @@ version = "1.5.0"
description = "plugin and hook calling mechanisms for python" description = "plugin and hook calling mechanisms for python"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["dev"]
files = [ files = [
{file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"},
{file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"},
@ -386,6 +410,7 @@ version = "4.0.1"
description = "A framework for managing and maintaining multi-language pre-commit hooks." description = "A framework for managing and maintaining multi-language pre-commit hooks."
optional = false optional = false
python-versions = ">=3.9" python-versions = ">=3.9"
groups = ["dev"]
files = [ files = [
{file = "pre_commit-4.0.1-py2.py3-none-any.whl", hash = "sha256:efde913840816312445dc98787724647c65473daefe420785f885e8ed9a06878"}, {file = "pre_commit-4.0.1-py2.py3-none-any.whl", hash = "sha256:efde913840816312445dc98787724647c65473daefe420785f885e8ed9a06878"},
{file = "pre_commit-4.0.1.tar.gz", hash = "sha256:80905ac375958c0444c65e9cebebd948b3cdb518f335a091a670a89d652139d2"}, {file = "pre_commit-4.0.1.tar.gz", hash = "sha256:80905ac375958c0444c65e9cebebd948b3cdb518f335a091a670a89d652139d2"},
@ -398,12 +423,28 @@ nodeenv = ">=0.11.1"
pyyaml = ">=5.1" pyyaml = ">=5.1"
virtualenv = ">=20.10.0" virtualenv = ">=20.10.0"
[[package]]
name = "pygments"
version = "2.19.1"
description = "Pygments is a syntax highlighting package written in Python."
optional = false
python-versions = ">=3.8"
groups = ["dev"]
files = [
{file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"},
{file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"},
]
[package.extras]
windows-terminal = ["colorama (>=0.4.6)"]
[[package]] [[package]]
name = "pylint" name = "pylint"
version = "3.3.3" version = "3.3.3"
description = "python code static checker" description = "python code static checker"
optional = false optional = false
python-versions = ">=3.9.0" python-versions = ">=3.9.0"
groups = ["dev"]
files = [ files = [
{file = "pylint-3.3.3-py3-none-any.whl", hash = "sha256:26e271a2bc8bce0fc23833805a9076dd9b4d5194e2a02164942cb3cdc37b4183"}, {file = "pylint-3.3.3-py3-none-any.whl", hash = "sha256:26e271a2bc8bce0fc23833805a9076dd9b4d5194e2a02164942cb3cdc37b4183"},
{file = "pylint-3.3.3.tar.gz", hash = "sha256:07c607523b17e6d16e2ae0d7ef59602e332caa762af64203c24b41c27139f36a"}, {file = "pylint-3.3.3.tar.gz", hash = "sha256:07c607523b17e6d16e2ae0d7ef59602e332caa762af64203c24b41c27139f36a"},
@ -415,7 +456,7 @@ colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""}
dill = [ dill = [
{version = ">=0.2", markers = "python_version < \"3.11\""}, {version = ">=0.2", markers = "python_version < \"3.11\""},
{version = ">=0.3.7", markers = "python_version >= \"3.12\""}, {version = ">=0.3.7", markers = "python_version >= \"3.12\""},
{version = ">=0.3.6", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, {version = ">=0.3.6", markers = "python_version == \"3.11\""},
] ]
isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" isort = ">=4.2.5,<5.13.0 || >5.13.0,<6"
mccabe = ">=0.6,<0.8" mccabe = ">=0.6,<0.8"
@ -430,25 +471,27 @@ testutils = ["gitpython (>3)"]
[[package]] [[package]]
name = "pytest" name = "pytest"
version = "8.3.4" version = "8.4.0"
description = "pytest: simple powerful testing with Python" description = "pytest: simple powerful testing with Python"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.9"
groups = ["dev"]
files = [ files = [
{file = "pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6"}, {file = "pytest-8.4.0-py3-none-any.whl", hash = "sha256:f40f825768ad76c0977cbacdf1fd37c6f7a468e460ea6a0636078f8972d4517e"},
{file = "pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761"}, {file = "pytest-8.4.0.tar.gz", hash = "sha256:14d920b48472ea0dbf68e45b96cd1ffda4705f33307dcc86c676c1b5104838a6"},
] ]
[package.dependencies] [package.dependencies]
colorama = {version = "*", markers = "sys_platform == \"win32\""} colorama = {version = ">=0.4", markers = "sys_platform == \"win32\""}
exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} exceptiongroup = {version = ">=1", markers = "python_version < \"3.11\""}
iniconfig = "*" iniconfig = ">=1"
packaging = "*" packaging = ">=20"
pluggy = ">=1.5,<2" pluggy = ">=1.5,<2"
pygments = ">=2.7.2"
tomli = {version = ">=1", markers = "python_version < \"3.11\""} tomli = {version = ">=1", markers = "python_version < \"3.11\""}
[package.extras] [package.extras]
dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "requests", "setuptools", "xmlschema"]
[[package]] [[package]]
name = "pytoolconfig" name = "pytoolconfig"
@ -456,6 +499,7 @@ version = "1.3.1"
description = "Python tool configuration" description = "Python tool configuration"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["dev"]
files = [ files = [
{file = "pytoolconfig-1.3.1-py3-none-any.whl", hash = "sha256:5d8cea8ae1996938ec3eaf44567bbc5ef1bc900742190c439a44a704d6e1b62b"}, {file = "pytoolconfig-1.3.1-py3-none-any.whl", hash = "sha256:5d8cea8ae1996938ec3eaf44567bbc5ef1bc900742190c439a44a704d6e1b62b"},
{file = "pytoolconfig-1.3.1.tar.gz", hash = "sha256:51e6bd1a6f108238ae6aab6a65e5eed5e75d456be1c2bf29b04e5c1e7d7adbae"}, {file = "pytoolconfig-1.3.1.tar.gz", hash = "sha256:51e6bd1a6f108238ae6aab6a65e5eed5e75d456be1c2bf29b04e5c1e7d7adbae"},
@ -478,6 +522,7 @@ version = "6.0.2"
description = "YAML parser and emitter for Python" description = "YAML parser and emitter for Python"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["dev"]
files = [ files = [
{file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"},
{file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"},
@ -540,6 +585,7 @@ version = "1.13.0"
description = "a python refactoring library..." description = "a python refactoring library..."
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["dev"]
files = [ files = [
{file = "rope-1.13.0-py3-none-any.whl", hash = "sha256:b435a0c0971244fdcd8741676a9fae697ae614c20cc36003678a7782f25c0d6c"}, {file = "rope-1.13.0-py3-none-any.whl", hash = "sha256:b435a0c0971244fdcd8741676a9fae697ae614c20cc36003678a7782f25c0d6c"},
{file = "rope-1.13.0.tar.gz", hash = "sha256:51437d2decc8806cd5e9dd1fd9c1306a6d9075ecaf78d191af85fc1dfface880"}, {file = "rope-1.13.0.tar.gz", hash = "sha256:51437d2decc8806cd5e9dd1fd9c1306a6d9075ecaf78d191af85fc1dfface880"},
@ -559,6 +605,8 @@ version = "2.1.0"
description = "A lil' TOML parser" description = "A lil' TOML parser"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["dev"]
markers = "python_version < \"3.11\""
files = [ files = [
{file = "tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"}, {file = "tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"},
{file = "tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8"}, {file = "tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8"},
@ -570,6 +618,7 @@ version = "0.13.2"
description = "Style preserving TOML library" description = "Style preserving TOML library"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["dev"]
files = [ files = [
{file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"},
{file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"},
@ -581,6 +630,8 @@ version = "4.12.2"
description = "Backported and Experimental Type Hints for Python 3.8+" description = "Backported and Experimental Type Hints for Python 3.8+"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["dev"]
markers = "python_version < \"3.11\""
files = [ files = [
{file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"},
{file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"},
@ -592,6 +643,7 @@ version = "20.27.1"
description = "Virtual Python Environment builder" description = "Virtual Python Environment builder"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
groups = ["dev"]
files = [ files = [
{file = "virtualenv-20.27.1-py3-none-any.whl", hash = "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4"}, {file = "virtualenv-20.27.1-py3-none-any.whl", hash = "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4"},
{file = "virtualenv-20.27.1.tar.gz", hash = "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba"}, {file = "virtualenv-20.27.1.tar.gz", hash = "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba"},
@ -604,9 +656,9 @@ platformdirs = ">=3.9.1,<5"
[package.extras] [package.extras]
docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"]
test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8) ; platform_python_implementation == \"PyPy\" or platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and python_version >= \"3.13\"", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10) ; platform_python_implementation == \"CPython\""]
[metadata] [metadata]
lock-version = "2.0" lock-version = "2.1"
python-versions = "^3.9" python-versions = "^3.9"
content-hash = "64d8272592088d0e7a3aee3d7318d26acd2de67d7875b5bd00f10a593aec84dc" content-hash = "f774f01a9f7a5b2068566d1adf607e388e055eeb6c59245e4ac820660337a9dc"

@ -1,6 +1,6 @@
[tool.poetry] [tool.poetry]
name = "diagrams" name = "diagrams"
version = "0.24.1" version = "0.24.4"
description = "Diagram as Code" description = "Diagram as Code"
license = "MIT" license = "MIT"
authors = ["mingrammer <mingrammer@gmail.com>"] authors = ["mingrammer <mingrammer@gmail.com>"]
@ -17,14 +17,14 @@ python = "^3.9"
graphviz = ">=0.13.2,<0.21.0" graphviz = ">=0.13.2,<0.21.0"
jinja2 = ">=2.10,<4.0" jinja2 = ">=2.10,<4.0"
typed-ast = {version="^1.5.5", markers="python_version<'3.8'"} typed-ast = {version="^1.5.5", markers="python_version<'3.8'"}
pre-commit = "^4.0.1"
[tool.poetry.dev-dependencies] [tool.poetry.dev-dependencies]
pytest = "^8.3" pytest = "^8.4"
pylint = "^3.3" pylint = "^3.3"
rope = "^1.13" rope = "^1.13"
isort = "^5.13" isort = "^5.13"
black = "^24.4" black = "^24.4"
pre-commit = "^4.0.1"
[tool.black] [tool.black]
line-length=120 line-length=120

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

@ -0,0 +1,355 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="63.944012"
height="63.944012"
viewBox="0 0 16.91852 16.91852"
version="1.1"
id="svg1161"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1163"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
units="px"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="2.8934905"
inkscape:cx="-47.693263"
inkscape:cy="-98.669757"
inkscape:window-width="2400"
inkscape:window-height="1271"
inkscape:window-x="2391"
inkscape:window-y="-9"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1158">
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353862">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353864"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353858">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353860"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353854">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353856"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353850">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353852"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath371594">
<rect
style="fill:#85127e;fill-opacity:1;stroke:none;stroke-width:0.989769;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect371596"
width="37.187374"
height="37.187374"
x="217.75404"
y="145.88028" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353862-9">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353864-8"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353858-3">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353860-6"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353854-5">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353856-3"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353850-1">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353852-3"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath371594-4">
<rect
style="fill:#85127e;fill-opacity:1;stroke:none;stroke-width:0.989769;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect371596-8"
width="37.187374"
height="37.187374"
x="217.75404"
y="145.88028" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353862-9-3">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353864-8-8"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353858-3-6">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353860-6-3"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353854-5-8">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353856-3-2"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353850-1-7">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353852-3-3"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath371594-4-2">
<rect
style="fill:#85127e;fill-opacity:1;stroke:none;stroke-width:0.989769;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect371596-8-0"
width="37.187374"
height="37.187374"
x="217.75404"
y="145.88028" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353862-9-3-0">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353864-8-8-7"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353858-3-6-6">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353860-6-3-6"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353854-5-8-4">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353856-3-2-8"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353850-1-7-4">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353852-3-3-5"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath371594-4-2-8">
<rect
style="fill:#85127e;fill-opacity:1;stroke:none;stroke-width:0.989769;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect371596-8-0-2"
width="37.187374"
height="37.187374"
x="217.75404"
y="145.88028" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353862-9-3-0-8">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353864-8-8-7-8"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353858-3-6-6-0">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353860-6-3-6-6"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353854-5-8-4-9">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353856-3-2-8-7"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353850-1-7-4-1">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353852-3-3-5-2"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath371594-4-2-8-2">
<rect
style="fill:#85127e;fill-opacity:1;stroke:none;stroke-width:0.989769;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect371596-8-0-2-2"
width="37.187374"
height="37.187374"
x="217.75404"
y="145.88028" />
</clipPath>
</defs>
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-4.9825511,-4.9825504)">
<g
id="g5250"
transform="translate(-0.20368658,-0.10736832)">
<rect
style="fill:#2dd9cb;fill-opacity:1;stroke:none;stroke-width:0.168649;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect371620"
width="4.23177"
height="14.389493"
x="5.1819592"
y="7.5520296" />
<rect
style="fill:#2a2661;fill-opacity:1;stroke:none;stroke-width:0.144688;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect371620-1"
width="4.23177"
height="10.591175"
x="9.4137173"
y="11.350343" />
<rect
style="fill:#2dd9cb;fill-opacity:1;stroke:none;stroke-width:0.097886;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect371620-2"
width="4.23177"
height="4.847527"
x="13.645481"
y="17.093992" />
<rect
style="fill:#85127e;fill-opacity:1;stroke:none;stroke-width:0.182146;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect371620-9"
width="4.23177"
height="16.784679"
x="17.877266"
y="5.1568346" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

@ -0,0 +1,335 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="63.944012"
height="63.944012"
viewBox="0 0 16.91852 16.91852"
version="1.1"
id="svg1161"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1163"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
units="px"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="2.8934905"
inkscape:cx="54.259726"
inkscape:cy="-71.021489"
inkscape:window-width="2400"
inkscape:window-height="1271"
inkscape:window-x="2391"
inkscape:window-y="-9"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1158">
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353862">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353864"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353858">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353860"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353854">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353856"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353850">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353852"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath371594">
<rect
style="fill:#85127e;fill-opacity:1;stroke:none;stroke-width:0.989769;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect371596"
width="37.187374"
height="37.187374"
x="217.75404"
y="145.88028" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353862-9">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353864-8"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353858-3">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353860-6"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353854-5">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353856-3"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353850-1">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353852-3"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath371594-4">
<rect
style="fill:#85127e;fill-opacity:1;stroke:none;stroke-width:0.989769;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect371596-8"
width="37.187374"
height="37.187374"
x="217.75404"
y="145.88028" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353862-9-3">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353864-8-8"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353858-3-6">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353860-6-3"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353854-5-8">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353856-3-2"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353850-1-7">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353852-3-3"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath371594-4-2">
<rect
style="fill:#85127e;fill-opacity:1;stroke:none;stroke-width:0.989769;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect371596-8-0"
width="37.187374"
height="37.187374"
x="217.75404"
y="145.88028" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353862-9-3-0">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353864-8-8-7"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353858-3-6-6">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353860-6-3-6"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353854-5-8-4">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353856-3-2-8"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353850-1-7-4">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353852-3-3-5"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath371594-4-2-8">
<rect
style="fill:#85127e;fill-opacity:1;stroke:none;stroke-width:0.989769;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect371596-8-0-2"
width="37.187374"
height="37.187374"
x="217.75404"
y="145.88028" />
</clipPath>
</defs>
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-4.9825511,-4.9825504)">
<g
id="g4398"
transform="translate(-14.400962,-1.7821191)">
<rect
style="fill:#2a2661;fill-opacity:1;stroke:none;stroke-width:0.450299;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect291252-4-7"
width="16.91852"
height="16.91852"
x="19.383512"
y="6.7646694" />
<rect
style="fill:#2dd9cb;fill-opacity:1;stroke:none;stroke-width:2.13188;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect305737-3"
width="3.1572123"
height="3.1572123"
x="24.706367"
y="8.9828644" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2.13188;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect305737-7"
width="3.1572123"
height="3.1572123"
x="31.020798"
y="8.9828644" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2.13188;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect305737-4"
width="3.1572123"
height="3.1572123"
x="21.549156"
y="12.140085" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2.13188;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect305737-37-2"
width="3.1572123"
height="3.1572123"
x="27.863579"
y="12.140085" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2.13188;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect305737-3-6"
width="3.1572123"
height="3.1572123"
x="24.706367"
y="15.2973" />
<rect
style="fill:#2dd9cb;fill-opacity:1;stroke:none;stroke-width:2.13188;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect305737-7-7"
width="3.1572123"
height="3.1572123"
x="31.020798"
y="15.2973" />
<rect
style="fill:#2dd9cb;fill-opacity:1;stroke:none;stroke-width:2.13188;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect305737-4-6"
width="3.1572123"
height="3.1572123"
x="21.549156"
y="18.454504" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2.13188;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect305737-37-2-9"
width="3.1572123"
height="3.1572123"
x="27.863579"
y="18.454504" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

@ -0,0 +1,465 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="63.944012"
height="63.944012"
viewBox="0 0 16.91852 16.91852"
version="1.1"
id="svg1161"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
sodipodi:docname="geoserver_icon.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1163"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
units="px"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="2.8934905"
inkscape:cx="-52.531709"
inkscape:cy="-15.724952"
inkscape:window-width="2400"
inkscape:window-height="1271"
inkscape:window-x="2391"
inkscape:window-y="-9"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1158">
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353862">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353864"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353858">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353860"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353854">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353856"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353850">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353852"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath371594">
<rect
style="fill:#85127e;fill-opacity:1;stroke:none;stroke-width:0.989769;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect371596"
width="37.187374"
height="37.187374"
x="217.75404"
y="145.88028" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353862-9">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353864-8"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353858-3">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353860-6"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353854-5">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353856-3"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353850-1">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353852-3"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath371594-4">
<rect
style="fill:#85127e;fill-opacity:1;stroke:none;stroke-width:0.989769;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect371596-8"
width="37.187374"
height="37.187374"
x="217.75404"
y="145.88028" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353862-9-3">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353864-8-8"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353858-3-6">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353860-6-3"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353854-5-8">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353856-3-2"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353850-1-7">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353852-3-3"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath371594-4-2">
<rect
style="fill:#85127e;fill-opacity:1;stroke:none;stroke-width:0.989769;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect371596-8-0"
width="37.187374"
height="37.187374"
x="217.75404"
y="145.88028" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353862-9-3-0">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353864-8-8-7"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353858-3-6-6">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353860-6-3-6"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353854-5-8-4">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353856-3-2-8"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353850-1-7-4">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353852-3-3-5"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath371594-4-2-8">
<rect
style="fill:#85127e;fill-opacity:1;stroke:none;stroke-width:0.989769;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect371596-8-0-2"
width="37.187374"
height="37.187374"
x="217.75404"
y="145.88028" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353862-9-3-0-8">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353864-8-8-7-8"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353858-3-6-6-0">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353860-6-3-6-6"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353854-5-8-4-9">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353856-3-2-8-7"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353850-1-7-4-1">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353852-3-3-5-2"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath371594-4-2-8-2">
<rect
style="fill:#85127e;fill-opacity:1;stroke:none;stroke-width:0.989769;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect371596-8-0-2-2"
width="37.187374"
height="37.187374"
x="217.75404"
y="145.88028" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353862-9-3-0-8-4">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353864-8-8-7-8-4"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353858-3-6-6-0-1">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353860-6-3-6-6-4"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353854-5-8-4-9-0">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353856-3-2-8-7-7"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353850-1-7-4-1-7">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353852-3-3-5-2-7"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath371594-4-2-8-2-5">
<rect
style="fill:#85127e;fill-opacity:1;stroke:none;stroke-width:0.989769;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect371596-8-0-2-2-9"
width="37.187374"
height="37.187374"
x="217.75404"
y="145.88028" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353862-4">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353864-0"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353858-9">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353860-8"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353854-7">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353856-1"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath353850-8">
<rect
style="fill:none;fill-opacity:1;stroke:#e2c015;stroke-width:0.49;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0;paint-order:markers stroke fill"
id="rect353852-0"
width="37.187374"
height="37.187374"
x="180.56668"
y="183.06766" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath371594-3">
<rect
style="fill:#85127e;fill-opacity:1;stroke:none;stroke-width:0.989769;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect371596-5"
width="37.187374"
height="37.187374"
x="217.75404"
y="145.88028" />
</clipPath>
</defs>
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-4.9825511,-4.9825504)">
<rect
style="fill:#85127e;fill-opacity:1;stroke:none;stroke-width:0.456273;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect291252-7-5"
width="17.143002"
height="17.143002"
x="5.006495"
y="4.9115372" />
<circle
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:2.50376;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path296424-3"
cx="9.3531199"
cy="9.3413706"
r="3.0508161" />
<circle
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:2.50376;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path296424-7-3"
cx="17.765553"
cy="17.766909"
r="3.0508161" />
<circle
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:2.50376;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path296424-7-6-3"
cx="17.807709"
cy="9.2519331"
r="3.0508161" />
<circle
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:2.50376;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path296424-2-4"
cx="9.3393154"
cy="17.729809"
r="3.0508161" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save