[libadwaita] Add AdwAboutWindow
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libadwaita] Add AdwAboutWindow
- Date: Thu, 7 Jul 2022 15:38:42 +0000 (UTC)
commit 6e161184d1e4a7ebaaeb4cdda0fd5fb52b0410f6
Author: Adrien Plazas <kekun plazas laposte net>
Date: Mon Sep 20 15:21:51 2021 +0200
Add AdwAboutWindow
demo/adw-demo-debug-info.c | 170 +
demo/adw-demo-debug-info.h | 9 +
demo/adw-demo-window.c | 2 +
demo/adw-demo-window.ui | 8 +
demo/adwaita-demo.c | 66 +-
demo/adwaita-demo.gresources.xml | 3 +
demo/icons/org.example.Typeset.Source.svg | 3635 ++++++++++++++++++++
.../scalable/actions/widget-about-symbolic.svg | 4 +
demo/icons/scalable/apps/org.example.Typeset.svg | 1 +
demo/meson.build | 14 +
demo/pages/about/adw-demo-page-about.c | 99 +
demo/pages/about/adw-demo-page-about.h | 11 +
demo/pages/about/adw-demo-page-about.ui | 24 +
doc/images/about-window-credits-dark.png | Bin 0 -> 5416 bytes
doc/images/about-window-credits.png | Bin 0 -> 6542 bytes
doc/images/about-window-dark.png | Bin 0 -> 22206 bytes
doc/images/about-window.png | Bin 0 -> 23900 bytes
doc/libadwaita.toml.in | 4 +
doc/tools/data/about-window-credits.ui | 44 +
doc/tools/data/about-window.ui | 14 +
doc/visual-index.md | 7 +
po/POTFILES.in | 2 +
src/adw-about-window.c | 3222 +++++++++++++++++
src/adw-about-window.h | 175 +
src/adw-about-window.ui | 811 +++++
src/adwaita.gresources.xml | 3 +
src/adwaita.h | 1 +
.../actions/adw-external-link-symbolic.svg | 1 +
.../scalable/actions/adw-mail-send-symbolic.svg | 1 +
src/meson.build | 2 +
src/stylesheet/widgets/_misc.scss | 46 +
tests/meson.build | 1 +
tests/test-about-window.c | 109 +
33 files changed, 8461 insertions(+), 28 deletions(-)
---
diff --git a/demo/adw-demo-debug-info.c b/demo/adw-demo-debug-info.c
new file mode 100644
index 00000000..d67db893
--- /dev/null
+++ b/demo/adw-demo-debug-info.c
@@ -0,0 +1,170 @@
+#include "config.h"
+
+#include "adw-demo-debug-info.h"
+
+/* Copied and adapted from gtk/inspector/general.c */
+static void
+get_gtk_info (const char **backend,
+ const char **renderer)
+{
+ GdkDisplay *display = gdk_display_get_default ();
+ GdkSurface *surface;
+ GskRenderer *gsk_renderer;
+
+ if (!g_strcmp0 (G_OBJECT_TYPE_NAME (display), "GdkX11Display"))
+ *backend = "X11";
+ else if (!g_strcmp0 (G_OBJECT_TYPE_NAME (display), "GdkWaylandDisplay"))
+ *backend = "Wayland";
+ else if (!g_strcmp0 (G_OBJECT_TYPE_NAME (display), "GdkBroadwayDisplay"))
+ *backend = "Broadway";
+ else if (!g_strcmp0 (G_OBJECT_TYPE_NAME (display), "GdkWin32Display"))
+ *backend = "Windows";
+ else if (!g_strcmp0 (G_OBJECT_TYPE_NAME (display), "GdkMacosDisplay"))
+ *backend = "macOS";
+ else
+ *backend = G_OBJECT_TYPE_NAME (display);
+
+ surface = gdk_surface_new_toplevel (display);
+ gsk_renderer = gsk_renderer_new_for_surface (surface);
+ if (!g_strcmp0 (G_OBJECT_TYPE_NAME (gsk_renderer), "GskVulkanRenderer"))
+ *renderer = "Vulkan";
+ else if (!g_strcmp0 (G_OBJECT_TYPE_NAME (gsk_renderer), "GskGLRenderer"))
+ *renderer = "GL";
+ else if (!g_strcmp0 (G_OBJECT_TYPE_NAME (gsk_renderer), "GskCairoRenderer"))
+ *renderer = "Cairo";
+ else
+ *renderer = G_OBJECT_TYPE_NAME (gsk_renderer);
+
+ gsk_renderer_unrealize (gsk_renderer);
+ g_object_unref (gsk_renderer);
+ gdk_surface_destroy (surface);
+}
+
+#ifndef G_OS_WIN32
+static char *
+get_flatpak_info (const char *group,
+ const char *key)
+{
+ GKeyFile *keyfile = g_key_file_new ();
+ char *ret = NULL;
+
+ if (g_key_file_load_from_file (keyfile, "/.flatpak-info", 0, NULL))
+ ret = g_key_file_get_string (keyfile, group, key, NULL);
+
+ g_key_file_unref (keyfile);
+
+ return ret;
+}
+#endif
+
+char *
+adw_demo_generate_debug_info (void)
+{
+ GString *string = g_string_new (NULL);
+#ifndef G_OS_WIN32
+ gboolean flatpak = g_file_test ("/.flatpak-info", G_FILE_TEST_EXISTS);
+#endif
+
+ g_string_append_printf (string, "Libadwaita demo: %s (%s)\n", ADW_VERSION_S,
+ ADW_DEMO_VCS_TAG);
+ g_string_append (string, "\n");
+
+ g_string_append (string, "Compiled against:\n");
+ g_string_append_printf (string, "- GLib: %d.%d.%d\n", GLIB_MAJOR_VERSION,
+ GLIB_MINOR_VERSION,
+ GLIB_MICRO_VERSION);
+ g_string_append_printf (string, "- GTK: %d.%d.%d\n", GTK_MAJOR_VERSION,
+ GTK_MINOR_VERSION,
+ GTK_MICRO_VERSION);
+ g_string_append (string, "\n");
+
+ g_string_append (string, "Running against:\n");
+ g_string_append_printf (string, "- GLib: %d.%d.%d\n", glib_major_version,
+ glib_minor_version,
+ glib_micro_version);
+ g_string_append_printf (string, "- GTK: %d.%d.%d\n", gtk_get_major_version (),
+ gtk_get_minor_version (),
+ gtk_get_micro_version ());
+ g_string_append (string, "\n");
+
+ {
+ char *os_name = g_get_os_info (G_OS_INFO_KEY_NAME);
+ char *os_version = g_get_os_info (G_OS_INFO_KEY_VERSION);
+
+ g_string_append (string, "System:\n");
+ g_string_append_printf (string, "- Name: %s\n", os_name);
+ g_string_append_printf (string, "- Version: %s\n", os_version);
+ g_string_append (string, "\n");
+
+ g_free (os_name);
+ g_free (os_version);
+ }
+
+ {
+ const char *backend, *renderer;
+
+ get_gtk_info (&backend, &renderer);
+
+ g_string_append (string, "GTK:\n");
+ g_string_append_printf (string, "- GDK backend: %s\n", backend);
+ g_string_append_printf (string, "- GSK renderer: %s\n", renderer);
+ g_string_append (string, "\n");
+ }
+
+#ifndef G_OS_WIN32
+ if (flatpak) {
+ char *runtime = get_flatpak_info ("Application", "runtime");
+ char *runtime_commit = get_flatpak_info ("Instance", "runtime-commit");
+ char *arch = get_flatpak_info ("Instance", "arch");
+ char *flatpak_version = get_flatpak_info ("Instance", "flatpak-version");
+ char *devel = get_flatpak_info ("Instance", "devel");
+
+ g_string_append (string, "Flatpak:\n");
+ g_string_append_printf (string, "- Runtime: %s\n", runtime);
+ g_string_append_printf (string, "- Runtime commit: %s\n", runtime_commit);
+ g_string_append_printf (string, "- Arch: %s\n", arch);
+ g_string_append_printf (string, "- Flatpak version: %s\n", flatpak_version);
+ g_string_append_printf (string, "- Devel: %s\n", devel ? "yes" : "no");
+ g_string_append (string, "\n");
+
+ g_free (runtime);
+ g_free (runtime_commit);
+ g_free (arch);
+ g_free (flatpak_version);
+ g_free (devel);
+ }
+#endif
+
+ {
+ const char *desktop = g_getenv ("XDG_CURRENT_DESKTOP");
+ const char *session_desktop = g_getenv ("XDG_SESSION_DESKTOP");
+ const char *session_type = g_getenv ("XDG_SESSION_TYPE");
+ const char *lang = g_getenv ("LANG");
+ const char *builder = g_getenv ("INSIDE_GNOME_BUILDER");
+ const char *gtk_debug = g_getenv ("GTK_DEBUG");
+ const char *gtk_theme = g_getenv ("GTK_THEME");
+ const char *adw_debug_color_scheme = g_getenv ("ADW_DEBUG_COLOR_SCHEME");
+ const char *adw_debug_high_contrast = g_getenv ("ADW_DEBUG_HIGH_CONTRAST");
+ const char *adw_disable_portal = g_getenv ("ADW_DISABLE_PORTAL");
+
+ g_string_append (string, "Environment:\n");
+ g_string_append_printf (string, "- Desktop: %s\n", desktop);
+ g_string_append_printf (string, "- Session: %s (%s)\n", session_desktop,
+ session_type);
+ g_string_append_printf (string, "- Language: %s\n", lang);
+ g_string_append_printf (string, "- Running inside Builder: %s\n", builder ? "yes" : "no");
+
+ if (gtk_debug)
+ g_string_append_printf (string, "- GTK_DEBUG: %s\n", gtk_debug);
+ if (gtk_theme)
+ g_string_append_printf (string, "- GTK_THEME: %s\n", gtk_theme);
+ if (adw_debug_color_scheme)
+ g_string_append_printf (string, "- ADW_DEBUG_COLOR_SCHEME: %s\n", adw_debug_color_scheme);
+ if (adw_debug_high_contrast)
+ g_string_append_printf (string, "- ADW_DEBUG_HIGH_CONTRAST: %s\n", adw_debug_high_contrast);
+ if (adw_disable_portal)
+ g_string_append_printf (string, "- ADW_DISABLE_PORTAL: %s\n", adw_disable_portal);
+ }
+
+ return g_string_free (string, FALSE);
+}
diff --git a/demo/adw-demo-debug-info.h b/demo/adw-demo-debug-info.h
new file mode 100644
index 00000000..341eae9f
--- /dev/null
+++ b/demo/adw-demo-debug-info.h
@@ -0,0 +1,9 @@
+#pragma once
+
+#include <adwaita.h>
+
+G_BEGIN_DECLS
+
+char *adw_demo_generate_debug_info (void);
+
+G_END_DECLS
diff --git a/demo/adw-demo-window.c b/demo/adw-demo-window.c
index b15faf9c..74edef49 100644
--- a/demo/adw-demo-window.c
+++ b/demo/adw-demo-window.c
@@ -2,6 +2,7 @@
#include <glib/gi18n.h>
+#include "pages/about/adw-demo-page-about.h"
#include "pages/animations/adw-demo-page-animations.h"
#include "pages/avatar/adw-demo-page-avatar.h"
#include "pages/buttons/adw-demo-page-buttons.h"
@@ -116,6 +117,7 @@ adw_demo_window_init (AdwDemoWindow *self)
{
AdwStyleManager *manager = adw_style_manager_get_default ();
+ g_type_ensure (ADW_TYPE_DEMO_PAGE_ABOUT);
g_type_ensure (ADW_TYPE_DEMO_PAGE_ANIMATIONS);
g_type_ensure (ADW_TYPE_DEMO_PAGE_AVATAR);
g_type_ensure (ADW_TYPE_DEMO_PAGE_BUTTONS);
diff --git a/demo/adw-demo-window.ui b/demo/adw-demo-window.ui
index 7f3799bf..76f90f9f 100644
--- a/demo/adw-demo-window.ui
+++ b/demo/adw-demo-window.ui
@@ -228,6 +228,14 @@
</property>
</object>
</child>
+ <child>
+ <object class="GtkStackPage">
+ <property name="title" translatable="yes">About Window</property>
+ <property name="child">
+ <object class="AdwDemoPageAbout"/>
+ </property>
+ </object>
+ </child>
</object>
</child>
</object>
diff --git a/demo/adwaita-demo.c b/demo/adwaita-demo.c
index 54bbb1de..ff968883 100644
--- a/demo/adwaita-demo.c
+++ b/demo/adwaita-demo.c
@@ -2,6 +2,7 @@
#include <gtk/gtk.h>
#include <adwaita.h>
+#include "adw-demo-debug-info.h"
#include "adw-demo-preferences-window.h"
#include "adw-demo-window.h"
@@ -31,7 +32,7 @@ show_about (GSimpleAction *action,
GVariant *state,
gpointer user_data)
{
- const char *authors[] = {
+ const char *developers[] = {
"Adrien Plazas",
"Alexander Mikhaylenko",
"Andrei Lișiță",
@@ -42,38 +43,47 @@ show_about (GSimpleAction *action,
NULL
};
- const char *artists[] = {
+ const char *designers[] = {
"GNOME Design Team",
NULL
- };
+ };
GtkApplication *app = GTK_APPLICATION (user_data);
GtkWindow *window = gtk_application_get_active_window (app);
- char *version;
-
- version = g_strdup_printf ("%s\nRunning against libadwaita %d.%d.%d, GTK %d.%d.%d",
- ADW_VERSION_S,
- adw_get_major_version (),
- adw_get_minor_version (),
- adw_get_micro_version (),
- gtk_get_major_version (),
- gtk_get_minor_version (),
- gtk_get_micro_version ());
-
- gtk_show_about_dialog (window,
- "program-name", _("Adwaita Demo"),
- "title", _("About Adwaita Demo"),
- "logo-icon-name", "org.gnome.Adwaita1.Demo",
- "version", version,
- "copyright", "Copyright © 2017–2021 Purism SPC",
- "comments", _("Tour of the features in Libadwaita"),
- "website", "https://gitlab.gnome.org/GNOME/libadwaita",
- "license-type", GTK_LICENSE_LGPL_2_1,
- "authors", authors,
- "artists", artists,
- "translator-credits", _("translator-credits"),
- NULL);
- g_free (version);
+ char *debug_info;
+ GtkWidget *about;
+
+ debug_info = adw_demo_generate_debug_info ();
+
+ about =
+ g_object_new (ADW_TYPE_ABOUT_WINDOW,
+ "transient-for", window,
+ "application-icon", "org.gnome.Adwaita1.Demo",
+ "application-name", _("Adwaita Demo"),
+ "developer-name", _("The GNOME Project"),
+ "version", ADW_VERSION_S,
+ "website", "https://gitlab.gnome.org/GNOME/libadwaita",
+ "issue-url", "https://gitlab.gnome.org/GNOME/libadwaita/-/issues/new",
+ "debug-info", debug_info,
+ "debug-info-filename", "adwaita-1-demo-debug-info.txt",
+ "copyright", "© 2017–2022 Purism SPC",
+ "license-type", GTK_LICENSE_LGPL_2_1,
+ "developers", developers,
+ "designers", designers,
+ "artists", designers,
+ "translator-credits", _("translator-credits"),
+ NULL);
+
+ adw_about_window_add_link (ADW_ABOUT_WINDOW (about),
+ _("_Documentation"),
+ "https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/");
+ adw_about_window_add_link (ADW_ABOUT_WINDOW (about),
+ _("_Chat"),
+ "https://matrix.to/#/#libadwaita:gnome.org");
+
+ gtk_window_present (GTK_WINDOW (about));
+
+ g_free (debug_info);
}
static void
diff --git a/demo/adwaita-demo.gresources.xml b/demo/adwaita-demo.gresources.xml
index b27a6b98..b307ecea 100644
--- a/demo/adwaita-demo.gresources.xml
+++ b/demo/adwaita-demo.gresources.xml
@@ -25,6 +25,7 @@
<file preprocess="xml-stripblanks">icons/scalable/actions/view-sidebar-start-symbolic-rtl.svg</file>
<file preprocess="xml-stripblanks">icons/scalable/actions/view-sidebar-end-symbolic.svg</file>
<file preprocess="xml-stripblanks">icons/scalable/actions/view-sidebar-end-symbolic-rtl.svg</file>
+ <file preprocess="xml-stripblanks">icons/scalable/actions/widget-about-symbolic.svg</file>
<file preprocess="xml-stripblanks">icons/scalable/actions/widget-carousel-symbolic.svg</file>
<file preprocess="xml-stripblanks">icons/scalable/actions/widget-clamp-symbolic.svg</file>
<file preprocess="xml-stripblanks">icons/scalable/actions/widget-dialog-symbolic.svg</file>
@@ -35,6 +36,7 @@
<file preprocess="xml-stripblanks">icons/scalable/actions/widget-toast-symbolic.svg</file>
<file preprocess="xml-stripblanks">icons/scalable/actions/widget-view-switcher-symbolic.svg</file>
<file preprocess="xml-stripblanks">icons/scalable/apps/org.gnome.Boxes.svg</file>
+ <file preprocess="xml-stripblanks">icons/scalable/apps/org.example.Typeset.svg</file>
<file preprocess="xml-stripblanks">icons/scalable/status/dark-mode-symbolic.svg</file>
<file preprocess="xml-stripblanks">icons/scalable/status/light-mode-symbolic.svg</file>
<file preprocess="xml-stripblanks">icons/scalable/status/tab-audio-playing-symbolic.svg</file>
@@ -43,6 +45,7 @@
<file compressed="true">style-dark.css</file>
</gresource>
<gresource prefix="/org/gnome/Adwaita1/Demo/ui">
+ <file preprocess="xml-stripblanks">pages/about/adw-demo-page-about.ui</file>
<file preprocess="xml-stripblanks">pages/animations/adw-demo-page-animations.ui</file>
<file preprocess="xml-stripblanks">pages/avatar/adw-demo-page-avatar.ui</file>
<file preprocess="xml-stripblanks">pages/buttons/adw-demo-page-buttons.ui</file>
diff --git a/demo/icons/org.example.Typeset.Source.svg b/demo/icons/org.example.Typeset.Source.svg
new file mode 100644
index 00000000..392d686a
--- /dev/null
+++ b/demo/icons/org.example.Typeset.Source.svg
@@ -0,0 +1,3635 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ inkscape:export-ydpi="96"
+ inkscape:export-xdpi="96"
+ inkscape:export-filename="Template.png"
+ width="192"
+ height="152"
+ id="svg11300"
+ sodipodi:version="0.32"
+ inkscape:version="1.2 (dc2aedaf03, 2022-05-15)"
+ sodipodi:docname="nonexistant.app.Typeset.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.0"
+ style="display:inline;enable-background:new"
+ viewBox="0 0 192 152"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <title
+ id="title4162">Adwaita Icon Template</title>
+ <defs
+ id="defs3">
+ <linearGradient
+ id="linearGradient1154"
+ inkscape:collect="always">
+ <stop
+ id="stop1142"
+ offset="0"
+ style="stop-color:#77767b;stop-opacity:1" />
+ <stop
+ style="stop-color:#c0bfbc;stop-opacity:1"
+ offset="0.05000014"
+ id="stop1144" />
+ <stop
+ id="stop1146"
+ offset="0.09980702"
+ style="stop-color:#9a9996;stop-opacity:1" />
+ <stop
+ style="stop-color:#9a9996;stop-opacity:1"
+ offset="0.90000081"
+ id="stop1148" />
+ <stop
+ id="stop1150"
+ offset="0.95000082"
+ style="stop-color:#c0bfbc;stop-opacity:1" />
+ <stop
+ id="stop1152"
+ offset="1"
+ style="stop-color:#77767b;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1078"
+ id="linearGradient914"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.25,0,0,0.25,-460.60691,395.4264)"
+ x1="88.595886"
+ y1="-449.39401"
+ x2="536.59589"
+ y2="-449.39401" />
+ <linearGradient
+ id="linearGradient1078"
+ inkscape:collect="always">
+ <stop
+ id="stop1066"
+ offset="0"
+ style="stop-color:#77767b;stop-opacity:1" />
+ <stop
+ style="stop-color:#c0bfbc;stop-opacity:1"
+ offset="0.03571429"
+ id="stop1068" />
+ <stop
+ id="stop1070"
+ offset="0.07136531"
+ style="stop-color:#9a9996;stop-opacity:1" />
+ <stop
+ style="stop-color:#9a9996;stop-opacity:1"
+ offset="0.9285714"
+ id="stop1072" />
+ <stop
+ id="stop1074"
+ offset="0.96428573"
+ style="stop-color:#c0bfbc;stop-opacity:1" />
+ <stop
+ id="stop1076"
+ offset="1"
+ style="stop-color:#77767b;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1073"
+ id="linearGradient1064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.23214285,0,0,0.32894738,-376.56691,435.82697)"
+ x1="88.595886"
+ y1="-449.39401"
+ x2="536.59589"
+ y2="-449.39401" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient1073">
+ <stop
+ style="stop-color:#77767b;stop-opacity:1"
+ offset="0"
+ id="stop1060" />
+ <stop
+ id="stop1062"
+ offset="0.03846154"
+ style="stop-color:#c0bfbc;stop-opacity:1" />
+ <stop
+ style="stop-color:#9a9996;stop-opacity:1"
+ offset="0.07685554"
+ id="stop1064" />
+ <stop
+ id="stop1067"
+ offset="0.92307693"
+ style="stop-color:#9a9996;stop-opacity:1" />
+ <stop
+ style="stop-color:#c0bfbc;stop-opacity:1"
+ offset="0.96153849"
+ id="stop1069" />
+ <stop
+ style="stop-color:#77767b;stop-opacity:1"
+ offset="1"
+ id="stop1071" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1154"
+ id="linearGradient1140"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.19642829,0,0,0.34210528,-365.40268,445.74005)"
+ x1="88.595886"
+ y1="-449.39401"
+ x2="536.59589"
+ y2="-449.39401" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10876"
+ id="linearGradient1001"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.8293937,-0.81599442,0.81599442,1.8293937,-4327.9736,278.58079)"
+ x1="1660.8571"
+ y1="806.29718"
+ x2="1662.9901"
+ y2="812.88245" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10876">
+ <stop
+ style="stop-color:#949390;stop-opacity:1"
+ offset="0"
+ id="stop10872" />
+ <stop
+ style="stop-color:#68676b;stop-opacity:1"
+ offset="1"
+ id="stop10874" />
+ </linearGradient>
+ <linearGradient
+ gradientTransform="translate(-693.32504,153.44901)"
+ inkscape:collect="always"
+ xlink:href="#linearGradient988"
+ id="linearGradient990"
+ x1="64.000008"
+ y1="202.38483"
+ x2="64.000008"
+ y2="444.5"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient988">
+ <stop
+ style="stop-color:#a347ba;stop-opacity:1;"
+ offset="0"
+ id="stop984" />
+ <stop
+ style="stop-color:#c061cb;stop-opacity:1"
+ offset="1"
+ id="stop986" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1879"
+ id="linearGradient1053"
+ x1="384"
+ y1="120"
+ x2="416"
+ y2="120"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.25,0,0,0.25,-681.32503,374.44901)" />
+ <linearGradient
+ id="linearGradient1879"
+ inkscape:collect="always">
+ <stop
+ id="stop1873"
+ offset="0"
+ style="stop-color:#e8e7e4;stop-opacity:1" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0.51104856"
+ id="stop1875" />
+ <stop
+ id="stop1877"
+ offset="1"
+ style="stop-color:#c2bfba;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ y2="236"
+ x2="96"
+ y1="236"
+ x1="32"
+ gradientTransform="translate(604.81684,170.58641)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1099"
+ xlink:href="#linearGradient1036" />
+ <linearGradient
+ id="linearGradient1036">
+ <stop
+ id="stop1032"
+ offset="0"
+ style="stop-color:#d5d3cf;stop-opacity:1;" />
+ <stop
+ id="stop1034"
+ offset="1"
+ style="stop-color:#f6f5f4;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ r="32"
+ fy="-76"
+ fx="-244"
+ cy="-76"
+ cx="-244"
+ gradientTransform="matrix(0.88333331,0,0,0.88333331,-460.35018,463.11973)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1103"
+ xlink:href="#linearGradient1069" />
+ <linearGradient
+ id="linearGradient1069">
+ <stop
+ id="stop1065"
+ offset="0"
+ style="stop-color:#d5d3cf;stop-opacity:1" />
+ <stop
+ id="stop1067-1"
+ offset="1"
+ style="stop-color:#949390;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="232"
+ x2="64"
+ y1="262.5"
+ x1="64"
+ id="linearGradient1027"
+ xlink:href="#linearGradient1025"
+ gradientTransform="translate(-470.5864,432.81685)" />
+ <linearGradient
+ id="linearGradient1025">
+ <stop
+ id="stop1021"
+ offset="0"
+ style="stop-color:#9a9996;stop-opacity:1" />
+ <stop
+ id="stop1023"
+ offset="1"
+ style="stop-color:#77767b;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient1020">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop1016" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.09411765"
+ offset="1"
+ id="stop1018" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="spiro"
+ id="path-effect35304-9"
+ is_visible="true" />
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath1609-7">
+ <path
+ sodipodi:nodetypes="cccccc"
+ inkscape:connector-curvature="0"
+ id="path1611-5"
+ d="m 252,116 28,-28 v -8 h -36 v 36 z"
+
style="fill:#e74747;stroke:none;stroke-width:0.25px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
/>
+ </clipPath>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1697"
+ id="linearGradient1049"
+ x1="20"
+ y1="238"
+ x2="108"
+ y2="238"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient1697">
+ <stop
+ id="stop1685"
+ offset="0"
+ style="stop-color:#deddda;stop-opacity:1" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1"
+ offset="0.04545455"
+ id="stop1687" />
+ <stop
+ id="stop1689"
+ offset="0.09090909"
+ style="stop-color:#deddda;stop-opacity:1" />
+ <stop
+ style="stop-color:#deddda;stop-opacity:1"
+ offset="0.90909094"
+ id="stop1691" />
+ <stop
+ id="stop1693"
+ offset="0.95454544"
+ style="stop-color:#eeeeec;stop-opacity:1" />
+ <stop
+ id="stop1695"
+ offset="1"
+ style="stop-color:#c0bfbc;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient1245">
+ <stop
+ style="stop-color:#9a9996;stop-opacity:1"
+ offset="0"
+ id="stop1241" />
+ <stop
+ style="stop-color:#c0bfbc;stop-opacity:1"
+ offset="1"
+ id="stop1243" />
+ </linearGradient>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath1289">
+ <path
+
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ d="m 64,-148 h 64 l 64,-64 64,64 h 192 c 17.728,0 32,14.272 32,32 v 288 c 0,17.728 -14.272,32
-32,32 H 256 l -64,-64 -64,64 H 64 C 46.272,204 32,189.728 32,172 v -288 c 0,-17.728 14.408898,-34.19889
32,-32 z"
+ id="path1291"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="scccsssscccssss" />
+ </clipPath>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#paint3_linear-2-6-5"
+ id="linearGradient1383"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0,6,-12,0,-264,209.99687)"
+ x2="1" />
+ <linearGradient
+ id="paint3_linear-2-6-5"
+ x2="1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0,6,-12,0,-64,209.99687)">
+ <stop
+ stop-color="#C01C27"
+ id="stop91-0-7-4" />
+ <stop
+ offset="1"
+ stop-color="#E01B24"
+ id="stop93-2-5-7" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6058"
+ id="radialGradient1099"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.757743,-9.5621778e-8,3.7652438e-8,1.9495846,-82.64437,131.95505)"
+ cx="-24.238829"
+ cy="225.59558"
+ fx="-24.238829"
+ fy="225.59558"
+ r="24" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient6058">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0"
+ id="stop6054" />
+ <stop
+ style="stop-color:#f6f5f4;stop-opacity:1"
+ offset="1"
+ id="stop6056" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1115"
+ id="linearGradient1097"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0015061,0,0,0.99993452,-117.15963,352.51519)"
+ x1="43.843597"
+ y1="234.00014"
+ x2="-60.000004"
+ y2="234.00014" />
+ <linearGradient
+ id="linearGradient1115"
+ inkscape:collect="always">
+ <stop
+ id="stop1103"
+ offset="0"
+ style="stop-color:#d5d3cf;stop-opacity:1" />
+ <stop
+ style="stop-color:#e3e2df;stop-opacity:1"
+ offset="0.03846154"
+ id="stop1105" />
+ <stop
+ style="stop-color:#c0bfbc;stop-opacity:1"
+ offset="0.07692308"
+ id="stop1107" />
+ <stop
+ style="stop-color:#c0bfbc;stop-opacity:1"
+ offset="0.92307693"
+ id="stop1109" />
+ <stop
+ style="stop-color:#e3e2df;stop-opacity:1"
+ offset="0.96153843"
+ id="stop1111" />
+ <stop
+ id="stop1113"
+ offset="1"
+ style="stop-color:#d5d3cf;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1351-3"
+ id="linearGradient1574"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.25,0,0,0.25,180,83)"
+ x1="344"
+ y1="76"
+ x2="340"
+ y2="72" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient1351-3">
+ <stop
+ style="stop-color:#d5d3cf;stop-opacity:1"
+ offset="0"
+ id="stop1347" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="1"
+ id="stop1349-6" />
+ </linearGradient>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath1609">
+ <path
+ sodipodi:nodetypes="cccccc"
+ inkscape:connector-curvature="0"
+ id="path1611"
+ d="m 252,116 28,-28 v -8 h -36 v 36 z"
+
style="fill:#e74747;stroke:none;stroke-width:0.25px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
/>
+ </clipPath>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1187"
+ id="linearGradient1572"
+ gradientUnits="userSpaceOnUse"
+ x1="256"
+ y1="268"
+ x2="256"
+ y2="-180.00006" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient1187">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop1183" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="1"
+ id="stop1185" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient985"
+ inkscape:collect="always">
+ <stop
+ id="stop981"
+ offset="0"
+ style="stop-color:#f9f06b;stop-opacity:1" />
+ <stop
+ id="stop983"
+ offset="1"
+ style="stop-color:#f9f06b;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient1076">
+ <stop
+ style="stop-color:#d5d3cf;stop-opacity:1"
+ offset="0"
+ id="stop1064-3" />
+ <stop
+ id="stop1066-7"
+ offset="0.03571428"
+ style="stop-color:#e4e1de;stop-opacity:1" />
+ <stop
+ style="stop-color:#d5d3cf;stop-opacity:1"
+ offset="0.07142857"
+ id="stop1068-5" />
+ <stop
+ id="stop1070-9"
+ offset="0.9285714"
+ style="stop-color:#d5d3cf;stop-opacity:1" />
+ <stop
+ style="stop-color:#e4e1de;stop-opacity:1"
+ offset="0.96428573"
+ id="stop1072-2" />
+ <stop
+ style="stop-color:#d5d3cf;stop-opacity:1"
+ offset="1"
+ id="stop1074-2" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient985"
+ id="linearGradient1106-2-7"
+ x1="301"
+ y1="33.559235"
+ x2="104"
+ y2="33.559235"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.25,0,0,0.25,-375.35922,572.37304)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1020"
+ id="radialGradient1030-8-1"
+ cx="63.999996"
+ cy="194.19048"
+ fx="63.999996"
+ fy="194.19048"
+ r="44"
+ gradientTransform="matrix(-4.1363634,1.2532736e-6,-2.6513804e-7,-1.3909091,-54.131932,-340.73849)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1076"
+ id="linearGradient1444-2-3-3-3"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.25,0,0,0.25,-395.35922,460.38207)"
+ x1="120"
+ y1="619.96387"
+ x2="568"
+ y2="619.96387" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1697"
+ id="linearGradient1278"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(2,-22)"
+ x1="50"
+ y1="238"
+ x2="74"
+ y2="238" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1245"
+ id="linearGradient1280"
+ gradientUnits="userSpaceOnUse"
+ x1="65"
+ y1="204"
+ x2="65"
+ y2="200" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1073-0"
+ id="linearGradient8402"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.23214285,0,0,0.20394738,-8.5666383,379.65249)"
+ x1="88.595886"
+ y1="-449.39401"
+ x2="536.59589"
+ y2="-449.39401" />
+ <linearGradient
+ id="linearGradient1073-0"
+ inkscape:collect="always">
+ <stop
+ id="stop1060-3"
+ offset="0"
+ style="stop-color:#63452c;stop-opacity:1" />
+ <stop
+ style="stop-color:#865e3c;stop-opacity:1"
+ offset="0.03846154"
+ id="stop1062-4" />
+ <stop
+ id="stop1064-0"
+ offset="0.07685554"
+ style="stop-color:#63452c;stop-opacity:1" />
+ <stop
+ style="stop-color:#63452c;stop-opacity:1"
+ offset="0.92307693"
+ id="stop1067-3" />
+ <stop
+ id="stop1069-9"
+ offset="0.96153849"
+ style="stop-color:#865e3c;stop-opacity:1" />
+ <stop
+ id="stop1071-1"
+ offset="1"
+ style="stop-color:#63452c;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1182"
+ id="linearGradient8404"
+ gradientUnits="userSpaceOnUse"
+ x1="30"
+ y1="264"
+ x2="104"
+ y2="278" />
+ <linearGradient
+ id="linearGradient1182"
+ inkscape:collect="always">
+ <stop
+ id="stop1178"
+ offset="0"
+ style="stop-color:#deddda;stop-opacity:1" />
+ <stop
+ id="stop1180"
+ offset="1"
+ style="stop-color:#c0bfbc;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1073-0"
+ id="linearGradient8406"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.23214285,0,0,0.125,-8.5666383,318.17401)"
+ x1="88.595886"
+ y1="-449.39401"
+ x2="536.59589"
+ y2="-449.39401" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1928"
+ id="linearGradient8408"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.23214285,0,0,0.20394738,-8.5666383,379.65249)"
+ x1="88.595886"
+ y1="-449.39401"
+ x2="536.59589"
+ y2="-449.39401" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient1928">
+ <stop
+ style="stop-color:#3d3846;stop-opacity:1"
+ offset="0"
+ id="stop1916" />
+ <stop
+ id="stop1918"
+ offset="0.03846154"
+ style="stop-color:#77767b;stop-opacity:1" />
+ <stop
+ style="stop-color:#3d3846;stop-opacity:1"
+ offset="0.07685554"
+ id="stop1920" />
+ <stop
+ id="stop1922"
+ offset="0.92307693"
+ style="stop-color:#3d3846;stop-opacity:1" />
+ <stop
+ style="stop-color:#77767b;stop-opacity:1"
+ offset="0.96153849"
+ id="stop1924" />
+ <stop
+ style="stop-color:#3d3846;stop-opacity:1"
+ offset="1"
+ id="stop1926" />
+ </linearGradient>
+ <linearGradient
+ y2="278"
+ x2="104"
+ y1="264"
+ x1="30"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1938"
+ xlink:href="#linearGradient2212"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2212">
+ <stop
+ style="stop-color:#f6f5f4;stop-opacity:1"
+ offset="0"
+ id="stop2208" />
+ <stop
+ style="stop-color:#deddda;stop-opacity:1"
+ offset="1"
+ id="stop2210" />
+ </linearGradient>
+ <clipPath
+ id="clipPath1992"
+ clipPathUnits="userSpaceOnUse">
+ <rect
+
style="opacity:0.2;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="rect1994"
+ width="104"
+ height="8"
+ x="12"
+ y="248" />
+ </clipPath>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2008"
+ id="linearGradient1932"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.25000058,0,0,0.1249992,-14.149027,308.17365)"
+ x1="88.595886"
+ y1="-449.39401"
+ x2="536.59589"
+ y2="-449.39401" />
+ <linearGradient
+ id="linearGradient2008"
+ inkscape:collect="always">
+ <stop
+ id="stop1996"
+ offset="0"
+ style="stop-color:#1a5fb4;stop-opacity:1" />
+ <stop
+ style="stop-color:#3584e4;stop-opacity:1"
+ offset="0.03846154"
+ id="stop1998" />
+ <stop
+ id="stop2000"
+ offset="0.07685554"
+ style="stop-color:#1a5fb4;stop-opacity:1" />
+ <stop
+ style="stop-color:#1a5fb4;stop-opacity:1"
+ offset="0.92307693"
+ id="stop2002" />
+ <stop
+ id="stop2004"
+ offset="0.96153849"
+ style="stop-color:#3584e4;stop-opacity:1" />
+ <stop
+ id="stop2006"
+ offset="1"
+ style="stop-color:#1a5fb4;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ y2="220"
+ x2="67.000298"
+ y1="220"
+ x1="60.999699"
+ gradientTransform="rotate(60,83.052899,209.00012)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient2370-3"
+ xlink:href="#linearGradient5442"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5442">
+ <stop
+ style="stop-color:#5e5c64;stop-opacity:1"
+ offset="0"
+ id="stop5436" />
+ <stop
+ id="stop5438"
+ offset="0.5"
+ style="stop-color:#9a9996;stop-opacity:1" />
+ <stop
+ style="stop-color:#3d3846;stop-opacity:1"
+ offset="1"
+ id="stop5440" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2016"
+ id="linearGradient8414"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.6666251,0,0,2.6666251,-106.66373,343.65773)"
+ x1="58"
+ y1="-211"
+ x2="70"
+ y2="-211" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2016">
+ <stop
+ style="stop-color:#77767b;stop-opacity:1"
+ offset="0"
+ id="stop2010" />
+ <stop
+ id="stop2012"
+ offset="0.5"
+ style="stop-color:#9a9996;stop-opacity:1" />
+ <stop
+ style="stop-color:#77767b;stop-opacity:1"
+ offset="1"
+ id="stop2014" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5182"
+ id="linearGradient8416"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,174)"
+ x1="58"
+ y1="43.49958"
+ x2="70"
+ y2="43.49958" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5182">
+ <stop
+ style="stop-color:#5e5c64;stop-opacity:1"
+ offset="0"
+ id="stop5176" />
+ <stop
+ id="stop5178"
+ offset="0.5"
+ style="stop-color:#c0bfbc;stop-opacity:1" />
+ <stop
+ style="stop-color:#3d3846;stop-opacity:1"
+ offset="1"
+ id="stop5180" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1799"
+ id="linearGradient8422"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.9999773,0,0,1.9999773,-63.998267,221.99516)"
+ x1="58"
+ y1="-211"
+ x2="70"
+ y2="-211" />
+ <linearGradient
+ id="linearGradient1799"
+ inkscape:collect="always">
+ <stop
+ id="stop1793"
+ offset="0"
+ style="stop-color:#77767b;stop-opacity:1" />
+ <stop
+ style="stop-color:#c0bfbc;stop-opacity:1"
+ offset="0.5"
+ id="stop1795" />
+ <stop
+ id="stop1797"
+ offset="1"
+ style="stop-color:#77767b;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ r="7.9999094"
+ fy="-64.000015"
+ fx="-194.83652"
+ cy="-64.000015"
+ cx="-194.83652"
+ gradientTransform="matrix(0.77469554,0,0,0.77469569,-41.560819,-14.419746)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1505-1"
+ xlink:href="#linearGradient1183"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient1183">
+ <stop
+ id="stop1179"
+ offset="0"
+ style="stop-color:#deddda;stop-opacity:1" />
+ <stop
+ id="stop1181"
+ offset="1"
+ style="stop-color:#77767b;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1799"
+ id="linearGradient8424"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="rotate(60,83.052899,209.00011)"
+ x1="60.999699"
+ y1="220"
+ x2="67.000298"
+ y2="220" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5442"
+ id="linearGradient143387"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="rotate(60,83.052899,209.00012)"
+ x1="60.999699"
+ y1="220"
+ x2="67.000298"
+ y2="220" />
+ </defs>
+ <sodipodi:namedview
+ stroke="#ef2929"
+ fill="#f57900"
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="0.25490196"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.3958359"
+ inkscape:cx="55.504864"
+ inkscape:cy="107.25729"
+ inkscape:current-layer="layer9"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:showpageshadow="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ width="400px"
+ height="300px"
+ inkscape:snap-nodes="true"
+ inkscape:snap-bbox="true"
+ objecttolerance="7"
+ gridtolerance="12"
+ guidetolerance="13"
+ inkscape:window-maximized="1"
+ inkscape:pagecheckerboard="false"
+ showguides="false"
+ inkscape:guide-bbox="true"
+ inkscape:locked="false"
+ inkscape:measure-start="0,0"
+ inkscape:measure-end="0,0"
+ inkscape:object-nodes="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-global="true"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ showborder="true"
+ inkscape:snap-center="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-midpoints="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:snap-text-baseline="true"
+ borderlayer="true"
+ inkscape:deskcolor="#d1d1d1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid5883"
+ spacingx="2"
+ spacingy="2"
+ enabled="true"
+ visible="true"
+ empspacing="4"
+ originx="8"
+ originy="8" />
+ <sodipodi:guide
+ position="72,16"
+ orientation="0,1"
+ id="guide1073"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="20,72"
+ orientation="1,0"
+ id="guide1075"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="72,112"
+ orientation="0,1"
+ id="guide1099"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="72,136"
+ orientation="0,1"
+ id="guide993"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="112,72"
+ orientation="1,0"
+ id="guide995"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="8.0000001,72"
+ orientation="1,0"
+ id="guide867"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="128,72"
+ orientation="1,0"
+ id="guide869"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="72,124"
+ orientation="0,1"
+ id="guide871"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <inkscape:grid
+ type="xygrid"
+ id="grid873"
+ spacingx="1"
+ spacingy="1"
+ empspacing="8"
+ color="#000000"
+ opacity="0.49019608"
+ empcolor="#000000"
+ empopacity="0.08627451"
+ dotted="true"
+ originx="8"
+ originy="8" />
+ <sodipodi:guide
+ position="32,72"
+ orientation="1,0"
+ id="guide877"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="124,72"
+ orientation="1,0"
+ id="guide879"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="72,128"
+ orientation="0,1"
+ id="guide881"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="72,20"
+ orientation="0,1"
+ id="guide883"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="16,72"
+ orientation="1,0"
+ id="guide885"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="136,72"
+ orientation="1,0"
+ id="guide887"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="72,8"
+ orientation="0,1"
+ id="guide897"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="72,32"
+ orientation="0,1"
+ id="guide899"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="264,264"
+ orientation="-0.70710678,0.70710678"
+ id="guide950"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="72,72"
+ orientation="0.70710678,0.70710678"
+ id="guide952"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata4">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>GNOME Design Team</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:source />
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
+ <dc:title>Adwaita Icon Template</dc:title>
+ <dc:subject>
+ <rdf:Bag />
+ </dc:subject>
+ <dc:date />
+ <dc:rights>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:rights>
+ <dc:publisher>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:publisher>
+ <dc:identifier />
+ <dc:relation />
+ <dc:language />
+ <dc:coverage />
+ <dc:description />
+ <dc:contributor>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:contributor>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Reproduction" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Distribution" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#Notice" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#Attribution" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#ShareAlike" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="App Icon"
+ inkscape:groupmode="layer"
+ style="display:inline"
+ transform="translate(8,-156)">
+ <g
+ inkscape:groupmode="layer"
+ id="layer4"
+ inkscape:label="template"
+ style="display:inline"
+ sodipodi:insensitive="true">
+ <rect
+ inkscape:label="0"
+ y="172"
+ x="9.2651362e-08"
+ height="128"
+ width="128"
+ id="hicolor"
+
style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:0;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
/>
+ <rect
+
style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:0;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
+ id="symbolic"
+ width="16"
+ height="16"
+ x="160"
+ y="172"
+ inkscape:label="0" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="baseplate"
+ style="display:inline"
+ sodipodi:insensitive="true">
+ <g
+ id="g1481"
+ transform="translate(0,168)">
+ <g
+ id="g1430"
+ transform="translate(-502.58934,-158.75232)">
+ <rect
+ inkscape:label="512x512"
+ y="330.75232"
+ x="4.5893426"
+ height="128"
+ width="128"
+ id="rect1418"
+
style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
/>
+ <circle
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="circle1420"
+ r="59.504131"
+ cy="394.75232"
+ cx="68.589371" />
+ <rect
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1422"
+ width="87.009987"
+ height="111.01005"
+ x="25.084349"
+ y="339.24728"
+ rx="8.701004"
+ ry="7.9292889" />
+ <rect
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1424"
+ width="103.00952"
+ height="103.00952"
+ x="17.084608"
+ y="343.24756"
+ rx="7.9238095"
+ ry="7.9238095" />
+ <rect
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1426"
+ width="111.01004"
+ height="87.010048"
+ x="13.08435"
+ y="359.24728"
+ rx="7.9292889"
+ ry="8.701005" />
+ <path
+
style="display:inline;fill:none;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="M 4.5893689,447.7523 H 132.58937"
+ id="path1428"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(-358.58936,-158.75232)"
+ id="g1444">
+ <rect
+
style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
+ id="rect1432"
+ width="128"
+ height="128"
+ x="4.5893426"
+ y="330.75232"
+ inkscape:label="512x512" />
+ <circle
+ cx="68.589371"
+ cy="394.75232"
+ r="59.504131"
+ id="circle1434"
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <rect
+ ry="7.9292889"
+ rx="8.701004"
+ y="339.24728"
+ x="25.084349"
+ height="111.01005"
+ width="87.009987"
+ id="rect1436"
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <rect
+ ry="7.9238095"
+ rx="7.9238095"
+ y="343.24756"
+ x="17.084608"
+ height="103.00952"
+ width="103.00952"
+ id="rect1438"
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <rect
+ ry="8.701005"
+ rx="7.9292889"
+ y="359.24728"
+ x="13.08435"
+ height="87.010048"
+ width="111.01004"
+ id="rect1440"
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <path
+ inkscape:connector-curvature="0"
+ id="path1442"
+ d="M 4.5893689,447.7523 H 132.58937"
+
style="display:inline;fill:none;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
/>
+ </g>
+ <g
+ id="g1458"
+ transform="translate(-214.58936,-158.75232)">
+ <rect
+ inkscape:label="512x512"
+ y="330.75232"
+ x="4.5893426"
+ height="128"
+ width="128"
+ id="rect1446"
+
style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
/>
+ <circle
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="circle1448"
+ r="59.504131"
+ cy="394.75232"
+ cx="68.589371" />
+ <rect
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1450"
+ width="87.009987"
+ height="111.01005"
+ x="25.084349"
+ y="339.24728"
+ rx="8.701004"
+ ry="7.9292889" />
+ <rect
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1452"
+ width="103.00952"
+ height="103.00952"
+ x="17.084608"
+ y="343.24756"
+ rx="7.9238095"
+ ry="7.9238095" />
+ <rect
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1454"
+ width="111.01004"
+ height="87.010048"
+ x="13.08435"
+ y="359.24728"
+ rx="7.9292889"
+ ry="8.701005" />
+ <path
+
style="display:inline;fill:none;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="M 4.5893689,447.7523 H 132.58937"
+ id="path1456"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ <g
+ style="display:inline;fill:#000000;enable-background:new"
+ transform="matrix(7.9911709,0,0,8.0036407,-167.7909,-4846.0776)"
+ id="g12027"
+ inkscape:export-xdpi="12"
+ inkscape:export-ydpi="12" />
+ <rect
+
style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
+ id="128"
+ width="128"
+ height="128"
+ x="9.2651362e-08"
+ y="172"
+ inkscape:label="0" />
+ <g
+ id="g883"
+ style="fill:none;fill-opacity:0.25098039;stroke:#a579b3;stroke-opacity:1"
+ transform="translate(-24,24)" />
+ <g
+ id="g900"
+ style="fill:none;fill-opacity:0.25098039;stroke:#a579b3;stroke-opacity:1"
+ transform="translate(-24,24)" />
+ <rect
+ inkscape:label=""
+ y="172"
+ x="160"
+ height="16"
+ width="16"
+ id="16"
+
style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
/>
+ <text
+ xml:space="preserve"
+
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:'Cantarell,
Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.332649;enable-background:new"
+ x="0"
+ y="167"
+ id="text863"
+ inkscape:label="icon-name"><tspan
+ style="font-size:4px;stroke-width:0.332649"
+ sodipodi:role="line"
+ id="tspan861"
+ x="0"
+ y="167">Hicolor</tspan></text>
+ <text
+ inkscape:label="icon-name"
+ id="text867"
+ y="167"
+ x="160"
+
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:'Cantarell,
Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.332649;enable-background:new"
+ xml:space="preserve"><tspan
+ y="167"
+ x="160"
+ id="tspan865"
+ sodipodi:role="line"
+ style="font-size:4px;stroke-width:0.332649">Symbolic</tspan></text>
+ <g
+ id="g1318"
+ transform="translate(-502.58934,-158.75232)">
+ <rect
+ inkscape:label="512x512"
+ y="330.75232"
+ x="4.5893426"
+ height="128"
+ width="128"
+ id="rect13805-6"
+
style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
/>
+ <circle
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="circle2892-2"
+ r="59.504131"
+ cy="394.75232"
+ cx="68.589371" />
+ <rect
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect2894-9"
+ width="87.009987"
+ height="111.01005"
+ x="25.084349"
+ y="339.24728"
+ rx="8.701004"
+ ry="7.9292889" />
+ <rect
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect2896-1"
+ width="103.00952"
+ height="103.00952"
+ x="17.084608"
+ y="343.24756"
+ rx="7.9238095"
+ ry="7.9238095" />
+ <rect
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect2898-2"
+ width="111.01004"
+ height="87.010048"
+ x="13.08435"
+ y="359.24728"
+ rx="7.9292889"
+ ry="8.701005" />
+ <path
+
style="display:inline;fill:none;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="M 4.5893689,447.7523 H 132.58937"
+ id="path2900-7"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(-358.58936,-158.75232)"
+ id="g1332">
+ <rect
+
style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
+ id="rect1320"
+ width="128"
+ height="128"
+ x="4.5893426"
+ y="330.75232"
+ inkscape:label="512x512" />
+ <circle
+ cx="68.589371"
+ cy="394.75232"
+ r="59.504131"
+ id="circle1322"
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <rect
+ ry="7.9292889"
+ rx="8.701004"
+ y="339.24728"
+ x="25.084349"
+ height="111.01005"
+ width="87.009987"
+ id="rect1324"
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <rect
+ ry="7.9238095"
+ rx="7.9238095"
+ y="343.24756"
+ x="17.084608"
+ height="103.00952"
+ width="103.00952"
+ id="rect1326"
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <rect
+ ry="8.701005"
+ rx="7.9292889"
+ y="359.24728"
+ x="13.08435"
+ height="87.010048"
+ width="111.01004"
+ id="rect1328"
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <path
+ inkscape:connector-curvature="0"
+ id="path1330"
+ d="M 4.5893689,447.7523 H 132.58937"
+
style="display:inline;fill:none;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
/>
+ </g>
+ <g
+ id="g1346"
+ transform="translate(-214.58936,-158.75232)">
+ <rect
+ inkscape:label="512x512"
+ y="330.75232"
+ x="4.5893426"
+ height="128"
+ width="128"
+ id="rect1334"
+
style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
/>
+ <circle
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="circle1336"
+ r="59.504131"
+ cy="394.75232"
+ cx="68.589371" />
+ <rect
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1338"
+ width="87.009987"
+ height="111.01005"
+ x="25.084349"
+ y="339.24728"
+ rx="8.701004"
+ ry="7.9292889" />
+ <rect
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1340"
+ width="103.00952"
+ height="103.00952"
+ x="17.084608"
+ y="343.24756"
+ rx="7.9238095"
+ ry="7.9238095" />
+ <rect
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1342"
+ width="111.01004"
+ height="87.010048"
+ x="13.08435"
+ y="359.24728"
+ rx="7.9292889"
+ ry="8.701005" />
+ <path
+
style="display:inline;fill:none;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="M 4.5893689,447.7523 H 132.58937"
+ id="path1344"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(0,312)"
+ id="g1525">
+ <g
+ transform="translate(-502.58934,-158.75232)"
+ id="g1495">
+ <rect
+
style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
+ id="rect1483"
+ width="128"
+ height="128"
+ x="4.5893426"
+ y="330.75232"
+ inkscape:label="512x512" />
+ <circle
+ cx="68.589371"
+ cy="394.75232"
+ r="59.504131"
+ id="circle1485"
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <rect
+ ry="7.9292889"
+ rx="8.701004"
+ y="339.24728"
+ x="25.084349"
+ height="111.01005"
+ width="87.009987"
+ id="rect1487"
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <rect
+ ry="7.9238095"
+ rx="7.9238095"
+ y="343.24756"
+ x="17.084608"
+ height="103.00952"
+ width="103.00952"
+ id="rect1489"
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <rect
+ ry="8.701005"
+ rx="7.9292889"
+ y="359.24728"
+ x="13.08435"
+ height="87.010048"
+ width="111.01004"
+ id="rect1491"
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <path
+ inkscape:connector-curvature="0"
+ id="path1493"
+ d="M 4.5893689,447.7523 H 132.58937"
+
style="display:inline;fill:none;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
/>
+ </g>
+ <g
+ id="g1509"
+ transform="translate(-358.58936,-158.75232)">
+ <rect
+ inkscape:label="512x512"
+ y="330.75232"
+ x="4.5893426"
+ height="128"
+ width="128"
+ id="rect1497"
+
style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
/>
+ <circle
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="circle1499"
+ r="59.504131"
+ cy="394.75232"
+ cx="68.589371" />
+ <rect
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1501"
+ width="87.009987"
+ height="111.01005"
+ x="25.084349"
+ y="339.24728"
+ rx="8.701004"
+ ry="7.9292889" />
+ <rect
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1503"
+ width="103.00952"
+ height="103.00952"
+ x="17.084608"
+ y="343.24756"
+ rx="7.9238095"
+ ry="7.9238095" />
+ <rect
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1505"
+ width="111.01004"
+ height="87.010048"
+ x="13.08435"
+ y="359.24728"
+ rx="7.9292889"
+ ry="8.701005" />
+ <path
+
style="display:inline;fill:none;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="M 4.5893689,447.7523 H 132.58937"
+ id="path1507"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(-214.58936,-158.75232)"
+ id="g1523">
+ <rect
+
style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
+ id="rect1511"
+ width="128"
+ height="128"
+ x="4.5893426"
+ y="330.75232"
+ inkscape:label="512x512" />
+ <circle
+ cx="68.589371"
+ cy="394.75232"
+ r="59.504131"
+ id="circle1513"
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <rect
+ ry="7.9292889"
+ rx="8.701004"
+ y="339.24728"
+ x="25.084349"
+ height="111.01005"
+ width="87.009987"
+ id="rect1515"
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <rect
+ ry="7.9238095"
+ rx="7.9238095"
+ y="343.24756"
+ x="17.084608"
+ height="103.00952"
+ width="103.00952"
+ id="rect1517"
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <rect
+ ry="8.701005"
+ rx="7.9292889"
+ y="359.24728"
+ x="13.08435"
+ height="87.010048"
+ width="111.01004"
+ id="rect1519"
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <path
+ inkscape:connector-curvature="0"
+ id="path1521"
+ d="M 4.5893689,447.7523 H 132.58937"
+
style="display:inline;fill:none;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
/>
+ </g>
+ </g>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer9"
+ inkscape:label="icons"
+ style="display:inline">
+ <g
+ style="display:inline;enable-background:new"
+ id="g1064"
+ transform="translate(92.457943,4.92209)">
+ <rect
+ ry="8"
+ rx="7.9999995"
+ y="207.07791"
+ x="-438.45795"
+ height="76"
+ width="112.00001"
+ id="rect884"
+
style="display:inline;opacity:1;vector-effect:none;fill:url(#linearGradient914);fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <rect
+
style="display:inline;opacity:1;vector-effect:none;fill:#deddda;fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect886"
+ width="112.00001"
+ height="84"
+ x="-438.45795"
+ y="195.07791"
+ rx="7.9999995"
+ ry="8" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g1096"
+ transform="translate(158)">
+ <rect
+
style="display:inline;opacity:1;vector-effect:none;fill:url(#linearGradient1064);fill-opacity:1;stroke:none;stroke-width:0.24999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1048"
+ width="104"
+ height="100"
+ x="-356"
+ y="188"
+ rx="7.999999"
+ ry="8" />
+ <rect
+ ry="8"
+ rx="7.9999986"
+ y="184"
+ x="-356"
+ height="99.999992"
+ width="104"
+ id="rect929-36-9"
+
style="display:inline;opacity:1;vector-effect:none;fill:#deddda;fill-opacity:1;stroke:none;stroke-width:0.24999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g1138"
+ transform="translate(-130.00003)">
+ <rect
+ ry="8"
+ rx="7.999999"
+ y="188"
+ x="-347.99994"
+ height="104"
+ width="87.999878"
+ id="rect1134"
+
style="display:inline;opacity:1;vector-effect:none;fill:url(#linearGradient1140);fill-opacity:1;stroke:none;stroke-width:0.24999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <rect
+
style="display:inline;opacity:1;vector-effect:none;fill:#deddda;fill-opacity:1;stroke:none;stroke-width:0.24999996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1136"
+ width="88"
+ height="107.99999"
+ x="-347.99997"
+ y="180"
+ rx="7.9999967"
+ ry="8" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g1278"
+ transform="translate(184.01133,-10.5513)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path945"
+ d="m -558.01133,415.5513 a 59.999995,59.999995 0 0 1 -59.99999,60 59.999995,59.999995 0 0 1
-60,-60 59.999995,59.999995 0 0 1 60,-59.99999 59.999995,59.999995 0 0 1 59.99999,59.99999 z"
+
style="display:inline;opacity:1;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:0.01129822px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <rect
+
style="display:inline;opacity:1;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:0.01129822px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect978"
+ width="112"
+ height="114"
+ x="-674.01123"
+ y="357.5513"
+ rx="56"
+ ry="56" />
+ <path
+
style="display:inline;opacity:1;fill:#f6f5f4;fill-opacity:1;stroke:none;stroke-width:0.01129822px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ d="m -558.01133,413.5513 a 59.999995,59.999995 0 0 1 -59.99999,59.99999 59.999995,59.999995 0 0 1
-60,-59.99999 59.999995,59.999995 0 0 1 60,-60 59.999995,59.999995 0 0 1 59.99999,60 z"
+ id="path981"
+ inkscape:connector-curvature="0" />
+ <circle
+ r="54"
+
style="display:inline;opacity:1;fill:#424048;fill-opacity:1;stroke:none;stroke-width:0.01129822px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="circle983"
+ cx="-618.01129"
+ cy="413.5513" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path928"
+ d="m -591.9764,386.54325 a 1.0016649,1.0016649 0 0 0 -0.77686,0.33008 l -21.97461,23.66504 a
5.9999995,5.9999995 0 0 0 -5.58203,-0.52246 l -14.2207,-15.80079 a 2.0033298,2.0033298 0 0 0
-1.60352,-0.68212 2.0033298,2.0033298 0 0 0 -1.37402,3.36181 l 14.21924,15.79932 a 5.9999995,5.9999995 0 0 0
-0.20997,5.30517 5.9999995,5.9999995 0 0 0 2.4043,2.69922 l -11.8584,30.49366 a 1.0016649,1.0016649 0 1 0
1.86719,0.72558 l 11.85742,-30.49121 a 5.9999995,5.9999995 0 0 0 3.65332,-0.39209 5.9999995,5.9999995 0 0 0
3.03516,-7.92383 5.9999995,5.9999995 0 0 0 -0.7251,-1.2041 l 21.9795,-23.66992 a 1.0016649,1.0016649 0 0 0
-0.69092,-1.69336 z"
+
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.2;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4.00625896;stro
ke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
/>
+ <path
+
style="display:inline;fill:none;fill-rule:evenodd;stroke:url(#linearGradient1001);stroke-width:4.00625896;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -618.01122,413.5513 -18,-20"
+ id="path987"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path989"
+ d="m -618.01122,413.5513 26.00001,-28"
+
style="display:inline;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.00312948;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ inkscape:transform-center-y="1.7677675"
+ sodipodi:nodetypes="cc"
+ inkscape:transform-center-x="-1.7677635" />
+ <path
+ inkscape:transform-center-x="-1.767762"
+ sodipodi:nodetypes="cc"
+ inkscape:transform-center-y="1.7677675"
+
style="display:inline;fill:none;fill-rule:evenodd;stroke:#e01b24;stroke-width:2.00312948;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -618.01122,413.5513 -14,36"
+ id="path991"
+ inkscape:connector-curvature="0" />
+ <circle
+ r="5.9999995"
+ cy="125.93015"
+ cx="-732.8739"
+ id="circle993"
+
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#d5d3cf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:7.77220678;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="rotate(-24.039088)" />
+ <circle
+ r="2.0031295"
+
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#131c1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8.01251698;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="circle995"
+ cx="-617.98218"
+ cy="413.5513" />
+ <circle
+ r="2"
+ cy="413.5513"
+ cx="-617.98218"
+ id="circle997"
+
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#131c1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8.01251698;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
/>
+ <path
+ inkscape:connector-curvature="0"
+ id="circle1003-6"
+ d="m -618.01122,359.5513 a 54,54 0 0 0 -54,54 54,54 0 0 0 0.0415,1.1709 54,54 0 0 1
53.9585,-53.1709 54,54 0 0 1 53.9585,52.82813 54,54 0 0 0 0.0415,-0.82813 54,54 0 0 0 -54.00001,-54 z"
+
style="display:inline;opacity:0.1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.01129822px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g1365"
+ transform="translate(339.32504,14.55099)">
+ <path
+ sodipodi:nodetypes="cccsscc"
+ inkscape:connector-curvature="0"
+ id="rect970"
+ d="m -681.32504,357.44901 v 84 h 96 c 4.432,0 8,-3.568 8,-8 v -68 c 0,-4.432 -3.568,-8 -8,-8 z"
+
style="display:inline;opacity:1;fill:#813d9c;fill-opacity:1;stroke:none;stroke-width:0.37684458;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
/>
+ <path
+
style="display:inline;opacity:1;fill:url(#linearGradient1053);fill-opacity:1;stroke:none;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ d="m -679.32503,369.44901 v 70 h 93.99999 c 4.432,0 8,-3.568 8,-8 v -54 c 0,-4.432 -3.568,-8
-8,-8 z"
+ id="rect954-3-6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccsscc" />
+ <path
+ sodipodi:nodetypes="cccsscc"
+ inkscape:connector-curvature="0"
+ id="rect970-5-3"
+ d="m -681.32504,339.44901 v 94 h 96 c 4.432,0 8,-3.568 8,-8 v -78 c 0,-4.432 -3.568,-8 -8,-8 z"
+
style="display:inline;opacity:1;fill:#813d9c;fill-opacity:1;stroke:none;stroke-width:0.37684458;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
/>
+ <path
+ sodipodi:nodetypes="cccsscc"
+ inkscape:connector-curvature="0"
+ id="rect970-5"
+ d="m -681.32504,337.44901 v 94 h 96 c 4.432,0 8,-3.568 8,-8 v -78 c 0,-4.432 -3.568,-8 -8,-8 z"
+
style="display:inline;opacity:1;fill:url(#linearGradient990);fill-opacity:1;stroke:none;stroke-width:0.37684458;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
/>
+ <g
+ transform="matrix(0.140625,0,0,0.140625,-722.55795,165.74946)"
+ aria-label="a"
+
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:322.10223389px;line-height:1.25;font-family:Montserrat;-inkscape-font-specification:'Montserrat,
Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#813d9c;fill-opacity:1;stroke:none;stroke-width:1;enable-background:new"
+ id="g1059">
+ <path
+ sodipodi:nodetypes="sccscssscccssscsccscc"
+ inkscape:connector-curvature="0"
+ d="m 812.20261,1309.7929 c -27.70079,0 -55.72369,7.4083 -74.72772,20.9366 l 18.03773,35.1092 c
12.56198,-9.9852 31.56602,-16.1051 49.92584,-16.1051 27.05659,0 42.19199,14.4169 42.19199,35.9977 l
-50.00981,-0.2354 c -52.82417,-0.2486 -74.40225,26.624 -74.40225,57.2238 0,29.9555 22.04572,51.6578
62.6306,51.6578 25.44607,0 52.4405,-7.5298 61.78146,-23.3128 l 0.003,21.3432 53.33034,-0.01 -0.006,-104.013 c
-0.003,-52.5026 -35.93005,-78.5921 -88.75482,-78.5921 z m -11.67969,151.6087 c -17.71562,0 -28.34499,-8.3747
-28.34499,-20.9367 0,-11.5956 7.40547,-23.1197 30.91845,-22.9689 l 44.53407,0.2354 0.003,16.1495 c
0.003,16.8142 -30.36157,27.5207 -47.11089,27.5207 z"
+ style="fill:#813d9c;stroke-width:1"
+ id="path1057" />
+ </g>
+ <g
+ aria-label="a"
+
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1000%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#813d9c;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ id="g1063"
+ transform="translate(-690.63092,149.52514)">
+ <path
+ d="m 55.305889,221.92387 c -0.944974,0.77446 -1.612023,1.05106 -2.445832,1.05106 -1.278503,0
-1.667605,-0.77447 -1.667605,-3.20851 v -10.78724 c 0,-2.8766 -0.277936,-4.48085 -1.111745,-5.80851
-1.22291,-1.99149 -4.573306,-3.04255 -7.852936,-3.04255 -5.225182,0 -9.33863,2.71064 -9.33863,6.19575
0,1.27234 1.056163,2.37871 2.39025,2.37871 1.334086,0 2.501413,-1.10637 2.501413,-2.3234 0,-0.22127
-0.05563,-0.49787 -0.111176,-0.8851 -0.111177,-0.49787 -0.16676,-0.94042 -0.16676,-1.32766 0,-1.49362
1.778783,-2.71064 4.002271,-2.71064 2.723757,0 4.672684,1.60425 4.672684,4.59149 v 4.39862 c
-7.655771,2.24877 -9.953459,2.84819 -12.343697,4.95032 -1.22292,1.10637 -2.001135,2.98723 -2.001135,4.81276
0,3.48511 2.445832,5.91915 5.836637,5.91915 2.445831,0 5.172972,-1.1617 8.563777,-4.0383 0.277937,2.93191
1.790584,4.0383 4.069655,4.0383 1.889959,0 3.057287,-0.66383 5.002829,-2.76596 z m -9.128066,-3.1532 c
0,1.65958 -0.277936,2.26809 -1.445263,2.93191 -1.389682,0.77448 -3.338597,1.2
1703 -4.505924,1.21703 -1.945553,0 -3.501982,-1.88085 -3.501982,-4.25958 v -0.22127 c 0.05563,-3.31915
2.949483,-4.39712 9.453169,-6.6652 z"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Nimbus
Roman';-inkscape-font-specification:'Nimbus Roman, ';fill:#813d9c;stroke-width:1.38632321px"
+ id="path1061"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cssscsssscsssccsscsccscssccs" />
+ </g>
+ <path
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1000%;font-family:Satisfy;-inkscape-font-specification:Satisfy;letter-spacing:0px;word-spacing:0px;display:inline;fill:#813d9c;fill-opacity:1;stroke:none;stroke-width:1.52590454px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -607.01212,390.12301 c -0.91395,-0.0795 -2.06633,0.23842 -3.45713,0.95369 -1.3908,0.71527
-2.80146,1.78817 -4.232,3.21871 -1.43053,1.3908 -2.76173,3.07963 -3.99358,5.06648 -1.19211,1.98686
-2.06633,4.19227 -2.62265,6.61623 -0.4371,1.78817 -0.59605,3.33791 -0.47684,4.64924 0.11921,1.27158
0.39737,2.32462 0.83448,3.15909 0.43711,0.79475 0.97356,1.37094 1.60935,1.72857 0.63579,0.39738
1.23185,0.59606 1.78817,0.59606 1.19211,-0.0795 2.38423,-0.33776 3.57634,-0.77488 1.03316,-0.39736
2.12593,-1.01329 3.27831,-1.84777 1.15238,-0.87422 2.20541,-2.10606 3.1591,-3.69555 -0.0397,1.0729
0.0199,1.96699 0.17882,2.68225 0.19868,0.71527 0.39737,1.29143 0.59605,1.72857 0.23842,0.51658
0.53645,0.91394 0.89409,1.19211 0.35763,0.23845 0.77487,0.3974 1.25172,0.47685 0.47684,0.11922
0.97355,0.15898 1.49014,0.11921 0.55631,-0.0398 1.09277,-0.13908 1.60934,-0.29804 0.51659,-0.15894
0.97357,-0.35763 1.37094,-0.59605 0.59606,-0.39736 1.33119,-1.0729 2.20541,-2.02659 0.91395,-0.99342 1.8279,-
2.06632 2.74187,-3.21871 0.95369,-1.19211 1.86764,-2.36436 2.74185,-3.51673 0.87421,-1.19211
1.58947,-2.18554 2.14579,-2.98028 0.47687,-0.63579 0.75503,-1.19211 0.83449,-1.66897 0.11917,-0.47683
0.0993,-0.83448 -0.0596,-1.0729 -0.15895,-0.23839 -0.39737,-0.31787 -0.71528,-0.23842 -0.31789,0.0398
-0.63578,0.23844 -0.95369,0.59607 -0.23843,0.31789 -0.63578,0.81461 -1.1921,1.49013 -0.51659,0.67554
-1.11264,1.45041 -1.78817,2.32463 -0.67553,0.87421 -1.41066,1.78817 -2.20541,2.74186 -0.755,0.91394
-1.49014,1.7683 -2.2054,2.56303 -0.71527,0.75501 -1.39081,1.39081 -2.0266,1.90738 -0.63579,0.47685
-1.15238,0.71527 -1.54974,0.71527 -0.47685,0 -0.85435,-0.0993 -1.13251,-0.29802 -0.23843,-0.23842
-0.41724,-0.53645 -0.53645,-0.89409 -0.11922,-0.35763 -0.19869,-0.73514 -0.23843,-1.1325 0,-0.43712
0.0199,-0.83448 0.0596,-1.19212 0.11921,-0.59605 0.21856,-1.09276 0.29803,-1.49014 0.0795,-0.39736
0.13909,-0.73514 0.17882,-1.01329 0.0795,-0.31791 0.13909,-0.61593 0.17882,-0.89409 0.0794,-0.31789 0.1
5894,-0.65566 0.23842,-1.01329 0.39737,-1.82791 0.71527,-3.31805 0.95369,-4.47043 0.23842,-1.15237
0.41724,-2.06633 0.53645,-2.74186 0.11922,-0.67552 0.17882,-1.13251 0.17882,-1.37093 0,-0.27819
-0.0198,-0.457 -0.0596,-0.53645 -0.0795,-0.0398 -0.23842,-0.0596 -0.47684,-0.0596 -0.19868,0 -0.4967,0.0198
-0.89408,0.0596 -0.35763,0.0398 -0.81461,0.11921 -1.37093,0.23842 0.83448,-1.27159 1.15238,-2.28488
0.95369,-3.03989 -0.15895,-0.79474 -0.51658,-1.3908 -1.07291,-1.78817 -0.67552,-0.4371 -1.54974,-0.75501
-2.62264,-0.95369 z m -1.40371,3.72833 c 0.15149,0.008 0.28114,0.0567 0.39041,0.14604 0.11922,0.15896
0.19869,0.37751 0.23843,0.65566 0.0397,0.23842 0.0199,0.57618 -0.0596,1.0133 -0.0397,0.39736 -0.21856,0.91395
-0.53645,1.54975 0.31789,-0.0794 0.63579,-0.13905 0.95369,-0.17882 0.31789,-0.0398 0.57618,-0.0993
0.77487,-0.17882 0.23842,-0.0794 0.45697,-0.13904 0.65566,-0.17882 0.15895,-0.0397 0.17882,0.27817
0.0596,0.95369 -0.0795,0.6358 -0.21855,1.45041 -0.41724,2.44384 -0.19869,0.9934
4 -0.43711,2.0266 -0.71527,3.09949 -0.27816,1.0729 -0.51658,2.00672 -0.71526,2.80147 -0.0397,0.19868
-0.21856,0.51657 -0.53645,0.95369 -0.27816,0.43711 -0.65567,0.91395 -1.13251,1.43053 -0.43711,0.51658
-0.95369,1.0133 -1.54975,1.49014 -0.55632,0.47685 -1.13251,0.87422 -1.72856,1.19211 -0.55632,0.27813
-1.11264,0.43707 -1.66896,0.47685 -0.55632,0 -1.05303,-0.21856 -1.49014,-0.65566 -0.23842,-0.23843
-0.39737,-0.73513 -0.47685,-1.49014 -0.0795,-0.79474 -0.0596,-1.70871 0.0596,-2.74186 0.15895,-1.03317
0.41724,-2.12594 0.77488,-3.27831 0.35763,-1.19211 0.83448,-2.30475 1.43053,-3.33791 1.43054,-2.50345
2.68226,-4.21214 3.75516,-5.1261 0.83448,-0.71526 1.47971,-1.06246 1.9342,-1.04012 z"
+ id="path1065"
+ inkscape:connector-curvature="0" />
+ <g
+ transform="translate(-691.52809,151.52514)"
+ id="g1069"
+ style="display:inline;fill:#813d9c;enable-background:new">
+ <path
+ sodipodi:nodetypes="cccccccccsccsscccccccccccscccccccscs"
+ inkscape:connector-curvature="0"
+
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#813d9c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-wi
dth:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 37,68 c -2.704645,-0.03825 -2.704645,4.03825 0,4 h 9.880859 c 0.01107,0.001
0.285634,0.0327 0.585938,0.197266 0.306304,0.16789 0.485897,0.188343 0.537109,0.939453 v -0.01953 L
48.25,78.310547 C 47.789324,78.134111 47.480469,78.058594 47.480469,78.058594 L 47.244141,78 H 38 c
-4.333333,0 -5.896484,4.367188 -5.896484,4.367188 L 32,82.675781 V 85 c 0,3.03333 1.431289,5.127712
2.939453,6.070312 C 36.447617,92.012912 38,92 38,92 h 7.591797 l 3.392578,-2.203125 0.01953,0.320313 c
0.08969,2.735348 4.223189,2.492675 3.992188,-0.234376 l -1,-17.009765 v -0.0098 c -0.140818,-2.06533
-1.461734,-3.545828 -2.607422,-4.173828 -1.145688,-0.62799 -2.257813,-0.685547 -2.257813,-0.685547 L
47.064453,68 Z m 1,14 h 8.644531 c 0.106906,0.0312 0.525263,0.141312 1.03711,0.482422 0.558515,0.372213
0.877827,0.68942 0.894531,1.355469 L 48.714844,85.201172 44.408203,88 H 38 C 38,88 37.552383,87.9871
37.060547,87.679688 36.568711,87.372288 36,86.96667 36,85 V 83.435547 C 36.102847,83.130577 3
6.534758,82 38,82 Z"
+ transform="translate(0,172)"
+ id="path1067" />
+ </g>
+ <rect
+ y="337.44901"
+ x="-681.32501"
+ height="94"
+ width="8"
+ id="rect1073"
+
style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
/>
+ <g
+ id="g985"
+
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:322.10223389px;line-height:1.25;font-family:Montserrat;-inkscape-font-specification:'Montserrat,
Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;enable-background:new"
+ aria-label="a"
+ transform="matrix(0.140625,0,0,0.140625,-722.55795,167.74946)">
+ <path
+ id="path983"
+ style="fill:#ffffff;stroke-width:1"
+ d="m 812.20261,1309.7929 c -27.70079,0 -55.72369,7.4083 -74.72772,20.9366 l 18.03773,35.1092 c
12.56198,-9.9852 31.56602,-16.1051 49.92584,-16.1051 27.05659,0 42.19199,14.4169 42.19199,35.9977 l
-50.00981,-0.2354 c -52.82417,-0.2486 -74.40225,26.624 -74.40225,57.2238 0,29.9555 22.04572,51.6578
62.6306,51.6578 25.44607,0 52.4405,-7.5298 61.78146,-23.3128 l 0.003,21.3432 53.33034,-0.01 -0.006,-104.013 c
-0.003,-52.5026 -35.93005,-78.5921 -88.75482,-78.5921 z m -11.67969,151.6087 c -17.71562,0 -28.34499,-8.3747
-28.34499,-20.9367 0,-11.5956 7.40547,-23.1197 30.91845,-22.9689 l 44.53407,0.2354 0.003,16.1495 c
0.003,16.8142 -30.36157,27.5207 -47.11089,27.5207 z"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sccscssscccssscsccscc" />
+ </g>
+ <g
+ transform="translate(-690.63092,151.52514)"
+ id="text993"
+
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1000%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ aria-label="a">
+ <path
+ sodipodi:nodetypes="cssscsssscsssccsscsccscssccs"
+ inkscape:connector-curvature="0"
+ id="path995"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Nimbus
Roman';-inkscape-font-specification:'Nimbus Roman, ';fill:#ffffff;stroke-width:1.38632321px"
+ d="m 55.305889,221.92387 c -0.944974,0.77446 -1.612023,1.05106 -2.445832,1.05106 -1.278503,0
-1.667605,-0.77447 -1.667605,-3.20851 v -10.78724 c 0,-2.8766 -0.277936,-4.48085 -1.111745,-5.80851
-1.22291,-1.99149 -4.573306,-3.04255 -7.852936,-3.04255 -5.225182,0 -9.33863,2.71064 -9.33863,6.19575
0,1.27234 1.056163,2.37871 2.39025,2.37871 1.334086,0 2.501413,-1.10637 2.501413,-2.3234 0,-0.22127
-0.05563,-0.49787 -0.111176,-0.8851 -0.111177,-0.49787 -0.16676,-0.94042 -0.16676,-1.32766 0,-1.49362
1.778783,-2.71064 4.002271,-2.71064 2.723757,0 4.672684,1.60425 4.672684,4.59149 v 4.39862 c
-7.655771,2.24877 -9.953459,2.84819 -12.343697,4.95032 -1.22292,1.10637 -2.001135,2.98723 -2.001135,4.81276
0,3.48511 2.445832,5.91915 5.836637,5.91915 2.445831,0 5.172972,-1.1617 8.563777,-4.0383 0.277937,2.93191
1.790584,4.0383 4.069655,4.0383 1.889959,0 3.057287,-0.66383 5.002829,-2.76596 z m -9.128066,-3.1532 c
0,1.65958 -0.277936,2.26809 -1.445263,2.93191 -1.389682,0.77448 -3.338597,1.2
1703 -4.505924,1.21703 -1.945553,0 -3.501982,-1.88085 -3.501982,-4.25958 v -0.22127 c 0.05563,-3.31915
2.949483,-4.39712 9.453169,-6.6652 z" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path1011"
+ d="m -607.01212,392.12301 c -0.91395,-0.0795 -2.06633,0.23842 -3.45713,0.95369 -1.3908,0.71527
-2.80146,1.78817 -4.232,3.21871 -1.43053,1.3908 -2.76173,3.07963 -3.99358,5.06648 -1.19211,1.98686
-2.06633,4.19227 -2.62265,6.61623 -0.4371,1.78817 -0.59605,3.33791 -0.47684,4.64924 0.11921,1.27158
0.39737,2.32462 0.83448,3.15909 0.43711,0.79475 0.97356,1.37094 1.60935,1.72857 0.63579,0.39738
1.23185,0.59606 1.78817,0.59606 1.19211,-0.0795 2.38423,-0.33776 3.57634,-0.77488 1.03316,-0.39736
2.12593,-1.01329 3.27831,-1.84777 1.15238,-0.87422 2.20541,-2.10606 3.1591,-3.69555 -0.0397,1.0729
0.0199,1.96699 0.17882,2.68225 0.19868,0.71527 0.39737,1.29143 0.59605,1.72857 0.23842,0.51658
0.53645,0.91394 0.89409,1.19211 0.35763,0.23845 0.77487,0.3974 1.25172,0.47685 0.47684,0.11922
0.97355,0.15898 1.49014,0.11921 0.55631,-0.0398 1.09277,-0.13908 1.60934,-0.29804 0.51659,-0.15894
0.97357,-0.35763 1.37094,-0.59605 0.59606,-0.39736 1.33119,-1.0729 2.20541,-2.02659 0.91395,-0.99342 1.8279,-
2.06632 2.74187,-3.21871 0.95369,-1.19211 1.86764,-2.36436 2.74185,-3.51673 0.87421,-1.19211
1.58947,-2.18554 2.14579,-2.98028 0.47687,-0.63579 0.75503,-1.19211 0.83449,-1.66897 0.11917,-0.47683
0.0993,-0.83448 -0.0596,-1.0729 -0.15895,-0.23839 -0.39737,-0.31787 -0.71528,-0.23842 -0.31789,0.0398
-0.63578,0.23844 -0.95369,0.59607 -0.23843,0.31789 -0.63578,0.81461 -1.1921,1.49013 -0.51659,0.67554
-1.11264,1.45041 -1.78817,2.32463 -0.67553,0.87421 -1.41066,1.78817 -2.20541,2.74186 -0.755,0.91394
-1.49014,1.7683 -2.2054,2.56303 -0.71527,0.75501 -1.39081,1.39081 -2.0266,1.90738 -0.63579,0.47685
-1.15238,0.71527 -1.54974,0.71527 -0.47685,0 -0.85435,-0.0993 -1.13251,-0.29802 -0.23843,-0.23842
-0.41724,-0.53645 -0.53645,-0.89409 -0.11922,-0.35763 -0.19869,-0.73514 -0.23843,-1.1325 0,-0.43712
0.0199,-0.83448 0.0596,-1.19212 0.11921,-0.59605 0.21856,-1.09276 0.29803,-1.49014 0.0795,-0.39736
0.13909,-0.73514 0.17882,-1.01329 0.0795,-0.31791 0.13909,-0.61593 0.17882,-0.89409 0.0794,-0.31789 0.1
5894,-0.65566 0.23842,-1.01329 0.39737,-1.82791 0.71527,-3.31805 0.95369,-4.47043 0.23842,-1.15237
0.41724,-2.06633 0.53645,-2.74186 0.11922,-0.67552 0.17882,-1.13251 0.17882,-1.37093 0,-0.27819
-0.0198,-0.457 -0.0596,-0.53645 -0.0795,-0.0398 -0.23842,-0.0596 -0.47684,-0.0596 -0.19868,0 -0.4967,0.0198
-0.89408,0.0596 -0.35763,0.0398 -0.81461,0.11921 -1.37093,0.23842 0.83448,-1.27159 1.15238,-2.28488
0.95369,-3.03989 -0.15895,-0.79474 -0.51658,-1.3908 -1.07291,-1.78817 -0.67552,-0.4371 -1.54974,-0.75501
-2.62264,-0.95369 z m -1.40371,3.72833 c 0.15149,0.008 0.28114,0.0567 0.39041,0.14604 0.11922,0.15896
0.19869,0.37751 0.23843,0.65566 0.0397,0.23842 0.0199,0.57618 -0.0596,1.0133 -0.0397,0.39736 -0.21856,0.91395
-0.53645,1.54975 0.31789,-0.0794 0.63579,-0.13905 0.95369,-0.17882 0.31789,-0.0398 0.57618,-0.0993
0.77487,-0.17882 0.23842,-0.0794 0.45697,-0.13904 0.65566,-0.17882 0.15895,-0.0397 0.17882,0.27817
0.0596,0.95369 -0.0795,0.6358 -0.21855,1.45041 -0.41724,2.44384 -0.19869,0.9934
4 -0.43711,2.0266 -0.71527,3.09949 -0.27816,1.0729 -0.51658,2.00672 -0.71526,2.80147 -0.0397,0.19868
-0.21856,0.51657 -0.53645,0.95369 -0.27816,0.43711 -0.65567,0.91395 -1.13251,1.43053 -0.43711,0.51658
-0.95369,1.0133 -1.54975,1.49014 -0.55632,0.47685 -1.13251,0.87422 -1.72856,1.19211 -0.55632,0.27813
-1.11264,0.43707 -1.66896,0.47685 -0.55632,0 -1.05303,-0.21856 -1.49014,-0.65566 -0.23842,-0.23843
-0.39737,-0.73513 -0.47685,-1.49014 -0.0795,-0.79474 -0.0596,-1.70871 0.0596,-2.74186 0.15895,-1.03317
0.41724,-2.12594 0.77488,-3.27831 0.35763,-1.19211 0.83448,-2.30475 1.43053,-3.33791 1.43054,-2.50345
2.68226,-4.21214 3.75516,-5.1261 0.83448,-0.71526 1.47971,-1.06246 1.9342,-1.04012 z"
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1000%;font-family:Satisfy;-inkscape-font-specification:Satisfy;letter-spacing:0px;word-spacing:0px;display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.52590454px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
/>
+ <g
+ transform="translate(-691.52809,153.52514)"
+ id="g1022"
+ style="display:inline;enable-background:new">
+ <path
+ id="path1016"
+ transform="translate(0,172)"
+ d="m 37,68 c -2.704645,-0.03825 -2.704645,4.03825 0,4 h 9.880859 c 0.01107,0.001
0.285634,0.0327 0.585938,0.197266 0.306304,0.16789 0.485897,0.188343 0.537109,0.939453 v -0.01953 L
48.25,78.310547 C 47.789324,78.134111 47.480469,78.058594 47.480469,78.058594 L 47.244141,78 H 38 c
-4.333333,0 -5.896484,4.367188 -5.896484,4.367188 L 32,82.675781 V 85 c 0,3.03333 1.431289,5.127712
2.939453,6.070312 C 36.447617,92.012912 38,92 38,92 h 7.591797 l 3.392578,-2.203125 0.01953,0.320313 c
0.08969,2.735348 4.223189,2.492675 3.992188,-0.234376 l -1,-17.009765 v -0.0098 c -0.140818,-2.06533
-1.461734,-3.545828 -2.607422,-4.173828 -1.145688,-0.62799 -2.257813,-0.685547 -2.257813,-0.685547 L
47.064453,68 Z m 1,14 h 8.644531 c 0.106906,0.0312 0.525263,0.141312 1.03711,0.482422 0.558515,0.372213
0.877827,0.68942 0.894531,1.355469 L 48.714844,85.201172 44.408203,88 H 38 C 38,88 37.552383,87.9871
37.060547,87.679688 36.568711,87.372288 36,86.96667 36,85 V 83.435547 C 36.102847,83.130577 3
6.534758,82 38,82 Z"
+
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-wi
dth:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccsccsscccccccccccscccccccscs" />
+ </g>
+ <path
+ sodipodi:nodetypes="ccccccccc"
+ inkscape:connector-curvature="0"
+ id="rect1201"
+ d="m -681.32504,431.44901 v 10 h 8 v -2 h -6 v -6 h 6 v -2 z"
+
style="display:inline;opacity:1;fill:#241f31;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
/>
+ <path
+ inkscape:connector-curvature="0"
+ id="path1217"
+ d="m -678.32504,431.44901 v -94"
+
style="display:inline;opacity:0.15;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
/>
+ </g>
+ <g
+ id="g1844"
+ transform="translate(-20.749999,15.499996)">
+ <rect
+ y="536.5"
+ x="-177.25"
+
style="display:inline;fill:url(#linearGradient1097);fill-opacity:1;stroke-width:1;enable-background:new"
+ width="104"
+ height="48"
+ rx="8"
+ id="rect1091"
+ ry="8" />
+ <path
+ sodipodi:nodetypes="ssssssssccccs"
+ inkscape:connector-curvature="0"
+ id="rect1093"
+ d="m -169.25,478.5 c -4.432,0 -8,3.568 -8,8 v 84 c 0,4.432 3.568,8 8,8 h 88 c 4.432,0 8,-3.568
8,-8 v -84 c 0,-4.432 -3.568,-8 -8,-8 h -42 v 2 h -4 v -2 z"
+
style="display:inline;fill:url(#radialGradient1099);fill-opacity:1;stroke-width:1.6841507;enable-background:new"
/>
+ <g
+ transform="translate(170.67783,294.50313)"
+ style="display:inline;enable-background:new"
+ id="g1381">
+ <rect
+ ry="13.072174"
+ id="rect1371"
+ rx="13.072174"
+ height="28"
+ width="28"
+ style="display:inline;fill:#f5c211;enable-background:new"
+ x="-283.92783"
+ y="193.99687" />
+ <path
+ sodipodi:nodetypes="ccssssc"
+ id="path1373"
+ d="m -276,211 h 12 v 0.99687 c 0,2.20914 -1.7909,4 -4,4 h -4 c -2.20914,0 -4,-1.79086 -4,-4 z"
+ style="display:inline;fill:url(#linearGradient1383);enable-background:new"
+ inkscape:connector-curvature="0" />
+ <rect
+ id="rect1375"
+ height="2"
+ width="12"
+ style="display:inline;fill:#ffffff;enable-background:new"
+ x="-276"
+ y="209.99687" />
+ <path
+ sodipodi:nodetypes="scsccs"
+ id="path1377"
+ d="m -276,204.99687 c 0,-0.55229 0.44772,-1 1,-1 0.55228,0 1,0.44771 1,1 v 3 h -2 z"
+ style="display:inline;fill:#b45600;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="scsccs"
+ id="path1379"
+ d="m -266,204.99687 c 0,-0.55229 0.44772,-1 1,-1 0.55228,0 1,0.44771 1,1 v 3 h -2 z"
+ style="display:inline;fill:#b45600;enable-background:new"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(170.75,294.5)"
+ style="display:inline;enable-background:new"
+ id="g1387">
+ <path
+
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#62a0ea;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-wi
dth:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
+ d="m 26,20 v 17 c 0,0 0.123719,2.819005 -2.894531,4.328125 l 1.789062,3.576172 C
29.876281,42.413417 30,37 30,37 v -1 h 12 v 2 c 0,0 -0.0278,1.167429 -0.470703,2.230469 C 41.086357,41.293509
40.7,42 39,42 h -1 l -2,4 h 2 1 c 3.3,0 5.413643,-2.293509 6.220703,-4.230469 C 46.027773,39.832571 46,38
46,38 V 20 Z m 4,4 h 12 v 2 H 30 Z m 0,6 h 12 v 2 H 30 Z"
+ transform="translate(-358,176)"
+ id="path1385"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(196.75,294.5)"
+ style="display:inline;enable-background:new"
+ id="g1393">
+ <path
+
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#26a269;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-wi
dth:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
+ d="m 60,78 a 2,2 0 0 0 -2,2 2,2 0 0 0 2,2 2,2 0 0 0 2,-2 2,2 0 0 0 -2,-2 z m -4,6 a 2,2 0 0 0
-2,2 2,2 0 0 0 2,2 2,2 0 0 0 2,-2 2,2 0 0 0 -2,-2 z m 8,0 a 2,2 0 0 0 -2,2 2,2 0 0 0 2,2 2,2 0 0 0 2,-2 2,2 0
0 0 -2,-2 z m 6,6 -4,2 v 4 h -4 v -2 -2 l -4,2 v 2 L 50,95.998 50.07227,100 c -0.001,1.12729 -0.87241,1.99805
-2,1.99805 -1.12827,0 -2,-0.87174 -2,-2.000003 h -4 c 0,3.290023 2.70998,6.000003 6,6.000003 3.29001,0
6,-2.70998 6,-6.000003 L 70,100 Z m -15.927734,3.996094 -4,2 h 4 z"
+ transform="translate(-352,168)"
+ id="path1389"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path1391"
+ d="m -309.92783,267.99687 4,-2 v 2 z"
+ style="display:inline;fill:#26a269;enable-background:new"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ sodipodi:nodetypes="cc"
+
style="display:inline;fill:none;fill-rule:evenodd;stroke:#deddda;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m -177.25,528.5 h 104"
+ id="path1397"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1458"
+ d="m -177.25,527.5 h 104"
+
style="display:inline;fill:none;fill-rule:evenodd;stroke:#c0bfbc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path1395"
+ d="m -125.25,480.5 v 100"
+
style="display:inline;fill:none;fill-rule:evenodd;stroke:#deddda;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
/>
+ <path
+ d="m -153.08925,552.65236 q 0,-1.12461 -0.36927,-1.94707 -0.36927,-0.83925 -0.97353,-1.40995
-0.23499,-0.23498 -0.50355,-0.4364 -0.40285,-0.30214 -0.57069,-0.46998 -0.67141,-0.63783 -1.00711,-1.47709
-0.3357,-0.83925 -0.3357,-1.77921 0,-0.97353 0.35249,-1.796 0.35248,-0.82246 0.99032,-1.46029
0.53712,-0.53712 1.51065,-1.0071 0.77211,-0.36927 1.72885,-0.36927 0.95675,0 1.76243,0.36927 0.90639,0.40284
1.51065,1.0071 0.63783,0.63783 0.99032,1.46029 0.35249,0.82247 0.35249,1.796 0,1.02389 -0.35249,1.82957
-0.35249,0.7889 -0.99032,1.42673 -0.16785,0.16784 -0.60426,0.46998 -0.13428,0.10067 -0.46998,0.4364
-0.68818,0.67141 -1.02388,1.49388 -0.31892,0.80569 -0.31892,1.86314 1.14138,0 1.98063,-0.38607
0.85604,-0.40283 1.40994,-0.95675 0.21821,-0.21819 0.41963,-0.48675 0.30213,-0.41963 0.46998,-0.58749
0.65462,-0.6546 1.49387,-0.9903 0.83925,-0.35249 1.77921,-0.35249 0.97353,0 1.796,0.35249 0.82246,0.35248
1.4603,0.9903 0.60426,0.60427 1.0071,1.51067 0.35248,0.78889 0.35248,1.74564
0,0.95675 -0.35248,1.74564 -0.40284,0.90638 -1.0071,1.51065 -0.63784,0.63783 -1.4603,0.99031
-0.82247,0.35249 -1.796,0.35249 -0.93996,0 -1.77921,-0.33572 -0.83925,-0.35246 -1.49387,-1.00708
-0.16785,-0.16785 -0.46998,-0.58748 -0.20142,-0.26856 -0.41963,-0.48677 -0.68818,-0.65461 -1.51065,-0.99031
-0.80568,-0.35248 -1.87992,-0.35248 0,1.14136 0.38606,1.99742 0.40284,0.83924 0.95674,1.39314 0.21821,0.21822
0.48677,0.41964 0.41962,0.30213 0.58747,0.46998 0.65462,0.65462 0.99032,1.49386 0.35249,0.83925
0.35249,1.77922 0,0.97352 -0.35249,1.79599 -0.35249,0.82247 -0.99032,1.46029 -0.60426,0.60428
-1.51065,1.00711 -0.78889,0.35249 -1.74564,0.35249 -0.95675,0 -1.74564,-0.35249 -0.90639,-0.40283
-1.51065,-1.00711 -0.63784,-0.63782 -0.99032,-1.46029 -0.35249,-0.82247 -0.35249,-1.79599 0,-0.93997
0.3357,-1.77922 0.35249,-0.83924 1.00711,-1.49386 0.16784,-0.16785 0.58747,-0.46998 0.26856,-0.20142
0.48677,-0.41964 0.65461,-0.68818 0.99031,-1.49385 0.35249,-0.82248 0.35249,-1.89671 -1.05746,0 -1
.89671,0.35248 -0.82247,0.3357 -1.47708,0.99031 -0.23499,0.23499 -0.43641,0.50355 -0.30213,0.40285
-0.46998,0.5707 -0.63783,0.6714 -1.47708,1.00708 -0.83926,0.33572 -1.77922,0.33572 -0.97353,0
-1.79599,-0.35249 -0.82247,-0.35248 -1.4603,-0.99031 -0.55391,-0.53712 -1.0071,-1.51065 -0.36927,-0.77211
-0.36927,-1.72886 0,-0.95675 0.36927,-1.76242 0.40284,-0.9064 1.0071,-1.51067 0.63783,-0.63782 1.4603,-0.9903
0.82246,-0.35249 1.79599,-0.35249 1.02389,0 1.81279,0.35249 0.80568,0.35248 1.44351,0.9903 0.16785,0.16786
0.46998,0.60427 0.10071,0.13428 0.43641,0.46997 0.6714,0.6714 1.49387,1.00711 0.82246,0.33571 1.87992,0.33571
z"
+
style="font-style:normal;font-weight:normal;font-size:medium;line-height:1000%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#a347ba;fill-opacity:1;stroke:none;stroke-width:0.85939318px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ id="path1476"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g1331"
+ transform="translate(-14,72)">
+ <g
+ id="g6295"
+ inkscape:label="network-wireless-signal-excellent"
+ transform="translate(191.9998,-389)"
+ style="display:inline">
+ <rect
+ clip-path="none"
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none"
+ id="rect6303"
+ width="16"
+ height="16"
+ x="-505"
+ y="70.000198"
+ transform="rotate(-90)" />
+ <circle
+ r="1"
+ cy="209"
+ cx="28"
+ clip-path="none"
+ style="display:inline;fill:#241f31;fill-opacity:1;stroke:none"
+ id="path6305"
+ transform="matrix(1.9999995,0,0,1.9999995,22.000213,84.0001)" />
+ <path
+
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0;marker:none;enable-background:accumulate"
+ d="m 78.000188,491.0002 c -2.81422,0 -5.17173,1 -7,2.58557 v 1.41443 h 1.48072 c
1.51928,-1.26466 3.21936,-2 5.51928,-2 2.29992,0 4,0.77953 5.51928,2 h 1.48072 v -1.38128 c -1.64044,-1.46575
-4.18578,-2.61872 -7,-2.61872 z"
+ id="rect11714"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="scccscccs" />
+ <path
+
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0;marker:none;enable-background:accumulate"
+ d="m 78.000188,494.0002 c -2.16664,0 -4.01982,0.73878 -5,2 v 1 h 2 c 0.78878,-0.60652
1.75887,-1 3,-1 1.24113,0 2.21938,0.39348 3,1 h 2 v -1 c -0.99478,-1.2229 -2.8734,-2 -5,-2 z"
+ id="rect11703"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="scccscccs" />
+ <path
+
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;stroke:none;stroke-width:2.32782054;marker:none;enable-background:accumulate"
+ mask="none"
+ clip-path="none"
+ d="m 78.000188,497.0002 c -1.25733,0 -2.21571,0.31165 -3,1 v 1 h 3 0.375 2.625 v -1 c
-0.8369,-0.67206 -1.74267,-1 -3,-1 z"
+ id="path6297"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="zccccccz" />
+ </g>
+ <g
+ transform="rotate(90,197,316.99999)"
+ inkscape:label="battery-full"
+ id="g3728"
+ style="display:inline">
+ <desc
+ id="desc11549">battery is full and there is no a/c connected.</desc>
+ <rect
+
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate"
+ id="rect2928"
+ width="2"
+ height="6"
+ x="25"
+ y="-247"
+ transform="scale(1,-1)" />
+ <path
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#241f31;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
+ d="m 35,239 v 10 H 23 v -2 H 21.484375 C 21.25,247 21,246.75 21,246.53125 V 241.5625 C
20.98437,241.28125 21.340963,241.01563 21.622213,241 H 23 v -2 z"
+ id="path2930"
+ sodipodi:nodetypes="ccccccccccc"
+ inkscape:connector-curvature="0" />
+ <rect
+ y="236"
+ x="20"
+ height="16"
+ width="16"
+ id="rect3704-3"
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none"
/>
+ <rect
+ transform="scale(1,-1)"
+ y="-247"
+ x="28"
+ height="6"
+ width="2"
+ id="rect4227"
+
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate"
/>
+ <rect
+
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate"
+ id="rect4229"
+ width="2"
+ height="6"
+ x="31"
+ y="-247"
+ transform="scale(1,-1)" />
+ </g>
+ <g
+ transform="translate(262.00001,-136)"
+ id="g3288"
+ inkscape:label="network-cellular-signal-good"
+ style="display:inline">
+ <path
+ id="path3290"
+ d="m 33.5,277.5 v 12"
+
style="display:inline;opacity:0.35;fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:#241f31;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+
inkscape:export-filename="/Users/hylkebons/tmp/mid/Toolbar/Graphics/tiny_toolbar_icons/icons/cell-network-no-connection.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+
inkscape:export-filename="/Users/hylkebons/tmp/mid/Toolbar/Graphics/tiny_toolbar_icons/icons/cell-network-no-connection.png"
+
style="display:inline;fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:#241f31;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 29.5,280.49216 V 289.5"
+ id="path3292"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path3294"
+ d="m 25.5,283.5 v 6"
+
style="display:inline;fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:#241f31;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+
inkscape:export-filename="/Users/hylkebons/tmp/mid/Toolbar/Graphics/tiny_toolbar_icons/icons/cell-network-no-connection.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+
inkscape:export-filename="/Users/hylkebons/tmp/mid/Toolbar/Graphics/tiny_toolbar_icons/icons/cell-network-no-connection.png"
+
style="display:inline;fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:#241f31;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 21.5,286.5 v 3"
+ id="path3296"
+ inkscape:connector-curvature="0" />
+ <rect
+ y="276"
+ x="20"
+ height="16"
+ width="16"
+ id="rect3298"
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none"
/>
+ </g>
+ <g
+ style="display:inline"
+ transform="translate(262,-196)"
+ inkscape:label="mail-unread"
+ id="g35596">
+ <rect
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:2;marker:none"
+ id="rect35598"
+ width="16"
+ height="16"
+ x="19.99975"
+ y="296" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc"
+ id="path35600"
+ d="m 22.999801,300.99992 5.000005,4.00007 4.999994,-4.00002"
+
style="fill:none;stroke:#241f31;stroke-width:1.99999976;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
/>
+ <rect
+ y="300"
+ x="21.9998"
+ height="9"
+ width="12"
+ id="rect35604"
+
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#241f31;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
/>
+ </g>
+ <g
+ inkscape:label="call-missed"
+ id="g9250"
+ style="display:inline"
+ transform="translate(160.9998,-177)">
+ <rect
+ y="317"
+ x="141.0002"
+ height="16"
+ width="16"
+ id="rect44122"
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none"
/>
+ <path
+ inkscape:connector-curvature="0"
+ id="path44196"
+ d="m 149.99715,317.00012 v 0.78125 a 1.001098,1.001098 0 0 0 1.03125,1.21875 h 0.59375 l
-2.5625,2.5625 -2.375,-2.28125 a 1.0054782,1.0054782 0 0 0 -0.71875,-0.28125 h -0.125 -0.84375 v 0.75 a
1.0054782,1.0054782 0 0 0 0,0.0937 1.0054782,1.0054782 0 0 0 0.28125,0.875 l 3.09375,2.96875 0.6875,0.6875
0.71875,-0.6875 3.21875,-3.25 v 0.5625 a 1.0001,1.0001 0 0 0 1,1 h 1 v -0.84375 a 1.0001,1.0001 0 0 0
0,-0.1562 v -3 -1 h -1 -2.96875 a 1.0001,1.0001 0 0 0 -0.0312,0 z"
+
style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:xx-small;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
/>
+ <path
+ sodipodi:nodetypes="ccccccccscccccscc"
+ inkscape:connector-curvature="0"
+ style="display:inline;opacity:1;fill:#241f31;fill-opacity:1;stroke:none;enable-background:new"
+ d="m 141.2661,330.71341 c -0.34368,-0.34368 -0.34865,-1.07502 -2e-5,-1.42366 l 0.0404,-0.0403 c
4.26664,-4.24462 11.16673,-4.2381 15.42494,0.0201 l 0.02,0.0201 c 0.35061,0.35061 0.31852,1.07025
-0.0201,1.44378 l -1.93062,1.99693 c -0.35652,0.35653 -0.93056,0.35652 -1.28709,10e-6 l -1.28709,-1.2871 c
-0.35652,-0.35653 -0.35653,-0.93055 -1e-5,-1.28709 l 0.30167,-0.30165 c -2.22715,-1.06378 -4.81163,-1.06378
-7.03876,10e-6 l 0.30166,0.30164 c 0.35653,0.35654 0.35652,0.93056 0,1.2871 l -1.28709,1.28708 c
-0.35653,0.35653 -0.93663,0.3625 -1.28709,0 z"
+ id="rect5922-5-0" />
+ </g>
+ <g
+ inkscape:label="user-available"
+ id="g8272"
+ style="display:inline"
+ transform="translate(240.9998,-237)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8268"
+ transform="translate(241.0002,217)"
+ d="m -196.5,141 c -1.385,0 -2.5,1.115 -2.5,2.5 v 5 c 0,1.385 1.115,2.5 2.5,2.5 h 6.375 l
3.125,4 v -4.0625 c 1.14126,-0.23235 2,-1.22563 2,-2.4375 v -5 c 0,-1.385 -1.115,-2.5 -2.5,-2.5 z"
+
style="fill:#241f31;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
/>
+ <rect
+ y="357"
+ x="41.000198"
+ height="16"
+ width="16"
+ id="rect11252"
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none"
/>
+ </g>
+ <g
+ transform="translate(60.99979,383)"
+ inkscape:label="airplane-mode"
+ id="g5836"
+ style="display:inline;enable-background:new">
+ <rect
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none"
+ id="rect5092"
+ width="16"
+ height="16"
+ x="261.00021"
+ y="-243" />
+ <path
+ style="fill:#241f31;fill-opacity:1;stroke:none"
+ d="m 267.49679,-242 c -0.79399,9.7e-4 -0.78072,0.0333 -0.53125,1.03125 l 1.625,4.96875 h -4.5 l
-1.21875,-1.78125 c -0.13926,-0.20883 -0.1227,-0.21873 -0.34375,-0.21875 h -0.21875 c -0.42773,0
-0.28125,0.4375 -0.28125,0.4375 l 0.28125,2.5625 -0.28125,2.5625 c 0,0 -0.13986,0.43749 0.25,0.4375 h 0.25 c
0.21159,0 0.20422,-0.009 0.34375,-0.21875 L 264.09054,-234 h 4.5 l -1.625,4.9375 c -0.26171,1.04691
-0.2647,1.06251 0.53125,1.0625 0.43199,0 0.43388,-0.0117 0.71875,-0.5 l 3.6875,-5.5 h 3.09375 c 0.554,0
1,-0.446 1,-1 0,-0.554 -0.446,-1 -1,-1 h -3.09375 l -3.6875,-5.5 c -0.2665,-0.45685 -0.28331,-0.49822
-0.65625,-0.5 z"
+ id="path6273"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ style="display:inline"
+ inkscape:label="audio-input-microphone"
+ id="g3281-5"
+ transform="translate(282,-156)">
+ <rect
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none"
+ id="rect3825-9-5"
+ width="16"
+ height="16"
+ x="20"
+ y="276" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m -176.5,235 c -0.27614,0 -0.5,0.22386 -0.5,0.5 v 2.96875 c 0,1.96838 1.25801,3.62455 3,4.25
V 244 h -2 c -0.56475,0 -1,0.49007 -1,1 v 1 h 0.84375 2.15625 5 0.0937 0.90625 v -1 c -6e-5,-0.58435
-0.47642,-0.99995 -1,-1 h -2 v -1.28125 c 1.74199,-0.62545 3,-2.28162 3,-4.25 V 235.5 c 0,-0.27614
-0.22386,-0.5 -0.5,-0.5 -0.27614,0 -0.5,0.22386 -0.5,0.5 0,0.069 0.006,0.12768 0.0312,0.1875 v 2.78125 c
0,1.96415 -1.57895,3.53125 -3.53125,3.53125 -1.9523,0 -3.5,-1.5671 -3.5,-3.53125 V 235.5 c 0,-0.27614
-0.22386,-0.5 -0.5,-0.5 z m 3.9998,-4.01288 c 1.385,0 2.5,1.115 2.5,2.5 V 238.5 c 0,1.385 -1.115,2.5 -2.5,2.5
-1.385,0 -2.5,-1.115 -2.5,-2.5 v -5.01288 c 0,-1.385 1.115,-2.5 2.5,-2.5 z"
+
style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;stroke:none;stroke-width:1.00302994;marker:none;enable-background:accumulate"
+ transform="translate(200.0002,46)"
+ id="rect6806" />
+ </g>
+ <g
+ style="display:inline"
+ inkscape:label="camera-photo"
+ id="g11537"
+ transform="translate(282,-176)">
+ <rect
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none"
+ id="rect11539"
+ width="16"
+ height="16"
+ x="20"
+ y="276" />
+ <path
+ inkscape:connector-curvature="0"
+ id="rect5238"
+ d="m 26,278 c -0.549959,0 -1,0.45004 -1,1 v 1 h -3 c -0.552014,0 -1,0.45004 -1,1 v 8 c
0,0.54996 0.447986,1 1,1 h 12 c 0.552014,0 1,-0.45004 1,-1 v -8 c 0,-0.54996 -0.447986,-1 -1,-1 h -3 v -1 c
0,-0.54996 -0.450041,-1 -1,-1 z m 2,3 c 2.209139,0 4,1.79086 4,4 0,2.20914 -1.790861,4 -4,4 -2.209139,0
-4,-1.79086 -4,-4 0,-2.20914 1.790861,-4 4,-4 z m 0,2 c -1.10457,0 -2,0.89543 -2,2 0,1.10457 0.89543,2 2,2
1.10457,0 2,-0.89543 2,-2 0,-1.10457 -0.89543,-2 -2,-2 z"
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;enable-background:accumulate"
/>
+ </g>
+ <g
+ id="g8762"
+ inkscape:label="input-dialpad"
+ style="display:inline"
+ transform="translate(222.0002,-470)">
+ <rect
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none"
+ id="rect8764"
+ width="16"
+ height="16"
+ x="20"
+ y="276"
+ transform="translate(99.9998,334)" />
+ <path
+ sodipodi:nodetypes="cssccsssscscscccccccccccccccccccccccccccccccccccccccccccccccccccc"
+ inkscape:connector-curvature="0"
+ id="rect8806"
+ transform="translate(120,380)"
+ d="m 3.5,230 c 0,0 -1.5,0 -1.5,1.5 v 9 C 2,242 3.5,242 3.5,242 H 5 v 2 c 0,0.554 0.446,1 1,1 h
4 c 0.554,0 1,-0.446 1,-1 v -2 h 1.5 c 1.5,0 1.5,-1.5 1.5,-1.5 v -9 C 14,230 12.5,230 12.5,230 Z m 0.5,2 h 2
v 2 H 4 Z m 3,0 h 2 v 2 H 7 Z m 3,0 h 2 v 2 h -2 z m -6,3 h 2 v 2 H 4 Z m 3,0 h 2 v 2 H 7 Z m 3,0 h 2 v 2 h
-2 z m -6,3 h 2 v 2 H 4 Z m 3,0 h 2 v 2 H 7 Z m 3,0 h 2 v 2 h -2 z m -3,3 h 2 v 2 H 7 Z"
+
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
/>
+ </g>
+ <g
+ id="g14087"
+ style="display:inline"
+ transform="translate(220.9998,-77)">
+ <g
+ transform="translate(1.6357422e-6)"
+ style="display:inline"
+ id="g8093"
+ inkscape:label="audio-volume-high">
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc"
+ id="path5491"
+ d="m 41.0002,201.99979 h 2.484375 L 46.453329,199 H 47.0002 v 11.99917 L 46.524903,211
43.484575,207.99938 H 41.0002 Z"
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none"
/>
+ <rect
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:none;stroke-width:1;marker:none"
+ id="rect6203"
+ width="16"
+ height="16"
+ x="41.000198"
+ y="197" />
+ <path
+
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0;marker:none;enable-background:accumulate"
+ d="m 56.00019,205.0002 c 0,-2.81422 -1,-5.17173 -2.58557,-7 h -1.41443 v 1.48072 c
1.26466,1.51928 2,3.21936 2,5.51928 0,2.29992 -0.77953,4 -2,5.51928 v 1.48072 h 1.38128 c 1.46575,-1.64044
2.61872,-4.18578 2.61872,-7 z"
+ id="rect11714-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="scccscccs" />
+ <path
+
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0;marker:none;enable-background:accumulate"
+ d="m 53.00019,205.0002 c 0,-2.16664 -0.73878,-4.01982 -2,-5 h -1 v 2 c 0.60652,0.78878
1,1.75887 1,3 0,1.24113 -0.39348,2.21938 -1,3 v 2 h 1 c 1.2229,-0.99478 2,-2.8734 2,-5 z"
+ id="rect11703-1"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="scccscccs" />
+ <path
+
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;stroke:none;stroke-width:2.32782054;marker:none;enable-background:accumulate"
+ mask="none"
+ clip-path="none"
+ d="m 50.00019,205.0002 c 0,-1.25733 -0.31165,-2.21571 -1,-3 h -1 v 6 h 1 c 0.67206,-0.8369
1,-1.74267 1,-3 z"
+ id="path6297-6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="zccccz" />
+ </g>
+ </g>
+ <g
+ id="g11497-6-7-9-1"
+ inkscape:label="application-rss+xml"
+ transform="translate(314.00001,-298)"
+ style="display:inline">
+ <rect
+ y="398"
+ x="48"
+ height="16"
+ width="16"
+ id="rect10727-3-4-6-9"
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;opacity:0.51464431;fill:none;stroke:none;stroke-width:3;marker:none;enable-background:accumulate"
/>
+ <ellipse
+ ry="3.236068"
+ rx="2"
+ cy="97.1875"
+ cx="323.0625"
+ transform="matrix(1.0000007,0,0,0.61803426,-271.06253,349.93467)"
+ id="path4983"
+
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.69602728;marker:none;enable-background:new"
/>
+ <path
+ inkscape:connector-curvature="0"
+ id="path5814"
+ d="m 50.0002,399.99988 v 1 c 0,0.55016 0.45347,1 1,1 4.97056,0 9,4.02944 9,9 0,0.55016
0.45347,1 1,1 h 1 v -1 c 0,-6.07513 -4.92487,-11 -11,-11 z m 0,4 v 1 c 0,0.55016 0.45347,1 1,1 2.76143,0
5,2.23857 5,5 0,0.55016 0.45347,1 1,1 h 1 v -1 c 0,-3.866 -3.134,-7 -7,-7 z"
+
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.33333492;marker:none;enable-background:new"
/>
+ </g>
+ <g
+ transform="translate(-219.99999,-261.99997)"
+ inkscape:label="emblem-music"
+ id="g6252"
+ style="display:inline">
+ <rect
+ y="381.99997"
+ x="582"
+ height="16"
+ width="16"
+ id="rect24874-7-8-7"
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
/>
+ <circle
+ r="2.4306796"
+ cy="174.17094"
+ cx="345.99619"
+
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#241f31;stroke-width:1.94454503;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:new"
+ id="path6170"
+ transform="matrix(1.0285185,0,0,1.028518,229.63673,214.36204)" />
+ <circle
+ r="2.4306796"
+ cy="174.17094"
+ cx="345.99619"
+
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#241f31;stroke-width:1.94454503;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:new"
+ id="path6170-5"
+ transform="matrix(1.0285185,0,0,1.028518,237.63673,214.36204)" />
+ <rect
+
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.50793636;marker:none;enable-background:new"
+ id="rect6190"
+ width="2.0000219"
+ height="9.515729"
+ x="587.00018"
+ y="384" />
+ <rect
+
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.50793636;marker:none;enable-background:new"
+ id="rect6190-8"
+ width="2.0000412"
+ height="9.5626974"
+ x="595.00018"
+ y="384" />
+ <rect
+
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.50793636;marker:none;enable-background:new"
+ id="rect6190-8-8"
+ width="10.000017"
+ height="2"
+ x="587.00018"
+ y="384" />
+ </g>
+ <g
+ transform="translate(-139.0002,-241)"
+ inkscape:label="emblem-synchronizing"
+ id="g5244"
+ style="display:inline">
+ <rect
+ width="16"
+ height="16"
+ x="-397"
+ y="501.00021"
+ id="rect10837-5-8-4-4-2-3"
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none;enable-background:new"
+ transform="rotate(-90)" />
+ <path
+ sodipodi:nodetypes="cccccccccccccccc"
+ inkscape:connector-curvature="0"
+
style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ d="m 515.90195,383.0005 c -0.0423,0.008 -0.0841,0.0181 -0.125,0.0312 -0.44715,0.10014
-0.79228,0.5419 -0.78125,1 v 1.6875 c 0.004,1.31255 0.004,1.31255 -1.5625,1.3125 h -1.4375 c -0.52358,5e-5
-0.99995,0.47642 -1,1 -0.008,0.0726 -0.008,0.14613 0,0.21875 v 0.78125 h 6 v -1 -4 c 0.006,-0.0623
0.006,-0.12518 0,-0.1875 v -0.8125 h -0.8125 c -0.0916,-0.0236 -0.18665,-0.0342 -0.28125,-0.0312 z"
+ id="path4597-1" />
+ <path
+ sodipodi:nodetypes="cccccccccccccccc"
+ inkscape:connector-curvature="0"
+
style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ d="m 501.0047,389 v 1 4 c -0.006,0.0623 -0.006,0.12518 0,0.1875 V 395 h 0.8125 c 0.0916,0.0236
0.18665,0.0342 0.28125,0.0312 0.0423,-0.008 0.0841,-0.0181 0.125,-0.0312 0.44715,-0.10014 0.79228,-0.5419
0.78125,-1 v -1.6875 C 503.00029,391 503.00029,391 504.5672,391 h 1.4375 c 0.52358,-5e-5 0.99995,-0.47642
1,-1 0.008,-0.0726 0.008,-0.14613 0,-0.21875 V 389 Z"
+ id="path10913" />
+ <path
+ inkscape:connector-curvature="0"
+
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.33333325;marker:none;enable-background:accumulate"
+ d="m 268,165 c -3.15321,0 -5.81948,2.12571 -6.6875,5 h 2.09375 c 0.7734,-1.76501 2.53819,-3
4.59375,-3 2.05556,0 3.82035,1.23499 4.59375,3 h 2.09375 c -0.86802,-2.87429 -3.53429,-5 -6.6875,-5 z m
-6.6875,9 c 0.86802,2.87429 3.53429,5 6.6875,5 3.15321,0 5.81948,-2.12571 6.6875,-5 h -2.09375 c
-0.7734,1.76501 -2.53819,3 -4.59375,3 -2.05556,0 -3.82035,-1.23499 -4.59375,-3 z"
+ transform="translate(241.0002,217)"
+ id="path1483" />
+ </g>
+ <g
+ inkscape:label="emblem-videos"
+ transform="translate(482.0002,-110)"
+ id="g21333-9-5"
+ style="display:inline">
+ <g
+ style="display:inline"
+ inkscape:label="camera-web"
+ id="use21331-8-1"
+ transform="matrix(-1,0,0,1,-124.0002,-46)">
+ <rect
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none"
+ id="rect2132"
+ width="16"
+ height="16"
+ x="20"
+ y="276" />
+ <rect
+ ry="1"
+ rx="0.99980003"
+ y="280"
+ x="21.03125"
+ height="9"
+ width="9.96875"
+ id="rect2134"
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;stroke:none;stroke-width:1;marker:none"
/>
+ <path
+ inkscape:connector-curvature="0"
+ id="path2136"
+ d="M 31,284.4693 34.469295,281 H 35.0002 v 7 h -0.5 z"
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;stroke:none;stroke-width:1;marker:none"
+ sodipodi:nodetypes="cccccc" />
+ </g>
+ </g>
+ <g
+ transform="matrix(-1,0,0,1,863.00037,79.003359)"
+ inkscape:label="call-start"
+ id="g6051"
+ style="display:inline;enable-background:new">
+ <rect
+ y="20.996641"
+ x="-521.00037"
+ height="16"
+ width="16"
+ id="rect43299-3"
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none"
+ transform="scale(-1,1)" />
+ <path
+ transform="translate(241.0002,-473)"
+ inkscape:connector-curvature="0"
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:none"
+ d="M 266.96875,495 C 266.43472,495 266,495.42699 266,495.96875 v 0.0625 C 266.01714,502.64406
271.38317,508 278,508 h 0.0312 c 0.54483,0 0.9688,-0.446 0.9688,-1 v -1 -2 c 0,-0.554 -0.446,-1 -1,-1 h -2 c
-0.554,0 -1,0.446 -1,1 v 0.46875 C 272.44314,503.56487 270.43513,501.55686 269.53125,499 H 270 c 0.55401,0
1,-0.44599 1,-1 v -2 c 0,-0.55401 -0.44599,-1 -1,-1 h -1 -1 -0.96875 -0.0312 -0.0312 z"
+ id="rect5922" />
+ </g>
+ <g
+ transform="translate(162,-526)"
+ inkscape:label="document-edit"
+ id="g10444"
+ style="display:inline">
+ <rect
+ y="646"
+ x="180"
+ height="16"
+ width="16"
+ id="rect10447"
+ style="fill:none;stroke:none" />
+ <path
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ sodipodi:nodetypes="cccccc"
+ id="path13107"
+ d="m 182.67863,656.29269 5.84933,-5.85075 2.99982,2.99981 -5.82888,5.87306 -4.02677,1.07184 z"
+ inkscape:connector-curvature="0" />
+ <path
+ id="rect9831"
+ d="m 191.63729,647.67638 c -0.20052,0 -0.40103,0.0768 -0.55468,0.23047 l -1.76953,1.76758
3.05273,3.05273 1.76953,-1.76953 c 0.3073,-0.3073 0.3073,-0.80208 0,-1.10938 l -1.94336,-1.9414 c
-0.15365,-0.15365 -0.35417,-0.23047 -0.55469,-0.23047 z"
+
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(-77.999996,142.00001)"
+ inkscape:label="go-home"
+ id="g9849"
+ style="display:inline">
+ <g
+ transform="translate(-853.0002,532.99999)"
+ style="display:inline"
+ id="use9847"
+ inkscape:label="user-home">
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path2140"
+ d="M 1256.0002,-568.99998 V -562 h 10 v -6.99998"
+
style="fill:none;stroke:#241f31;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
/>
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path2142"
+ d="m 1254.0002,-567.99998 7,-5 7,5"
+
style="fill:none;stroke:#241f31;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
/>
+ <rect
+ y="-567"
+ x="1259.0002"
+ height="6"
+ width="3"
+ id="rect2144"
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
/>
+ <rect
+ style="display:inline;fill:#241f31;fill-opacity:1;stroke:none"
+ id="rect2146"
+ width="1"
+ height="1"
+ x="-1269.0004"
+ y="-568"
+ transform="scale(-1,1)" />
+ <rect
+ style="display:inline;fill:#241f31;fill-opacity:1;stroke:none"
+ id="rect2148"
+ width="1"
+ height="1"
+ x="-1254.0004"
+ y="-568"
+ transform="scale(-1,1)" />
+ <rect
+ y="-575"
+ x="1253.0002"
+ height="16"
+ width="16"
+ id="rect2150"
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
/>
+ </g>
+ </g>
+ <g
+ id="g40070"
+ inkscape:label="user-trash"
+ transform="matrix(-1,0,0,1,625.94876,-856)"
+ style="display:inline">
+ <rect
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ id="rect40076"
+ width="16"
+ height="16"
+ x="227.9998"
+ y="996" />
+ <path
+ d="m 230.9998,1001 v 9 h 9 v -9 h 2 v 9 c 0,2 -2,2 -2,2 h -9 c -2,0 -2,-2 -2,-2 v -9 z m
4.00001,1 h 1.00002 v 6 h -1.00002 z m 2,0 h 1.00002 v 6 h -1.00002 z m -4,0 h 0.99999 v 6 h -0.99999 z m
-1.00001,-6 c -2,0 -2,2 -2,2 h -2 v 2 h 15 v -2 h -2 c 0,-2 -2,-2 -2,-2 z m 0,1 h 7 v 1 h -7 z"
+ style="fill:#000000;fill-opacity:1;stroke:none"
+ id="path3799"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g35539"
+ transform="translate(35.758249,-843.1781)"
+ inkscape:label="emblem-important"
+ style="display:inline">
+ <path
+ style="fill:#000000;fill-opacity:1;stroke:none"
+ d="m 354.1907,964.17812 c -3.86599,0 -7,3.13401 -7,7 0,3.86599 3.13401,7 7,7 3.86599,0
7,-3.13401 7,-7 0,-3.86599 -3.13401,-7 -7,-7 z m -0.0937,1.96875 a 1.0001,1.0001 0 0 1 1.09375,1.03125 v 5 a
1.0001,1.0001 0 1 1 -2,0 v -5 a 1.0001,1.0001 0 0 1 0.78125,-1 1.0001,1.0001 0 0 1 0.125,-0.0313 z m
0.0937,8.03125 c 0.55228,0 1,0.44772 1,1 0,0.55228 -0.44772,1 -1,1 -0.55229,0 -1,-0.44772 -1,-1 0,-0.55228
0.44771,-1 1,-1 z"
+ id="path35543"
+ inkscape:connector-curvature="0" />
+ <rect
+ y="963.1781"
+ x="346.1907"
+ height="16"
+ width="16"
+ id="rect35549"
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
/>
+ </g>
+ <g
+ transform="translate(-59.05126,-281)"
+ inkscape:label="emblem-favorite"
+ id="g8559"
+ style="display:inline">
+ <rect
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ id="rect14243"
+ width="16"
+ height="16"
+ x="441.00021"
+ y="381" />
+ <path
+ style="display:inline;fill:#000000;fill-opacity:1;stroke:none;enable-background:new"
+ sodipodi:nodetypes="cscsscccccc"
+ inkscape:connector-curvature="0"
+ id="path4"
+ d="m 456.0002,386.76617 c 0,-2.07495 -1.68742,-3.75698 -3.76925,-3.75698 -1.37132,0
-2.57123,0.73006 -3.23065,1.8214 -0.65942,-1.09135 -1.85953,-1.8214 -3.23085,-1.8214 -2.08183,0
-3.76925,1.68203 -3.76925,3.75698 0,1.07968 0.45777,2.05239 1.18953,2.73766 h -10e-4 l 5.72506,5.49617
5.89867,-5.49617 h -0.002 c 0.73186,-0.68517 1.18933,-1.65788 1.18933,-2.73766" />
+ </g>
+ </g>
+ <g
+ id="g2014"
+ transform="translate(-70.030303,-207)">
+ <g
+ transform="matrix(0.3,0,0,-0.21279762,-440.7697,766.3631)"
+
style="display:inline;fill:url(#linearGradient1572);fill-opacity:1;stroke-width:1.0298574;enable-background:new"
+ clip-path="none"
+ id="g1479">
+ <rect
+ transform="scale(-1,1)"
+ clip-path="none"
+ ry="37.594406"
+ rx="26.666666"
+ y="-190.965"
+ x="-429.33334"
+ height="451.13287"
+ width="346.66669"
+ id="rect1473"
+
style="opacity:1;vector-effect:none;fill:#1a5fb4;fill-opacity:1;stroke:none;stroke-width:53.73949814;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
/>
+ <rect
+
style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:53.73949814;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
+ id="rect1475"
+ width="346.66669"
+ height="451.13287"
+ x="-429.33334"
+ y="-181.56641"
+ rx="26.666666"
+ ry="37.594406"
+ clip-path="none"
+ transform="scale(-1,1)" />
+ <rect
+
style="opacity:1;vector-effect:none;fill:#f6f5f4;fill-opacity:1;stroke:none;stroke-width:53.73949814;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
+ id="rect1477"
+ width="346.66669"
+ height="451.13284"
+ x="-429.33334"
+ y="-153.37062"
+ rx="26.666666"
+ ry="37.594406"
+ clip-path="none"
+ transform="scale(-1,1)" />
+ </g>
+ <g
+ id="g1497"
+ style="display:inline;enable-background:new"
+ transform="translate(-427.9697,519)">
+ <circle
+ r="1.9999998"
+ cy="252"
+ cx="108"
+ id="circle1481"
+
style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
/>
+ <circle
+
style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle1483"
+ cx="108"
+ cy="242"
+ r="1.9999998" />
+ <circle
+ r="1.9999998"
+ cy="232"
+ cx="108"
+ id="circle1485-8"
+
style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
/>
+ <circle
+
style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle1487"
+ cx="108"
+ cy="222"
+ r="1.9999998" />
+ <circle
+ r="1.9999998"
+ cy="212"
+ cx="108"
+ id="circle1489"
+
style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
/>
+ <circle
+
style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle1493"
+ cx="108"
+ cy="202"
+ r="1.9999998" />
+ <circle
+ r="1.9999998"
+ cy="192"
+ cx="108"
+ id="circle1495"
+
style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
/>
+ </g>
+ <g
+ id="g1518"
+ style="display:inline;enable-background:new"
+ transform="translate(-427.9697,519)">
+ <circle
+
style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle1499-7"
+ cx="20"
+ cy="272"
+ r="1.9999998" />
+ <circle
+ r="1.9999998"
+ cy="262"
+ cx="20"
+ id="circle1501"
+
style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
/>
+ <circle
+
style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle1503"
+ cx="20"
+ cy="252"
+ r="1.9999998" />
+ <circle
+ r="1.9999998"
+ cy="242"
+ cx="20"
+ id="circle1505"
+
style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
/>
+ <circle
+
style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle1507"
+ cx="20"
+ cy="232"
+ r="1.9999998" />
+ <circle
+ r="1.9999998"
+ cy="222"
+ cx="20"
+ id="circle1509"
+
style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
/>
+ <circle
+
style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle1511"
+ cx="20"
+ cy="212"
+ r="1.9999998" />
+ <circle
+ r="1.9999998"
+ cy="202"
+ cx="20"
+ id="circle1513-9"
+
style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
/>
+ <circle
+
style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle1515"
+ cx="20"
+ cy="192"
+ r="1.9999998" />
+ </g>
+ <g
+ transform="translate(-427.9697,518)"
+ id="g1538"
+ style="display:inline;opacity:0.3;stroke:#d5d3cf;enable-background:new">
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path1520"
+ d="m 28,192 h 72"
+
style="fill:none;fill-rule:evenodd;stroke:#d5d3cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
/>
+ <path
+ sodipodi:nodetypes="cc"
+
style="fill:none;fill-rule:evenodd;stroke:#d5d3cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 28,202 h 72"
+ id="path1522"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path1524"
+ d="m 28,212 h 72"
+
style="fill:none;fill-rule:evenodd;stroke:#d5d3cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
/>
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path1526"
+ d="m 28,222 h 72"
+
style="fill:none;fill-rule:evenodd;stroke:#d5d3cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
/>
+ <path
+ sodipodi:nodetypes="cc"
+
style="fill:none;fill-rule:evenodd;stroke:#d5d3cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 28,232 h 72"
+ id="path1528"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+
style="fill:none;fill-rule:evenodd;stroke:#d5d3cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 28,242 h 72"
+ id="path1530"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path1532"
+ d="m 28,252 h 72"
+
style="fill:none;fill-rule:evenodd;stroke:#d5d3cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
/>
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path1534"
+ d="m 28,262 h 72"
+
style="fill:none;fill-rule:evenodd;stroke:#d5d3cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
/>
+ <path
+ sodipodi:nodetypes="cc"
+
style="fill:none;fill-rule:evenodd;stroke:#d5d3cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 28,272 H 94"
+ id="path1536"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(-447.9697,519)"
+ id="g1568"
+ style="display:inline;enable-background:new">
+ <g
+ id="g1546"
+ transform="translate(14.00001,-11.999987)"
+ style="opacity:0.1;stroke:#00000f;stroke-opacity:1">
+ <path
+ transform="translate(0,-3e-6)"
+
style="display:inline;fill:none;stroke:#00000f;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 35.99999,249.99999 -8,8"
+ id="path1540"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ transform="translate(0,-3e-6)"
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path1542"
+ d="m 27.99999,257.99999 -14,14"
+
style="display:inline;fill:none;stroke:#00000f;stroke-width:12;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
/>
+ <circle
+ r="30.117647"
+ cy="227.99998"
+ cx="57.999996"
+ id="circle1544"
+
style="opacity:1;fill:none;fill-opacity:0.3858268;stroke:#00000f;stroke-width:3.76470613;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
/>
+ </g>
+ <g
+ transform="translate(14.00001,-13.999987)"
+ id="g1558"
+ style="display:inline;enable-background:new">
+ <path
+
style="display:inline;opacity:0.15400002;fill:none;stroke:#ffffff;stroke-width:1.63784266;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m 11.890335,268.55054 15.45714,-15.45715"
+ id="path1548"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path1550-2"
+ d="m 35.99999,249.99999 -8,8"
+
style="fill:none;stroke:#949390;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+
style="fill:none;stroke:#d5d3cf;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 35.99999,247.99999 -8,8"
+ id="path1552"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+
style="fill:none;stroke:#241f31;stroke-width:12;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 27.99999,257.99999 -14,14"
+ id="path1554"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path1556"
+ d="m 27.99999,255.99999 -14,14"
+
style="fill:none;stroke:#424048;stroke-width:12;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
/>
+ </g>
+ <circle
+ transform="scale(-1,1)"
+ r="29.937637"
+
style="display:inline;opacity:0.5;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.44194174;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
+ id="circle1560"
+ cx="-71.999969"
+ cy="212.06238" />
+ <circle
+ r="30.117647"
+ cy="214"
+ cx="72.000008"
+ id="circle1562"
+
style="opacity:1;fill:none;fill-opacity:0.3858268;stroke:#1a5fb4;stroke-width:3.76470613;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
/>
+ <circle
+
style="opacity:1;fill:none;fill-opacity:0.3858268;stroke:#62a0ea;stroke-width:3.76470613;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle1564"
+ cx="72.000008"
+ cy="212"
+ r="30.117647" />
+ <path
+ sodipodi:nodetypes="cc"
+
style="display:inline;opacity:0.15400002;fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="M 25,255 41,239"
+ id="path1566"
+ inkscape:connector-curvature="0" />
+ </g>
+ <rect
+ clip-path="url(#clipPath1609)"
+ transform="matrix(0,1,1,0,-427.9697,519)"
+ ry="8"
+ rx="8"
+ y="88"
+ x="252"
+ height="36"
+ width="36"
+ id="rect1570"
+
style="display:inline;opacity:1;fill:url(#linearGradient1574);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ </g>
+ <g
+ id="g2185"
+ transform="translate(19.359232,-27.373028)">
+ <rect
+
style="display:inline;opacity:1;vector-effect:none;fill:#f6f5f4;fill-opacity:1;stroke:none;stroke-width:0.01129821px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect929-36-9-9-5"
+ width="112"
+ height="86"
+ x="-365.35922"
+ y="539.37305"
+ rx="7.9999995"
+ ry="7.999999" />
+ <rect
+ rx="3.9999998"
+
style="display:inline;opacity:1;vector-effect:none;fill:#241f31;fill-opacity:1;stroke:none;stroke-width:0.01129821px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect946-0-7-4-0"
+ width="92"
+ height="76"
+ x="-361.35922"
+ y="543.37305"
+ ry="4" />
+ <path
+ inkscape:connector-curvature="0"
+
style="display:inline;opacity:1;vector-effect:none;fill:url(#linearGradient1444-2-3-3-3);fill-opacity:1;stroke:none;stroke-width:0.01129821px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ d="m -365.35922,615.37304 v 4 c 0,4.432 3.568,8 8,8 h 96 c 4.432,0 8,-3.568 8,-8 v -4 c 0,4.432
-3.568,8 -8,8 h -96 c -4.432,0 -8,-3.568 -8,-8 z"
+ id="rect929-3-6-3-9-3"
+ sodipodi:nodetypes="csssscssc" />
+ <rect
+ y="-615.37305"
+ x="-357.35922"
+ height="68"
+ width="84"
+ id="rect968-2-6"
+
style="display:inline;opacity:0.05;vector-effect:none;fill:url(#radialGradient1030-8-1);fill-opacity:1;stroke:none;stroke-width:0.01121096px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ transform="scale(1,-1)" />
+ <path
+ id="path1092-6-1-3-7-5-5-1"
+
style="display:inline;opacity:0.23600003;fill:none;stroke:#e5a50a;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m -357.35922,585.37304 h 26 l 10,-23 6,39 8,-16 h 34"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ id="path1092-6-1-3-7-5-1-0-0"
+
style="display:inline;opacity:1;fill:none;stroke:url(#linearGradient1106-2-7);stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m -357.35922,585.37304 h 26 l 10,-23 6,39 8,-16 h 6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <g
+ transform="translate(-373.35921,341.37304)"
+ id="g1063-6"
+ style="display:inline;enable-background:new">
+ <path
+
style="display:inline;opacity:1;vector-effect:none;fill:#949390;fill-opacity:1;stroke:none;stroke-width:3.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ d="m 115.99999,232 v 4 c 0,2.20914 -1.79086,4 -4,4 -2.20914,0 -4,-1.79086 -4,-4 v -2 l 4,-2 z"
+ id="path1066-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="csscccc" />
+ <path
+ sodipodi:nodetypes="ccsscc"
+ inkscape:connector-curvature="0"
+ id="path1074-2"
+ d="m 115.99999,248 v 6 h -4 c -2.216,0 -4,-1.784 -4,-4 v -2 z"
+
style="display:inline;opacity:1;vector-effect:none;fill:#949390;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <path
+ id="path1076-0"
+ d="m 115.99999,252 v -4 a 4,3.9999998 0 0 0 -4,-4 4,3.9999998 0 0 0 -4,4 4,3.9999998 0 0 0 4,4
z"
+
style="display:inline;opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:3.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <ellipse
+ ry="1.0000002"
+ rx="1"
+ cy="250"
+ cx="-113.99997"
+ id="ellipse1078-6"
+
style="display:inline;opacity:1;vector-effect:none;fill:#68676b;fill-opacity:1;stroke:none;stroke-width:3.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ transform="scale(-1,1)" />
+ <path
+ inkscape:connector-curvature="0"
+
style="display:inline;opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:3.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ d="m 115.99999,230 v 4 a 4,3.9999998 0 0 1 -4,4 4,3.9999998 0 0 1 -4,-4 4,3.9999998 0 0 1 4,-4
z"
+ id="path1080-1" />
+ <ellipse
+ transform="scale(-1)"
+
style="display:inline;opacity:1;vector-effect:none;fill:#68676b;fill-opacity:1;stroke:none;stroke-width:3.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="ellipse1082-5"
+ cx="-113.99997"
+ cy="-232"
+ rx="1"
+ ry="1.0000002" />
+ <path
+ sodipodi:nodetypes="csscccc"
+ inkscape:connector-curvature="0"
+ id="path1084-5"
+ d="m 107.99999,218 v 4 c 0,2.20914 1.79086,4 4,4 2.20914,0 4,-1.79086 4,-4 v -2 l -4,-2 z"
+
style="display:inline;opacity:1;vector-effect:none;fill:#949390;fill-opacity:1;stroke:none;stroke-width:3.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <path
+ id="path1086-4"
+ d="m 107.99999,216 v 4 a 4,3.9999998 0 0 0 4,4 4,3.9999998 0 0 0 4,-4 4,3.9999998 0 0 0 -4,-4 z"
+
style="display:inline;opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:3.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <ellipse
+ ry="1.0000002"
+ rx="1"
+ cy="-218"
+ cx="109.99997"
+ id="ellipse1088-7"
+
style="display:inline;opacity:1;vector-effect:none;fill:#68676b;fill-opacity:1;stroke:none;stroke-width:3.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ transform="scale(1,-1)" />
+ <path
+
style="display:inline;opacity:1;vector-effect:none;fill:#949390;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ d="m 115.99999,206 v 6 h -4 c -2.216,0 -4,-1.784 -4,-4 v -2 z"
+ id="path1090-6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccsscc" />
+ <path
+ inkscape:connector-curvature="0"
+
style="display:inline;opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:3.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ d="m 115.99999,210 v -4 a 4,3.9999998 0 0 0 -4,-4 4,3.9999998 0 0 0 -4,4 4,3.9999998 0 0 0 4,4
z"
+ id="path1092-5" />
+ <ellipse
+ transform="scale(-1,1)"
+
style="display:inline;opacity:1;vector-effect:none;fill:#68676b;fill-opacity:1;stroke:none;stroke-width:3.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="ellipse1094-6"
+ cx="-113.99997"
+ cy="208"
+ rx="1"
+ ry="1.0000002" />
+ </g>
+ </g>
+ <g
+ id="g2539"
+ transform="translate(9.5367431e-7,2.4e-4)"
+ style="display:inline;enable-background:new">
+ <rect
+ ry="8"
+ rx="7.999999"
+ y="225.99976"
+ x="12.000266"
+ height="62"
+ width="104"
+ id="rect1081-1"
+
style="display:inline;vector-effect:none;fill:url(#linearGradient8402);fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <g
+ id="g1883-9"
+ transform="translate(2.6595592e-4,-8.0002393)">
+ <rect
+
style="display:inline;opacity:1;vector-effect:none;fill:url(#linearGradient8404);fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1172-1"
+ width="87.999992"
+ height="46"
+ x="19.999998"
+ y="234" />
+ <rect
+
style="opacity:1;vector-effect:none;fill:#f6f5f4;fill-opacity:1;stroke:none;stroke-width:1.12328;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1174-3"
+ width="87.999992"
+ height="66"
+ x="19.999998"
+ y="208" />
+ </g>
+ <rect
+
style="display:inline;vector-effect:none;fill:url(#linearGradient8406);fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1164-8"
+ width="104"
+ height="38"
+ x="12.000266"
+ y="223.99976"
+ rx="7.999999"
+ ry="8" />
+ <rect
+
style="display:inline;vector-effect:none;fill:url(#linearGradient8408);fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1476-4"
+ width="104"
+ height="62"
+ x="12.000266"
+ y="225.99976"
+ rx="7.999999"
+ ry="8" />
+ <rect
+
style="vector-effect:none;fill:#5e5c64;fill-opacity:1;stroke:none;stroke-width:1.14018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1478-9"
+ width="104"
+ height="60"
+ x="12.000267"
+ y="223.99976"
+ rx="9.454545"
+ ry="8" />
+ <g
+ id="g3308"
+ transform="translate(0,-2)">
+ <g
+ transform="translate(-578.75348,-12.522289)"
+ id="g1953">
+ <g
+ style="display:inline;enable-background:new"
+ transform="translate(578.75348,10.522289)"
+ id="g1668-6">
+ <rect
+ y="234"
+ x="19.999998"
+ height="46"
+ width="87.999992"
+ id="rect1666-2"
+
style="display:inline;opacity:1;vector-effect:none;fill:url(#linearGradient1938);fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ </g>
+ <g
+ transform="translate(578.75348,16.522289)"
+ style="display:inline;enable-background:new"
+ id="g1688-9">
+ <path
+
style="display:inline;fill:#000000;fill-opacity:0.137255;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 108,272 h -0.5 v 1 h 0.5 z m -44.507811,0 44.000001,1 v -1 z"
+ id="path1680-2"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ sodipodi:nodetypes="ccccccccc"
+ inkscape:connector-curvature="0"
+ id="path1682-7"
+ d="m 108,272 h -0.5 v 1 h 0.5 z m -44.507811,0 44.000001,1 v -1 z"
+
style="display:inline;fill:#000000;fill-opacity:0.137255;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
/>
+ <path
+
style="display:inline;fill:#000000;fill-opacity:0.137255;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 108,270 h -0.5 v 1 h 0.5 z m -47.507811,0 47.000001,1 v -1 z"
+ id="path1684-0"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ sodipodi:nodetypes="ccccccccc"
+ inkscape:connector-curvature="0"
+ id="path1686-9"
+ d="m 108,268 h -0.5 v 1 h 0.5 z m -50.507811,0 50.000001,1 v -1 z"
+
style="display:inline;fill:#000000;fill-opacity:0.137255;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
/>
+ </g>
+ <rect
+
style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.137255;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
+ id="rect1749-2"
+ width="88"
+ height="7.9999995"
+ x="598.75348"
+ y="282.52228" />
+ </g>
+ <rect
+ y="252"
+ x="26"
+ height="14"
+ width="4"
+ id="rect2344"
+ style="opacity:0.4;fill:#241f31;stroke:none;stroke-width:5.9981;stroke-opacity:0.461288" />
+ <g
+ transform="matrix(1,0,0,1.75,0,-189)"
+ style="opacity:0.2;stroke-width:0.755929"
+ id="g2585">
+ <rect
+ style="opacity:1;fill:#241f31;stroke:none;stroke-width:4.53414;stroke-opacity:0.461288"
+ id="rect2352"
+ width="9.4649925"
+ height="5.1428704"
+ x="40.535011"
+ y="254.85715" />
+ <rect
+ y="252"
+ x="36"
+ height="8"
+ width="10"
+ id="rect2346"
+ style="opacity:1;fill:#241f31;stroke:none;stroke-width:4.53414;stroke-opacity:0.461288" />
+ <rect
+ y="252"
+ x="56"
+ height="8"
+ width="18"
+ id="rect2354"
+ style="opacity:1;fill:#241f31;stroke:none;stroke-width:4.53414;stroke-opacity:0.461288" />
+ <rect
+ style="opacity:1;fill:#241f31;stroke:none;stroke-width:4.53415;stroke-opacity:0.461288"
+ id="rect2364"
+ width="6"
+ height="3.4285715"
+ x="72"
+ y="256.57144" />
+ <rect
+ style="opacity:1;fill:#241f31;stroke:none;stroke-width:4.53415;stroke-opacity:0.461288"
+ id="rect2366"
+ width="6"
+ height="8"
+ x="84"
+ y="252" />
+ </g>
+ </g>
+ <rect
+
style="opacity:0.2;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.14018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1988"
+ width="111.99973"
+ height="56.00024"
+ x="8.000267"
+ y="199.99976"
+ rx="9.454545"
+ ry="8"
+ clip-path="url(#clipPath1992)" />
+ <rect
+ ry="8"
+ rx="7.9999986"
+ y="214"
+ x="7.999999"
+ height="37.999756"
+ width="112.00026"
+ id="rect1930"
+
style="display:inline;vector-effect:none;fill:url(#linearGradient1932);fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <rect
+ ry="8"
+ rx="9.454545"
+ y="191.99976"
+ x="8.000267"
+ height="56.00024"
+ width="111.99973"
+ id="rect1488-8"
+
style="vector-effect:none;fill:#3584e4;fill-opacity:1;stroke:none;stroke-width:1.14018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
/>
+ <path
+
style="display:inline;fill:none;stroke:url(#linearGradient143387);stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 32.823351,215.99976 62.35383,-36"
+ id="path1732-5"
+ inkscape:connector-curvature="0" />
+ <g
+ transform="translate(0,1)"
+ id="g2076">
+ <circle
+ r="15.999751"
+ cy="-219.00024"
+ cx="64.000275"
+ id="circle1496-5"
+
style="display:inline;vector-effect:none;fill:url(#linearGradient8414);fill-opacity:1;stroke:none;stroke-width:15.9998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
+ transform="scale(1,-1)" />
+ <circle
+ transform="matrix(0,-1,-1,0,0,0)"
+
style="display:inline;vector-effect:none;fill:#deddda;fill-opacity:1;stroke:none;stroke-width:15.9998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
+ id="circle1498-9"
+ cx="-216.99995"
+ cy="-64.000275"
+ r="15.999798" />
+ </g>
+ <g
+ id="g973"
+ transform="translate(2.6595592e-4,-6.0002393)">
+ <path
+
style="fill:url(#linearGradient8416);fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 59,205 -1,2 1,2 -1,2 1,2 -1,2 1,2 -1,2 1,2 -1,2 v 1 c 3e-4,2.14329 1.143853,4.12367
3,5.19531 1.856406,1.0718 4.143594,1.0718 6,0 1.856147,-1.07164 2.9997,-3.05202 3,-5.19531 v -3 l -1,-2 1,-2
-1,-2 1,-2 -1,-2 1,-2 -1,-2 1,-2 -1,-2 z"
+ id="path1500-2"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccsscccccccccccc" />
+ <g
+ transform="translate(0,2)"
+ id="g1485-6">
+ <path
+ sodipodi:nodetypes="czcczcc"
+ inkscape:connector-curvature="0"
+ id="path1502-8"
+ d="m 69.000686,204.99955 c 0,0 -1.352518,3.65721 -4.912302,4.01705 C 60.5286,209.37644 59,207
59,207 l -1,2 c 0,0 2.09255,2.78313 6.088384,2.55042 C 68.084218,211.31771 69.87645,207.0386 70,206.99999 Z"
+
style="fill:#ffffff;fill-opacity:0.38189;stroke:none;stroke-width:0.0821677;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
/>
+ <path
+ sodipodi:nodetypes="csccsccc"
+ id="path1504-5"
+ d="m 69.999996,206.99964 c -0.12355,0.0386 -1.915778,4.31807 -5.911612,4.55078
-3.995834,0.23271 -6.088388,-2.55078 -6.088388,-2.55078 l 1,2 c 0,0 1.528604,2.37546 5.088388,2.01562
3.559784,-0.35984 4.911612,-4.01562 4.911612,-4.01562 l 0.04297,0.0859 z"
+
style="fill:#241f31;fill-opacity:0.338583;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+
style="fill:#ffffff;fill-opacity:0.38189;stroke:none;stroke-width:0.0821677;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 69.000686,212.99955 c 0,0 -1.352518,3.65721 -4.912302,4.01705 C 60.5286,217.37644 59,215
59,215 l -1,2 c 0,0 2.09255,2.78313 6.088384,2.55042 C 68.084218,219.31771 69.87645,215.0386 70,214.99999 Z"
+ id="path1525-2"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="czcczcc" />
+ <path
+ sodipodi:nodetypes="czcczcc"
+ inkscape:connector-curvature="0"
+ id="path1527-8"
+ d="m 69.000686,216.99955 c 0,0 -1.440906,3.65721 -5.00069,4.01705 C 60.440212,221.37644
59,219 59,219 l -1,2 c 0,0 2.004162,2.78313 5.999996,2.55042 C 67.99583,223.31771 69.87645,219.0386
70,218.99999 Z"
+
style="fill:#ffffff;fill-opacity:0.38189;stroke:none;stroke-width:0.0821677;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
/>
+ <path
+
style="fill:#ffffff;fill-opacity:0.38189;stroke:none;stroke-width:0.0821677;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 69.000686,208.99955 c 0,0 -1.352518,3.65721 -4.912302,4.01705 C 60.5286,213.37644 59,211
59,211 l -1,2 c 0,0 2.09255,2.78313 6.088384,2.55042 C 68.084218,215.31771 69.87645,211.0386 70,210.99999 Z"
+ id="path1530-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="czcczcc" />
+ <path
+ sodipodi:nodetypes="csccsccc"
+ inkscape:connector-curvature="0"
+ id="path1532-6"
+ transform="translate(0,172)"
+ d="m 70,43 c -0.12355,0.03861 -1.915778,4.318071 -5.911612,4.550781 C 60.092554,47.783491
58,45 58,45 l 1,2 c 0,0 1.528604,2.375465 5.088388,2.015625 C 67.648172,48.655785 69,45 69,45 l
0.04297,0.08594 z"
+
style="fill:#241f31;fill-opacity:0.338583;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
/>
+ <path
+ sodipodi:nodetypes="csccsccc"
+ inkscape:connector-curvature="0"
+
style="fill:#241f31;fill-opacity:0.338583;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 69.999996,210.99964 c -0.12355,0.0386 -1.915778,4.31807 -5.911612,4.55078
-3.995834,0.23271 -6.088388,-2.55078 -6.088388,-2.55078 l 1,2 c 0,0 1.528604,2.37546 5.088388,2.01562
3.559784,-0.35984 4.911612,-4.01562 4.911612,-4.01562 l 0.04297,0.0859 z"
+ id="path1534-7" />
+ </g>
+ </g>
+ <g
+ id="g1254">
+ <circle
+ transform="scale(1,-1)"
+
style="display:inline;vector-effect:none;fill:url(#linearGradient8422);fill-opacity:1;stroke:none;stroke-width:15.9998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
+ id="circle1510-6"
+ cx="64.000282"
+ cy="-200.00005"
+ r="11.999864" />
+ <circle
+ r="11.999864"
+ cy="-64.000282"
+ cx="-194.00011"
+ id="circle1512-6"
+
style="display:inline;vector-effect:none;fill:#deddda;fill-opacity:1;stroke:none;stroke-width:15.9998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
+ transform="matrix(0,-1,-1,0,0,0)" />
+ <path
+
style="display:inline;vector-effect:none;fill:#77767b;fill-opacity:1;stroke:none;stroke-width:15.9998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
+ d="m 52.02175,199.40601 a 11.999864,11.999864 0 0 0 -0.02148,0.59375 11.999864,11.999864 0 0 0
12,12 11.999864,11.999864 0 0 0 12,-12 11.999864,11.999864 0 0 0 -0.01953,-0.40625 11.999864,11.999864 0 0 1
-11.980469,11.40625 11.999864,11.999864 0 0 1 -11.978516,-11.59375 z"
+ id="circle1814-2"
+ inkscape:connector-curvature="0" />
+ <circle
+ transform="matrix(0,-1,-1,0,0,0)"
+
style="display:inline;vector-effect:none;fill:url(#radialGradient1505-1);fill-opacity:1;stroke:none;stroke-width:15.9998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
+ id="circle1514-9"
+ cx="-194.00011"
+ cy="-64.000282"
+ r="6.0001068" />
+ </g>
+ <path
+ sodipodi:nodetypes="cc"
+
style="fill:#77767b;stroke:url(#linearGradient8424);stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 32.823351,215.99976 52.40883,204.69208"
+ id="path1516-7"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1742-6"
+ d="M 32.823351,215.99976 52.40883,204.69208"
+
style="display:inline;fill:#77767b;stroke:url(#linearGradient2370-3);stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ sodipodi:nodetypes="cc" />
+ </g>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="grid"
+ style="display:inline"
+ sodipodi:insensitive="true">
+ <circle
+ cx="64.000031"
+ cy="236"
+ r="59.504131"
+ id="circle2892"
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <rect
+ ry="7.9292889"
+ rx="8.701004"
+ y="180.49496"
+ x="20.495007"
+ height="111.01005"
+ width="87.009987"
+ id="rect2894"
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <rect
+ ry="7.9238095"
+ rx="7.9238095"
+ y="184.49524"
+ x="12.495266"
+ height="103.00952"
+ width="103.00952"
+ id="rect2896"
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <rect
+ ry="8.701005"
+ rx="7.9292889"
+ y="200.49496"
+ x="8.4950066"
+ height="87.010048"
+ width="111.01004"
+ id="rect2898"
+
style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001,
0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <path
+ inkscape:connector-curvature="0"
+ id="path2900"
+ d="M 2.6203015e-5,288.99999 H 128.00003"
+
style="display:inline;fill:none;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
/>
+ </g>
+ <g
+ id="g1648"
+ transform="translate(-120.50005,-26)">
+ <g
+ id="g1207"
+ style="display:inline;enable-background:new"
+ transform="translate(-89.5,194)">
+ <rect
+ ry="8"
+ rx="8"
+ y="234"
+ x="20"
+ height="58"
+ width="88"
+ id="rect1041"
+
style="opacity:1;vector-effect:none;fill:url(#linearGradient1049);fill-opacity:1;stroke:none;stroke-width:0.01184966px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
/>
+ <rect
+
style="opacity:1;vector-effect:none;fill:#f6f5f4;fill-opacity:1;stroke:none;stroke-width:0.01184966px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
+ id="rect15435-6"
+ width="88"
+ height="108"
+ x="20"
+ y="180"
+ rx="8"
+ ry="8" />
+ <rect
+ ry="4"
+ rx="4"
+ y="186"
+ x="24"
+ height="98"
+ width="80"
+ id="rect1167-6"
+
style="display:inline;opacity:1;vector-effect:none;fill:#1a5fb4;fill-opacity:1;stroke:none;stroke-width:0.0119126px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
/>
+ <rect
+
style="display:inline;opacity:1;vector-effect:none;fill:#3584e4;fill-opacity:1;stroke:none;stroke-width:0.0119126px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect15441-8"
+ width="80"
+ height="98"
+ x="24"
+ y="184"
+ rx="4"
+ ry="4" />
+ <rect
+
style="display:inline;opacity:1;vector-effect:none;fill:#1c71d8;fill-opacity:1;stroke:none;stroke-width:0.01190936px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect15443-6"
+ width="80"
+ height="2"
+ x="24"
+ y="216"
+ rx="0"
+ ry="0" />
+ <rect
+
style="display:inline;opacity:1;vector-effect:none;fill:#1c71d8;fill-opacity:1;stroke:none;stroke-width:0.01190936px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect15461-2"
+ width="80"
+ height="2"
+ x="24"
+ y="248"
+ rx="0"
+ ry="0" />
+ <g
+ id="g1088">
+ <path
+ sodipodi:nodetypes="sssccccccss"
+ inkscape:connector-curvature="0"
+ id="path26035"
+ d="m 55,196 h 18 c 1.662,0 3,1 3,3 v 5 H 72.03125 L 72,200 H 56 l 0.03125,4 H 52 v -5 c
0,-1.662 1.338,-3 3,-3 z"
+
style="opacity:1;vector-effect:none;fill:url(#linearGradient1278);fill-opacity:1;stroke:none;stroke-width:0.01184966px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
/>
+ <rect
+
style="opacity:0.1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1059"
+ width="24"
+ height="4"
+ x="52"
+ y="202"
+ ry="1.5"
+ rx="1.5" />
+ <path
+
style="opacity:1;fill:url(#linearGradient1280);fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 55,200 c -1.662,0 -3,1.338 -3,3 v 1 h 4 v -2 h 16 v 2 h 4 v -1 c 0,-1.662 -1.338,-3 -3,-3
z"
+ id="rect1061"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ssccccccsss" />
+ <rect
+ y="202"
+ x="56"
+ height="2"
+ width="16"
+ id="rect1189"
+
style="opacity:0.1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
/>
+ </g>
+ <use
+ x="0"
+ y="0"
+ xlink:href="#g1088"
+ id="use1090"
+ transform="translate(0,32)"
+ width="100%"
+ height="100%" />
+ <use
+ height="100%"
+ width="100%"
+ transform="translate(0,64)"
+ id="use1092"
+ xlink:href="#g1088"
+ y="0"
+ x="0" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/demo/icons/scalable/actions/widget-about-symbolic.svg
b/demo/icons/scalable/actions/widget-about-symbolic.svg
new file mode 100644
index 00000000..12329841
--- /dev/null
+++ b/demo/icons/scalable/actions/widget-about-symbolic.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 8 0 c -4.410156 0 -8 3.589844 -8 8 s 3.589844 8 8 8 s 8 -3.589844 8 -8 s -3.589844 -8 -8 -8 z
m 0 2 c 3.332031 0 6 2.667969 6 6 s -2.667969 6 -6 6 s -6 -2.667969 -6 -6 s 2.667969 -6 6 -6 z m 0 1.875 c
-0.621094 0 -1.125 0.503906 -1.125 1.125 s 0.503906 1.125 1.125 1.125 s 1.125 -0.503906 1.125 -1.125 s
-0.503906 -1.125 -1.125 -1.125 z m -1.523438 3.125 c -0.265624 0.011719 -0.476562 0.230469 -0.476562 0.5 c 0
0.277344 0.222656 0.5 0.5 0.5 h 0.5 v 3 h -0.5 c -0.277344 0 -0.5 0.222656 -0.5 0.5 s 0.222656 0.5 0.5 0.5 h
3 c 0.277344 0 0.5 -0.222656 0.5 -0.5 s -0.222656 -0.5 -0.5 -0.5 h -0.5 v -4 h -2.5 c -0.007812 0 -0.015625 0
-0.023438 0 z m 0 0" fill="#2e3436"/>
+</svg>
diff --git a/demo/icons/scalable/apps/org.example.Typeset.svg
b/demo/icons/scalable/apps/org.example.Typeset.svg
new file mode 100644
index 00000000..b93b5b88
--- /dev/null
+++ b/demo/icons/scalable/apps/org.example.Typeset.svg
@@ -0,0 +1 @@
+<svg height="128" width="128" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse"><stop
offset="0" stop-color="#63452c"/><stop offset=".038" stop-color="#865e3c"/><stop offset=".077"
stop-color="#63452c"/><stop offset=".923" stop-color="#63452c"/><stop offset=".962"
stop-color="#865e3c"/><stop offset="1" stop-color="#63452c"/></linearGradient><linearGradient id="d"
gradientTransform="matrix(.23214 0 0 .20395 -8.567 207.653)" x1="88.596" x2="536.596" xlink:href="#a"
y1="-449.394" y2="-449.394"/><linearGradient id="e" gradientUnits="userSpaceOnUse" x1="30" x2="104" y1="84"
y2="98"><stop offset="0" stop-color="#deddda"/><stop offset="1"
stop-color="#c0bfbc"/></linearGradient><linearGradient id="f" gradientTransform="matrix(.23214 0 0 .125
-8.567 146.174)" x1="88.596" x2="536.596" xlink:href="#a" y1="-449.394" y2="-449.394"/><linearGradient id="g"
gradientTransform="matrix(.23214 0 0 .20395 -8.567 207.653)"
gradientUnits="userSpaceOnUse" x1="88.596" x2="536.596" y1="-449.394" y2="-449.394"><stop offset="0"
stop-color="#3d3846"/><stop offset=".038" stop-color="#77767b"/><stop offset=".077"
stop-color="#3d3846"/><stop offset=".923" stop-color="#3d3846"/><stop offset=".962"
stop-color="#77767b"/><stop offset="1" stop-color="#3d3846"/></linearGradient><linearGradient id="h"
gradientUnits="userSpaceOnUse" x1="30" x2="104" y1="88" y2="102"><stop offset="0" stop-color="#f6f5f4"/><stop
offset="1" stop-color="#deddda"/></linearGradient><filter id="b" height="100%" width="100%" x="0%"
y="0%"><feColorMatrix in="SourceGraphic" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter><mask
id="j"><g filter="url(#b)"><path fill-opacity=".4" d="M0 0h128v128H0z"/></g></mask><clipPath id="i"><path
d="M0 0h192v152H0z"/></clipPath><mask id="l"><g filter="url(#b)"><path fill-opacity=".2" d="M0
0h128v128H0z"/></g></mask><clipPath id="k"><path d="M0 0h192v152H0z"/></clipPath><clipPath id="m"><path
d="M12
76h104v8H12zm0 0"/></clipPath><mask id="o"><g filter="url(#b)"><path fill-opacity=".2" d="M0
0h128v128H0z"/></g></mask><clipPath id="n"><path d="M0 0h192v152H0z"/></clipPath><linearGradient id="p"
gradientTransform="matrix(.25 0 0 .125 -14.149 136.174)" gradientUnits="userSpaceOnUse" x1="88.596"
x2="536.596" y1="-449.394" y2="-449.394"><stop offset="0" stop-color="#1a5fb4"/><stop offset=".038"
stop-color="#3584e4"/><stop offset=".077" stop-color="#1a5fb4"/><stop offset=".923"
stop-color="#1a5fb4"/><stop offset=".962" stop-color="#3584e4"/><stop offset="1"
stop-color="#1a5fb4"/></linearGradient><linearGradient id="q" gradientTransform="rotate(60 83.053 209)"
gradientUnits="userSpaceOnUse" x1="61" x2="67" y1="220" y2="220"><stop offset="0" stop-color="#5e5c64"/><stop
offset=".5" stop-color="#9a9996"/><stop offset="1" stop-color="#3d3846"/></linearGradient><linearGradient
id="r" gradientTransform="matrix(2.66662 0 0 -2.66662 -106.664 -514.657)" gradientUnits="userSpaceOnUse"
x1="58" x2
="70" y1="-211" y2="-211"><stop offset="0" stop-color="#77767b"/><stop offset=".5"
stop-color="#9a9996"/><stop offset="1" stop-color="#77767b"/></linearGradient><linearGradient id="s"
gradientUnits="userSpaceOnUse" x1="58" x2="70" y1="39.5" y2="39.5"><stop offset="0"
stop-color="#5e5c64"/><stop offset=".5" stop-color="#c0bfbc"/><stop offset="1"
stop-color="#3d3846"/></linearGradient><linearGradient id="c" gradientUnits="userSpaceOnUse"><stop offset="0"
stop-color="#77767b"/><stop offset=".5" stop-color="#c0bfbc"/><stop offset="1"
stop-color="#77767b"/></linearGradient><linearGradient id="t" gradientTransform="matrix(1.99998 0 0 -1.99998
-63.998 -393.995)" x1="58" x2="70" xlink:href="#c" y1="-211" y2="-211"/><radialGradient id="u" cx="-194.837"
cy="-64" gradientTransform="matrix(0 -.7747 -.7747 0 14.42 -130.439)" gradientUnits="userSpaceOnUse"
r="8"><stop offset="0" stop-color="#deddda"/><stop offset="1"
stop-color="#77767b"/></radialGradient><linearGradient id="v" gradientTransform=
"rotate(60 83.053 209)" x1="61" x2="67" xlink:href="#c" y1="220" y2="220"/><path d="M20 54h88a8 8 0 0 1 8
8v46a8 8 0 0 1-8 8H20a8 8 0 0 1-8-8V62a8 8 0 0 1 8-8zm0 0" fill="url(#d)"/><path d="M20 54h88v46H20zm0 0"
fill="url(#e)"/><path d="M20 28h88v66H20zm0 0" fill="#f6f5f4"/><path d="M20 52h88a8 8 0 0 1 8 8v22a8 8 0 0
1-8 8H20a8 8 0 0 1-8-8V60a8 8 0 0 1 8-8zm0 0" fill="url(#f)"/><path d="M20 54h88a8 8 0 0 1 8 8v46a8 8 0 0 1-8
8H20a8 8 0 0 1-8-8V62a8 8 0 0 1 8-8zm0 0" fill="url(#g)"/><path d="M21.453 52h85.094c5.219 0 9.453 3.582
9.453 8v44c0 4.418-4.234 8-9.453 8H21.453c-5.219 0-9.453-3.582-9.453-8V60c0-4.418 4.234-8 9.453-8zm0 0"
fill="#5e5c64"/><path d="M20 58h88v46H20zm0 0" fill="url(#h)"/><g fill-opacity=".137"><path d="M108
102h-.5v1h.5zm-44.508 0 44 1v-1zm0 0"/><path d="M108 102h-.5v1h.5zm-44.508 0 44 1v-1zM108
100h-.5v1h.5zm-47.508 0 47 1v-1zM108 98h-.5v1h.5zm-50.508 0 50 1v-1zm0 0"/><path d="M20 96h88v8H20zm0
0"/></g><g clip-path="url(#i)" mask="url(#j)" transform="translate(
-8 -16)"><path d="M34 94h4v14h-4zm0 0" fill="#241f31"/></g><g clip-path="url(#k)" fill="#241f31"
mask="url(#l)" transform="translate(-8 -16)"><path d="M48.535 99H58v9h-9.465zm0 0"/><path d="M44
94h10v14H44zM64 94h18v14H64zm0 0"/><path d="M80 102h6v6h-6zM92 94h6v14h-6zm0 0"/></g><g
clip-path="url(#m)"><g clip-path="url(#n)" mask="url(#o)" transform="translate(-8 -16)"><path d="M25.453
44h93.094c5.219 0 9.453 3.582 9.453 8v40c0 4.418-4.234 8-9.453 8H25.453C20.234 100 16 96.418 16 92V52c0-4.418
4.234-8 9.453-8zm0 0"/></g></g><path d="M16 42h96a8 8 0 0 1 8 8v22a8 8 0 0 1-8 8H16a8 8 0 0 1-8-8V50a8 8 0 0
1 8-8zm0 0" fill="url(#p)"/><path d="M17.453 20h93.094c5.219 0 9.453 3.582 9.453 8v40c0 4.418-4.234 8-9.453
8H17.453C12.234 76 8 72.418 8 68V28c0-4.418 4.234-8 9.453-8zm0 0" fill="#3584e4"/><path d="m32.824 216
62.352-36" fill="none" stroke="url(#q)" stroke-linecap="round" stroke-width="6" transform="translate(0
-172)"/><path d="M80 48c0-8.836-7.164-16-16-16s-16 7.164-16 16 7.164 16 16 16
16-7.164 16-16zm0 0" fill="url(#r)"/><path d="M64 30c-8.836 0-16 7.164-16 16s7.164 16 16 16 16-7.164
16-16-7.164-16-16-16zm0 0" fill="#deddda"/><path d="m59 27-1 2 1 2-1 2 1 2-1 2 1 2-1 2 1 2-1 2v1a5.998 5.998
0 0 0 9 5.195c1.855-1.07 3-3.05 3-5.195v-3l-1-2 1-2-1-2 1-2-1-2 1-2-1-2 1-2-1-2zm0 0" fill="url(#s)"/><path
d="M69 29s-1.352 3.656-4.91 4.016C60.527 33.375 59 31 59 31l-1 2s2.094 2.781 6.09 2.55c3.996-.234 5.785-4.51
5.91-4.55zm0 0" fill="#fff" fill-opacity=".38"/><path d="M70 31c-.125.04-1.914 4.316-5.91 4.55C60.094 35.782
58 33 58 33l1 2s1.527 2.375 5.09 2.016C67.648 36.656 69 33 69 33l.043.086zm0 0" fill="#241f31"
fill-opacity=".337"/><path d="M69 37s-1.352 3.656-4.91 4.016C60.527 41.375 59 39 59 39l-1 2s2.094 2.781 6.09
2.55c3.996-.234 5.785-4.51 5.91-4.55zm0 0" fill="#fff" fill-opacity=".38"/><path d="M69 41s-1.441 3.656-5
4.016S59 43 59 43l-1 2s2.004 2.781 6 2.55c3.996-.234 5.875-4.51 6-4.55zM69 33s-1.352 3.656-4.91 4.016C60.527
37.375 59 35 59 35l-1 2s2.094 2.781 6.09
2.55c3.996-.234 5.785-4.51 5.91-4.55zm0 0" fill="#fff" fill-opacity=".38"/><path d="M70 39c-.125.04-1.914
4.316-5.91 4.55S58 41 58 41l1 2s1.527 2.375 5.09 2.016C67.648 44.656 69 41 69 41l.043.086zm0 0"
fill="#241f31" fill-opacity=".337"/><path d="M70 35c-.125.04-1.914 4.316-5.91 4.55C60.094 39.782 58 37 58
37l1 2s1.527 2.375 5.09 2.016C67.648 40.656 69 37 69 37l.043.086zm0 0" fill="#241f31"
fill-opacity=".337"/><path d="M76 28c0-6.629-5.371-12-12-12s-12 5.371-12 12 5.371 12 12 12 12-5.371 12-12zm0
0" fill="url(#t)"/><path d="M64 10c-6.629 0-12 5.371-12 12s5.371 12 12 12 12-5.371 12-12-5.371-12-12-12zm0 0"
fill="#deddda"/><path d="M52.023 27.406c-.015.2-.02.395-.023.594 0 6.629 5.371 12 12 12s12-5.371
12-12c-.004-.137-.012-.27-.02-.406C75.664 33.98 70.395 38.996 64 39c-6.465-.008-11.758-5.133-11.977-11.594zm0
0" fill="#77767b"/><path d="M64 16c-3.313 0-6 2.688-6 6s2.688 6 6 6 6-2.688 6-6-2.688-6-6-6zm0 0"
fill="url(#u)"/><path d="M32.824 216 52.41 204.69" fill="#77767b" stroke="url(#
v)" stroke-linecap="round" stroke-width="6" transform="translate(0 -172)"/><path d="M32.824 216 52.41
204.69" fill="#77767b" stroke="url(#q)" stroke-linecap="round" stroke-width="6" transform="translate(0
-172)"/></svg>
\ No newline at end of file
diff --git a/demo/meson.build b/demo/meson.build
index 13280a64..d41d19e9 100644
--- a/demo/meson.build
+++ b/demo/meson.build
@@ -2,6 +2,17 @@ if get_option('examples')
subdir('data')
+demo_config_data = configuration_data()
+demo_config_data.set_quoted('ADW_DEMO_VCS_TAG', '@VCS_TAG@')
+
+demo_config_h = vcs_tag(
+ input: configure_file(
+ output: 'config.h.in',
+ configuration: demo_config_data
+ ),
+ output: 'config.h'
+)
+
adwaita_demo_resources = gnome.compile_resources(
'adwaita-demo-resources',
'adwaita-demo.gresources.xml',
@@ -12,6 +23,7 @@ adwaita_demo_resources = gnome.compile_resources(
adwaita_demo_sources = [
adwaita_demo_resources,
+ 'pages/about/adw-demo-page-about.c',
'pages/animations/adw-demo-page-animations.c',
'pages/avatar/adw-demo-page-avatar.c',
'pages/buttons/adw-demo-page-buttons.c',
@@ -32,8 +44,10 @@ adwaita_demo_sources = [
'pages/welcome/adw-demo-page-welcome.c',
'adwaita-demo.c',
+ 'adw-demo-debug-info.c',
'adw-demo-preferences-window.c',
'adw-demo-window.c',
+ demo_config_h,
libadwaita_generated_headers,
]
diff --git a/demo/pages/about/adw-demo-page-about.c b/demo/pages/about/adw-demo-page-about.c
new file mode 100644
index 00000000..a7f67e05
--- /dev/null
+++ b/demo/pages/about/adw-demo-page-about.c
@@ -0,0 +1,99 @@
+#include "adw-demo-page-about.h"
+
+#include <glib/gi18n.h>
+
+struct _AdwDemoPageAbout
+{
+ AdwBin parent_instance;
+};
+
+G_DEFINE_TYPE (AdwDemoPageAbout, adw_demo_page_about, ADW_TYPE_BIN)
+
+static void
+demo_run_cb (AdwDemoPageAbout *self)
+{
+ GtkRoot *root = gtk_widget_get_root (GTK_WIDGET (self));
+ GtkWidget *about;
+
+ const char *developers[] = {
+ "Angela Avery <angela example org>",
+ NULL
+ };
+
+ const char *artists[] = {
+ "GNOME Design Team",
+ NULL
+ };
+
+ const char *special_thanks[] = {
+ "My cat",
+ NULL
+ };
+
+ const char *release_notes = "\
+<p>\
+ This release adds the following features:\
+</p>\
+<ul>\
+ <li>Added a way to export fonts.</li>\
+ <li>Better support for <code>monospace</code> fonts.</li>\
+ <li>Added a way to preview <em>italic</em> text.</li>\
+ <li>Bug fixes and performance improvements.</li>\
+ <li>Translation updates.</li>\
+</ul>\
+ ";
+
+ about =
+ g_object_new (ADW_TYPE_ABOUT_WINDOW,
+ "transient-for", root,
+ "application-icon", "org.example.Typeset",
+ "application-name", _("Typeset"),
+ "developer-name", _("Angela Avery"),
+ "version", "1.2.3",
+ "release-notes-version", "1.2.0",
+ "release-notes", release_notes,
+ "comments", _("Typeset is an app that doesn’t exist and is used as an example content for
this about window."),
+ "website", "https://example.org",
+ "issue-url", "https://example.org",
+ "support-url", "https://example.org",
+ "copyright", "© 2022 Angela Avery",
+ "license-type", GTK_LICENSE_LGPL_2_1,
+ "developers", developers,
+ "artists", artists,
+ "translator-credits", _("translator-credits"),
+ NULL);
+
+ adw_about_window_add_link (ADW_ABOUT_WINDOW (about),
+ _("_Documentation"),
+
"https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.AboutWindow.html");
+
+ adw_about_window_add_legal_section (ADW_ABOUT_WINDOW (about),
+ _("Fonts"),
+ NULL,
+ GTK_LICENSE_CUSTOM,
+ "This application uses font data from <a
href='https://example.org'>somewhere</a>.");
+
+ adw_about_window_add_acknowledgement_section (ADW_ABOUT_WINDOW (about),
+ _("Special thanks to"),
+ special_thanks);
+
+ gtk_window_present (GTK_WINDOW (about));
+
+ gtk_window_present (GTK_WINDOW (about));
+}
+
+static void
+adw_demo_page_about_class_init (AdwDemoPageAboutClass *klass)
+{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ gtk_widget_class_set_template_from_resource (widget_class,
"/org/gnome/Adwaita1/Demo/ui/pages/about/adw-demo-page-about.ui");
+
+ gtk_widget_class_install_action (widget_class, "demo.run", NULL, (GtkWidgetActionActivateFunc)
demo_run_cb);
+}
+
+static void
+adw_demo_page_about_init (AdwDemoPageAbout *self)
+{
+ gtk_widget_init_template (GTK_WIDGET (self));
+}
diff --git a/demo/pages/about/adw-demo-page-about.h b/demo/pages/about/adw-demo-page-about.h
new file mode 100644
index 00000000..35c733c9
--- /dev/null
+++ b/demo/pages/about/adw-demo-page-about.h
@@ -0,0 +1,11 @@
+#pragma once
+
+#include <adwaita.h>
+
+G_BEGIN_DECLS
+
+#define ADW_TYPE_DEMO_PAGE_ABOUT (adw_demo_page_about_get_type())
+
+G_DECLARE_FINAL_TYPE (AdwDemoPageAbout, adw_demo_page_about, ADW, DEMO_PAGE_ABOUT, AdwBin)
+
+G_END_DECLS
diff --git a/demo/pages/about/adw-demo-page-about.ui b/demo/pages/about/adw-demo-page-about.ui
new file mode 100644
index 00000000..0430d6a2
--- /dev/null
+++ b/demo/pages/about/adw-demo-page-about.ui
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk" version="4.0"/>
+ <requires lib="libadwaita" version="1.0"/>
+ <template class="AdwDemoPageAbout" parent="AdwBin">
+ <property name="child">
+ <object class="AdwStatusPage">
+ <property name="icon-name">widget-about-symbolic</property>
+ <property name="title" translatable="yes">About Window</property>
+ <property name="description" translatable="yes">An about window.</property>
+ <property name="child">
+ <object class="GtkButton">
+ <property name="label" translatable="yes">Run Demo</property>
+ <property name="halign">center</property>
+ <property name="action-name">demo.run</property>
+ <style>
+ <class name="pill"/>
+ </style>
+ </object>
+ </property>
+ </object>
+ </property>
+ </template>
+</interface>
diff --git a/doc/images/about-window-credits-dark.png b/doc/images/about-window-credits-dark.png
new file mode 100644
index 00000000..51af7c31
Binary files /dev/null and b/doc/images/about-window-credits-dark.png differ
diff --git a/doc/images/about-window-credits.png b/doc/images/about-window-credits.png
new file mode 100644
index 00000000..2491c090
Binary files /dev/null and b/doc/images/about-window-credits.png differ
diff --git a/doc/images/about-window-dark.png b/doc/images/about-window-dark.png
new file mode 100644
index 00000000..d6b04d4a
Binary files /dev/null and b/doc/images/about-window-dark.png differ
diff --git a/doc/images/about-window.png b/doc/images/about-window.png
new file mode 100644
index 00000000..da4b5d7a
Binary files /dev/null and b/doc/images/about-window.png differ
diff --git a/doc/libadwaita.toml.in b/doc/libadwaita.toml.in
index 5be4004a..27de1b24 100644
--- a/doc/libadwaita.toml.in
+++ b/doc/libadwaita.toml.in
@@ -54,6 +54,10 @@ content_files = [
"visual-index.md",
]
content_images = [
+ "images/about-window.png",
+ "images/about-window-dark.png",
+ "images/about-window-credits.png",
+ "images/about-window-credits-dark.png",
"images/action-row.png",
"images/action-row-dark.png",
"images/adaptive-boxed-lists-narrow.png",
diff --git a/doc/tools/data/about-window-credits.ui b/doc/tools/data/about-window-credits.ui
new file mode 100644
index 00000000..5f8de338
--- /dev/null
+++ b/doc/tools/data/about-window-credits.ui
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk" version="4.0"/>
+ <requires lib="libadwaita" version="1.0"/>
+ <menu id="demo_menu"/>
+ <object class="AdwBin" id="widget">
+ <property name="width-request">400</property>
+ <property name="child">
+ <object class="AdwPreferencesGroup">
+ <property name="margin-top">12</property>
+ <property name="margin-bottom">12</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <child>
+ <object class="AdwActionRow">
+ <property name="title">Edgar Allan Poe</property>
+ <property name="tooltip-text">mailto:edgar poe com</property>
+ <property name="activatable">True</property>
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">adw-mail-send-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="AdwActionRow">
+ <property name="title">The GNOME Project</property>
+ <property name="tooltip-text">https://www.gnome.org</property>
+ <property name="activatable">True</property>
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">adw-external-link-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ <style>
+ <class name="docs-background"/>
+ </style>
+ </object>
+</interface>
diff --git a/doc/tools/data/about-window.ui b/doc/tools/data/about-window.ui
new file mode 100644
index 00000000..b43699f6
--- /dev/null
+++ b/doc/tools/data/about-window.ui
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk" version="4.0"/>
+ <requires lib="libadwaita" version="1.0"/>
+ <object class="AdwAboutWindow" id="widget">
+ <property name="application-icon">application-x-executable</property>
+ <property name="application-name" translatable="yes">Application</property>
+ <property name="developer-name" translatable="yes">Developer Name</property>
+ <property name="version" translatable="yes">1.2.3</property>
+ <property name="issue-url">https://example.org</property>
+ <property name="developers">Author</property>
+ <property name="copyright">© 2022 Example</property>
+ </object>
+</interface>
diff --git a/doc/visual-index.md b/doc/visual-index.md
index 0a2f42d2..97079e66 100644
--- a/doc/visual-index.md
+++ b/doc/visual-index.md
@@ -95,6 +95,13 @@ Slug: visual-index
<img src="preferences-window.png" alt="preferences-window">
</picture>](class.PreferencesWindow.html)
+## About Window
+
+[<picture>
+ <source srcset="about-window-dark.png" media="(prefers-color-scheme: dark)">
+ <img src="about-window.png" alt="about-window">
+</picture>](class.AboutWindow.html)
+
## Navigation
### Carousel
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 31db95b2..1794c171 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,5 +1,7 @@
# List of source files containing translatable strings.
# Please keep this file sorted alphabetically.
+src/adw-about-window.c
+src/adw-about-window.ui
src/adw-entry-row.ui
src/adw-inspector-page.c
src/adw-inspector-page.ui
diff --git a/src/adw-about-window.c b/src/adw-about-window.c
new file mode 100644
index 00000000..d6c43584
--- /dev/null
+++ b/src/adw-about-window.c
@@ -0,0 +1,3222 @@
+/*
+ * Copyright (C) 2021-2022 Purism SPC
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+#include "adw-about-window.h"
+
+#include "adw-action-row.h"
+#include "adw-leaflet.h"
+#include "adw-macros-private.h"
+#include "adw-message-dialog.h"
+#include "adw-preferences-group.h"
+#include "adw-toast-overlay.h"
+
+#define HEADERBAR_STYLE_THRESHOLD 190
+
+/**
+ * AdwAboutWindow:
+ *
+ * A window showing information about the application.
+ *
+ * <picture>
+ * <source srcset="about-window-dark.png" media="(prefers-color-scheme: dark)">
+ * <img src="about-window.png" alt="about-window">
+ * </picture>
+ *
+ * An about window is typically opened when the user activates the `About …`
+ * item in the application's primary menu. All parts of the window are optional.
+ *
+ * ## Main page
+ *
+ * `AdwAboutWindow` prominently displays the application's icon, name, developer
+ * name and version. They can be set with the [property@AboutWindow:application-icon],
+ * [property@AboutWindow:application-name],
+ * [property@AboutWindow:developer-name] and [property@AboutWindow:version]
+ * respectively.
+ *
+ * ## What's New
+ *
+ * `AdwAboutWindow` provides a way for applications to display their release
+ * notes, set with the [property@AboutWindow:release-notes] property.
+ *
+ * Release notes are formatted the same way as
+ * [AppStream
descriptions](https://freedesktop.org/software/appstream/docs/chap-Metadata.html#tag-description).
+ *
+ * The supported formatting options are:
+ *
+ * * Paragraph (`<p>`)
+ * * Ordered list (`<ol>`), with list items (`<li>`)
+ * * Unordered list (`<ul>`), with list items (`<li>`)
+ *
+ * Within paragraphs and list items, emphasis (`<em>`) and inline code
+ * (`<code>`) text styles are supported. The emphasis is rendered in italic,
+ * while inline code is shown in a monospaced font.
+ *
+ * Any text outside paragraphs or list items is ignored.
+ *
+ * Nested lists are not supported.
+ *
+ * Only one version can be shown at a time. By default, the displayed version
+ * number matches [property@AboutWindow:version]. Use
+ * [property@AboutWindow:release-notes-version] to override it.
+ *
+ * ## Details
+ *
+ * The Details page displays the application comments and links.
+ *
+ * The comments can be set with the [property@AboutWindow:comments] property.
+ * Unlike [property@Gtk.AboutDialog:comments], this string can be long and
+ * detailed. It can also contain links and Pango markup.
+ *
+ * To set the application website, use [property@AboutWindow:website].
+ * To add extra links below the website, use [method@AboutWindow.add_link].
+ *
+ * If the Details page doesn't have any other content besides website, the
+ * website will be displayed on the main page instead.
+ *
+ * ## Troubleshooting
+ *
+ * `AdwAboutWindow` displays the following two links on the main page:
+ *
+ * * Support Questions, set with the [property@AboutWindow:support-url] property,
+ * * Report an Issue, set with the [property@AboutWindow:issue-url] property.
+ *
+ * Additionally, applications can provide debugging information. It will be
+ * shown separately on the Troubleshooting page. Use the
+ * [property@AboutWindow:debug-info] property to specify it.
+ *
+ * It's intended to be attached to issue reports when reporting issues against
+ * the application. As such, it cannot contain markup or links.
+ *
+ * `AdwAboutWindow` provides a quick way to save debug information to a file.
+ * When saving, [property@AboutWindow:debug-info-filename] would be used as
+ * the suggested filename.
+ *
+ * ## Credits and Acknowledgements
+ *
+ * The Credits page has the following default sections:
+ *
+ * * Developers, set with the [property@AboutWindow:developers] property,
+ * * Designers, set with the [property@AboutWindow:designers] property,
+ * * Artists, set with the [property@AboutWindow:artists] property,
+ * * Documenters, set with the [property@AboutWindow:documenters] property,
+ * * Translators, set with the [property@AboutWindow:translator-credits] property.
+ *
+ * When setting translator credits, use the strings `"translator-credits"` or
+ * `"translator_credits"` and mark them as translatable.
+ *
+ * The default sections that don't contain any names won't be displayed.
+ *
+ * The Credits page can also contain an arbitrary number of extra sections below
+ * the default ones. Use [method@AboutWindow.add_credit_section] to add them.
+ *
+ * The Acknowledgements page can be used to acknowledge additional people and
+ * organizations for their non-development contributions. Use
+ * [method@AboutWindow.add_acknowledgement_section] to add sections to it. For
+ * example, it can be used to list backers in a crowdfunded project or to give
+ * special thanks.
+ *
+ * Each of the people or organizations can have an email address or a website
+ * specified. To add a email address, use a string like
+ * `Edgar Allan Poe <edgar poe com>`. To specify a website with a title, use a
+ * string like `The GNOME Project https://www.gnome.org`:
+ *
+ * <picture>
+ * <source srcset="about-window-credits-dark.png" media="(prefers-color-scheme: dark)">
+ * <img src="about-window-credits.png" alt="about-window-credits">
+ * </picture>
+ *
+ * ## Legal
+ *
+ * The Legal page displays the copyright and licensing information for the
+ * application and other modules.
+ *
+ * The copyright string is set with the [property@AboutWindow:copyright]
+ * property and should be a short string of one or two lines, for example:
+ * `© 2022 Example`.
+ *
+ * Licensing information can be quickly set from a list of known licenses with
+ * the [property@AboutWindow:license-type] property. If the application's
+ * license is not in the list, [property@AboutWindow:license] can be used
+ * instead.
+ *
+ * To add information about other modules, such as application dependencies or
+ * data, use [method@AboutWindow.add_legal_section].
+ *
+ * ## Constructing
+ *
+ * To make constructing an `AdwAboutWindow` as convenient as possible, you can
+ * use the function [func@show_about_window] which constructs and shows a
+ * window.
+ *
+ * ```c
+ * static void
+ * show_about (GtkApplication *app)
+ * {
+ * const char *developers[] = {
+ * "Angela Avery",
+ * NULL
+ * };
+ *
+ * const char *designers[] = {
+ * "GNOME Design Team",
+ * NULL
+ * };
+ *
+ * adw_show_about_window (gtk_application_get_active_window (app),
+ * "application-name", _("Example"),
+ * "application-icon", "org.example.App",
+ * "version", "1.2.3",
+ * "copyright", "© 2022 Angela Avery",
+ * "issue-url", "https://gitlab.gnome.org/example/example/-/issues/new",
+ * "license-type", GTK_LICENSE_GPL_3_0,
+ * "developers", developers,
+ * "designers", designers,
+ * "translator-credits", _("translator-credits"),
+ * NULL);
+ * }
+ * ```
+ *
+ * ## CSS nodes
+ *
+ * `AdwAboutWindow` has a main CSS node with the name `window` and the
+ * style class `.about`.
+ *
+ * Since: 1.2
+ */
+
+/* Copied from GTK 4 for consistency with GtkAboutDialog. */
+typedef struct {
+ const char *name;
+ const char *url;
+} LicenseInfo;
+
+/* Copied from GTK 4 for consistency with GtkAboutDialog. */
+/* LicenseInfo for each GtkLicense type; keep in the same order as the
+ * enumeration. */
+static const LicenseInfo gtk_license_info [] = {
+ { NULL, NULL },
+ { NULL, NULL },
+ { N_("GNU General Public License, version 2 or later"),
"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html" },
+ { N_("GNU General Public License, version 3 or later"), "https://www.gnu.org/licenses/gpl-3.0.html" },
+ { N_("GNU Lesser General Public License, version 2.1 or later"),
"https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html" },
+ { N_("GNU Lesser General Public License, version 3 or later"),
"https://www.gnu.org/licenses/lgpl-3.0.html" },
+ { N_("BSD 2-Clause License"), "https://opensource.org/licenses/bsd-license.php" },
+ { N_("The MIT License (MIT)"), "https://opensource.org/licenses/mit-license.php" },
+ { N_("Artistic License 2.0"), "https://opensource.org/licenses/artistic-license-2.0.php" },
+ { N_("GNU General Public License, version 2 only"),
"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html" },
+ { N_("GNU General Public License, version 3 only"), "https://www.gnu.org/licenses/gpl-3.0.html" },
+ { N_("GNU Lesser General Public License, version 2.1 only"),
"https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html" },
+ { N_("GNU Lesser General Public License, version 3 only"), "https://www.gnu.org/licenses/lgpl-3.0.html" },
+ { N_("GNU Affero General Public License, version 3 or later"),
"https://www.gnu.org/licenses/agpl-3.0.html" },
+ { N_("GNU Affero General Public License, version 3 only"), "https://www.gnu.org/licenses/agpl-3.0.html" },
+ { N_("BSD 3-Clause License"), "https://opensource.org/licenses/BSD-3-Clause" },
+ { N_("Apache License, Version 2.0"), "https://opensource.org/licenses/Apache-2.0" },
+ { N_("Mozilla Public License 2.0"), "https://opensource.org/licenses/MPL-2.0" }
+};
+/* Copied from GTK 4 for consistency with GtkAboutDialog. */
+/* Keep this static assertion updated with the last element of the enumeration,
+ * and make sure it matches the last element of the array. */
+G_STATIC_ASSERT (G_N_ELEMENTS (gtk_license_info) - 1 == GTK_LICENSE_MPL_2_0);
+
+typedef struct {
+ char *name;
+ char **people;
+} CreditsSection;
+
+typedef struct {
+ char *title;
+ char *copyright;
+ char *license;
+ GtkLicense license_type;
+} LegalSection;
+
+struct _AdwAboutWindow {
+ AdwWindow parent_instance;
+
+ GtkWidget *leaflet;
+ GtkWidget *subpage_stack;
+ GtkWidget *toast_overlay;
+ GtkWidget *website_row;
+ GtkWidget *links_group;
+ GtkWidget *details_website_row;
+ GtkWidget *credits_box;
+ GtkWidget *legal_box;
+ GtkWidget *acknowledgements_box;
+ GtkWidget *debug_info_page;
+ GtkTextBuffer *release_notes_buffer;
+
+ char *application_icon;
+ char *application_name;
+ char *developer_name;
+ char *version;
+ char *release_notes_version;
+ char *release_notes;
+ char *comments;
+ char *website;
+ char *support_url;
+ char *issue_url;
+ char *debug_info;
+ char *debug_info_filename;
+ char **developers;
+ char **designers;
+ char **artists;
+ char **documenters;
+ char *translator_credits;
+ GSList *credit_sections;
+ char *copyright;
+ char *license;
+ GtkLicense license_type;
+ GSList *legal_sections;
+ gboolean has_custom_links;
+};
+
+G_DEFINE_TYPE (AdwAboutWindow, adw_about_window, ADW_TYPE_WINDOW)
+
+enum {
+ PROP_0,
+ PROP_APPLICATION_ICON,
+ PROP_APPLICATION_NAME,
+ PROP_DEVELOPER_NAME,
+ PROP_VERSION,
+ PROP_RELEASE_NOTES_VERSION,
+ PROP_RELEASE_NOTES,
+ PROP_COMMENTS,
+ PROP_WEBSITE,
+ PROP_SUPPORT_URL,
+ PROP_ISSUE_URL,
+ PROP_DEBUG_INFO,
+ PROP_DEBUG_INFO_FILENAME,
+ PROP_DEVELOPERS,
+ PROP_DESIGNERS,
+ PROP_ARTISTS,
+ PROP_DOCUMENTERS,
+ PROP_TRANSLATOR_CREDITS,
+ PROP_COPYRIGHT,
+ PROP_LICENSE_TYPE,
+ PROP_LICENSE,
+ LAST_PROP,
+};
+
+static GParamSpec *props[LAST_PROP];
+
+enum {
+ SIGNAL_ACTIVATE_LINK,
+ SIGNAL_LAST_SIGNAL,
+};
+
+static guint signals[SIGNAL_LAST_SIGNAL];
+
+static void
+free_credit_section (CreditsSection *section)
+{
+ g_free (section->name);
+ g_strfreev (section->people);
+ g_free (section);
+}
+
+static void
+free_legal_section (LegalSection *section)
+{
+ g_free (section->title);
+ g_free (section->license);
+ g_free (section);
+}
+
+static gboolean
+boolean_or (AdwAboutWindow *self,
+ int number,
+ ...)
+{
+ va_list args;
+
+ va_start (args, number);
+
+ for (gsize i = 0; i < number; i++)
+ if (va_arg (args, gboolean)) {
+ va_end (args);
+
+ return TRUE;
+ }
+
+ va_end (args);
+
+ return FALSE;
+}
+
+static gboolean
+string_is_not_empty (AdwAboutWindow *self,
+ const char *string)
+{
+ return string && string[0];
+}
+
+static char *
+get_headerbar_name (AdwAboutWindow *self,
+ double value)
+{
+ double threshold = 0;
+
+ if (self->application_icon && *self->application_icon &&
+ self->application_name && *self->application_name)
+ threshold = HEADERBAR_STYLE_THRESHOLD;
+
+ return g_strdup (value > threshold ? "regular" : "top");
+}
+
+static inline void
+activate_link (AdwAboutWindow *self,
+ const char *uri)
+{
+ gboolean ret = FALSE;
+ g_signal_emit (self, signals[SIGNAL_ACTIVATE_LINK], 0, uri, &ret);
+}
+
+static gboolean
+activate_link_cb (AdwAboutWindow *self,
+ const char *uri)
+{
+ activate_link (self, uri);
+
+ return GDK_EVENT_STOP;
+}
+
+static gboolean
+activate_link_default_cb (AdwAboutWindow *self,
+ const char *uri)
+{
+ /* FIXME: We need our own alternative that uses AdwMessageDialog for errors */
+ gtk_show_uri (GTK_WINDOW (self), uri, GDK_CURRENT_TIME);
+
+ return GDK_EVENT_STOP;
+}
+
+/* Adapted from text_buffer_new() in gtkaboutdialog.c */
+static void
+parse_person (char *person,
+ char **name,
+ char **link,
+ gboolean *is_email)
+{
+
+ const char *q1, *q2, *r1, *r2;
+
+ q1 = strchr (person, '<');
+ q2 = q1 ? strchr (q1, '>') : NULL;
+ r1 = strstr (person, "http://");
+ r2 = strstr (person, "https://");
+
+ if (!r1 || (r1 && r2 && r2 < r1))
+ r1 = r2;
+ if (r1) {
+ r2 = strpbrk (r1, " \n\t>");
+ if (!r2)
+ r2 = strchr (r1, '\0');
+ } else {
+ r2 = NULL;
+ }
+
+ if (r1 && r2 && (!q1 || !q2 || (r1 <= q1 + 1))) {
+ q1 = r1;
+ q2 = r2;
+ }
+
+ if (q1 && q2) {
+ *name = g_strndup (person, q1 - person);
+ *is_email = (*q1 == '<');
+
+ if (*is_email)
+ *link = g_strndup (q1 + 1, q2 - q1 - 1);
+ else
+ *link = g_strndup (q1, q2 - q1);
+ } else {
+ *name = g_strdup (person);
+ *link = NULL;
+ *is_email = FALSE;
+ }
+
+ g_strstrip (*name);
+}
+
+static void
+add_credits_section (GtkWidget *box,
+ const char *title,
+ char **people)
+{
+ GtkWidget *group;
+ char **person;
+
+ if (!people || !*people)
+ return;
+
+ group = adw_preferences_group_new ();
+ adw_preferences_group_set_title (ADW_PREFERENCES_GROUP (group), title);
+
+ for (person = people; *person; person++) {
+ GtkWidget *row;
+ char *name = NULL;
+ char *link = NULL;
+ gboolean is_email = FALSE;
+
+ if (!*person)
+ continue;
+
+ parse_person (*person, &name, &link, &is_email);
+
+ row = adw_action_row_new ();
+ adw_preferences_row_set_use_markup (ADW_PREFERENCES_ROW (row), FALSE);
+ adw_preferences_row_set_title (ADW_PREFERENCES_ROW (row), name);
+ adw_preferences_group_add (ADW_PREFERENCES_GROUP (group), row);
+
+ if (link) {
+ GtkWidget *image = gtk_image_new ();
+
+ if (is_email)
+ gtk_image_set_from_icon_name (GTK_IMAGE (image), "adw-mail-send-symbolic");
+ else
+ gtk_image_set_from_icon_name (GTK_IMAGE (image), "adw-external-link-symbolic");
+
+ adw_action_row_add_suffix (ADW_ACTION_ROW (row), image);
+ gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (row), TRUE);
+ gtk_actionable_set_action_name (GTK_ACTIONABLE (row), "about.show-url");
+
+ if (is_email) {
+ char *escaped = g_uri_escape_string (link, NULL, FALSE);
+ char *mailto = g_strconcat ("mailto:", escaped, NULL);
+
+ gtk_actionable_set_action_target (GTK_ACTIONABLE (row), "s", mailto);
+
+ g_free (mailto);
+ g_free (escaped);
+ } else {
+ gtk_actionable_set_action_target (GTK_ACTIONABLE (row), "s", link);
+ }
+
+ gtk_widget_set_tooltip_text (row, link);
+ }
+
+ g_free (name);
+ g_free (link);
+ }
+
+ gtk_box_append (GTK_BOX (box), group);
+}
+
+static void
+update_credits (AdwAboutWindow *self)
+{
+ GtkWidget *widget;
+ char **translators;
+ GSList *l;
+
+ while ((widget = gtk_widget_get_first_child (self->credits_box)))
+ gtk_box_remove (GTK_BOX (self->credits_box), widget);
+
+ if (self->translator_credits &&
+ g_strcmp0 (self->translator_credits, "translator_credits") &&
+ g_strcmp0 (self->translator_credits, "translator-credits"))
+ translators = g_strsplit (self->translator_credits, "\n", 0);
+ else
+ translators = NULL;
+
+ add_credits_section (self->credits_box, _("Code by"), self->developers);
+ add_credits_section (self->credits_box, _("Design by"), self->designers);
+ add_credits_section (self->credits_box, _("Artwork by"), self->artists);
+ add_credits_section (self->credits_box, _("Documentation by"), self->documenters);
+ add_credits_section (self->credits_box, _("Translated by"), translators);
+
+ for (l = self->credit_sections; l; l = l->next) {
+ CreditsSection *section = l->data;
+
+ add_credits_section (self->credits_box, section->name, section->people);
+ }
+
+ g_strfreev (translators);
+
+ gtk_widget_set_visible (self->credits_box,
+ !!gtk_widget_get_first_child (self->credits_box));
+}
+
+static char *
+get_license_text (GtkLicense license_type,
+ const char *license)
+{
+ if (license_type == GTK_LICENSE_UNKNOWN)
+ return NULL;
+
+ if (license_type == GTK_LICENSE_CUSTOM)
+ return g_strdup (license);
+
+ /* Translators: this is the license preamble; the string at the end
+ * contains the name of the license as link text.
+ */
+ return g_strdup_printf (_("This application comes with absolutely no warranty. See the <a
href=\"%s\">%s</a> for details."),
+ gtk_license_info[license_type].url,
+ _(gtk_license_info[license_type].name));
+}
+
+static void
+append_legal_section (AdwAboutWindow *self,
+ LegalSection *section,
+ gboolean force_title)
+{
+ GtkWidget *label;
+ char *license;
+
+ if (force_title)
+ g_assert (section->title);
+
+ license = get_license_text (section->license_type, section->license);
+
+ if ((!section->copyright || !*section->copyright) &&
+ (!license || !*license) && !force_title) {
+ g_free (license);
+
+ return;
+ }
+
+ if (section->title && *section->title) {
+ label = gtk_label_new (section->title);
+ gtk_label_set_wrap (GTK_LABEL (label), TRUE);
+ gtk_label_set_wrap_mode (GTK_LABEL (label), PANGO_WRAP_WORD_CHAR);
+ gtk_label_set_xalign (GTK_LABEL (label), 0);
+ gtk_widget_add_css_class (label, "heading");
+ gtk_box_append (GTK_BOX (self->legal_box), label);
+ }
+
+ if ((!section->copyright || !*section->copyright) &&
+ (!license || !*license)) {
+ g_free (license);
+
+ return;
+ }
+
+ label = gtk_label_new (NULL);
+ gtk_label_set_wrap (GTK_LABEL (label), TRUE);
+ gtk_label_set_wrap_mode (GTK_LABEL (label), PANGO_WRAP_WORD_CHAR);
+ gtk_label_set_xalign (GTK_LABEL (label), 0);
+ gtk_label_set_selectable (GTK_LABEL (label), TRUE);
+ gtk_widget_add_css_class (label, "body");
+ g_signal_connect_swapped (label, "activate-link", G_CALLBACK (activate_link_cb), self);
+
+ if (section->copyright && *section->copyright && license && *license) {
+ char *text = g_strconcat (section->copyright, "\n\n", license, NULL);
+
+ gtk_label_set_markup (GTK_LABEL (label), text);
+
+ g_free (text);
+ } else if (section->copyright && *section->copyright) {
+ gtk_label_set_markup (GTK_LABEL (label), section->copyright);
+ } else {
+ gtk_label_set_markup (GTK_LABEL (label), license);
+ }
+
+ gtk_box_append (GTK_BOX (self->legal_box), label);
+
+ g_free (license);
+}
+
+static void
+update_legal (AdwAboutWindow *self)
+{
+ LegalSection default_section;
+ GtkWidget *widget;
+ GSList *l;
+
+ while ((widget = gtk_widget_get_first_child (self->legal_box)))
+ gtk_box_remove (GTK_BOX (self->legal_box), widget);
+
+ /* We only want to show the default title if there's more than one section */
+ if (self->legal_sections)
+ default_section.title = _("This Application");
+ else
+ default_section.title = NULL;
+
+ default_section.copyright = self->copyright;
+ default_section.license_type = self->license_type;
+ default_section.license = self->license;
+ append_legal_section (self, &default_section, FALSE);
+
+ for (l = self->legal_sections; l; l = l->next)
+ append_legal_section (self, l->data, TRUE);
+
+ gtk_widget_set_visible (self->legal_box,
+ !!gtk_widget_get_first_child (self->legal_box));
+}
+
+typedef enum {
+ STATE_NONE,
+ STATE_PARAGRAPH,
+ STATE_UNORDERED_LIST,
+ STATE_UNORDERED_ITEM,
+ STATE_ORDERED_LIST,
+ STATE_ORDERED_ITEM,
+} ReleaseNotesState;
+
+typedef struct {
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+
+ ReleaseNotesState state;
+ int n_item;
+ int section_start;
+ int paragraph_start;
+ gboolean last_trailing_space;
+} ReleaseNotesParserData;
+
+static void
+start_element_handler (GMarkupParseContext *context,
+ const char *element_name,
+ const char **attribute_names,
+ const char **attribute_values,
+ gpointer user_data,
+ GError **error)
+{
+ ReleaseNotesParserData *pdata = user_data;
+
+ switch (pdata->state) {
+ case STATE_NONE:
+ if (!g_strcmp0 (element_name, "p")) {
+ pdata->state = STATE_PARAGRAPH;
+ pdata->paragraph_start = gtk_text_iter_get_offset (&pdata->iter);
+ }
+
+ if (!g_strcmp0 (element_name, "ul"))
+ pdata->state = STATE_UNORDERED_LIST;
+
+ if (!g_strcmp0 (element_name, "ol"))
+ pdata->state = STATE_ORDERED_LIST;
+
+ if (pdata->state != STATE_NONE) {
+ pdata->section_start = gtk_text_iter_get_offset (&pdata->iter);
+ break;
+ }
+
+ g_set_error (error,
+ G_MARKUP_ERROR,
+ G_MARKUP_ERROR_UNKNOWN_ELEMENT,
+ "Unexpected element '%s'",
+ element_name);
+ break;
+
+ case STATE_PARAGRAPH:
+ case STATE_UNORDERED_ITEM:
+ case STATE_ORDERED_ITEM:
+ if (!g_strcmp0 (element_name, "em") ||
+ !g_strcmp0 (element_name, "code")) {
+ break;
+ }
+
+ g_set_error (error,
+ G_MARKUP_ERROR,
+ G_MARKUP_ERROR_UNKNOWN_ELEMENT,
+ "Unexpected element '%s'",
+ element_name);
+ break;
+
+ case STATE_UNORDERED_LIST:
+ case STATE_ORDERED_LIST:
+ if (!g_strcmp0 (element_name, "li")) {
+ char *bullet;
+
+ if (pdata->n_item > 1)
+ gtk_text_buffer_insert (pdata->buffer, &pdata->iter, "\n", -1);
+
+ if (pdata->state == STATE_ORDERED_LIST) {
+ pdata->state = STATE_ORDERED_ITEM;
+ bullet = g_strdup_printf ("%d. ", pdata->n_item);
+ } else {
+ pdata->state = STATE_UNORDERED_ITEM;
+ bullet = g_strdup ("• ");
+ }
+
+ gtk_text_buffer_insert_with_tags_by_name (pdata->buffer, &pdata->iter, bullet, -1, "bullet", NULL);
+ pdata->paragraph_start = gtk_text_iter_get_offset (&pdata->iter);
+
+ g_free (bullet);
+
+ break;
+ }
+
+ g_set_error (error,
+ G_MARKUP_ERROR,
+ G_MARKUP_ERROR_UNKNOWN_ELEMENT,
+ "Unexpected element '%s'",
+ element_name);
+ break;
+
+ default:
+ g_assert_not_reached ();
+ }
+
+ if (!g_strcmp0 (element_name, "em") ||
+ !g_strcmp0 (element_name, "code") ||
+ !g_strcmp0 (element_name, "ul") ||
+ !g_strcmp0 (element_name, "ol") ||
+ !g_strcmp0 (element_name, "li")) {
+ g_markup_collect_attributes (element_name,
+ attribute_names,
+ attribute_values,
+ error,
+ G_MARKUP_COLLECT_INVALID,
+ NULL);
+ return;
+ }
+
+ /* We don't support attributes anywhere, so error out if we encounter any. */
+ g_markup_collect_attributes (element_name,
+ attribute_names,
+ attribute_values,
+ error,
+ G_MARKUP_COLLECT_INVALID,
+ NULL);
+}
+
+static void
+end_element_handler (GMarkupParseContext *context,
+ const char *element_name,
+ gpointer user_data,
+ GError **error)
+{
+ ReleaseNotesParserData *pdata = user_data;
+
+ if (!g_strcmp0 (element_name, "p") ||
+ !g_strcmp0 (element_name, "ul") ||
+ !g_strcmp0 (element_name, "ol")) {
+
+ if (pdata->section_start != gtk_text_iter_get_offset (&pdata->iter)) {
+ gtk_text_buffer_insert (pdata->buffer, &pdata->iter, "\n", -1);
+
+ if (pdata->section_start > 0 && !g_strcmp0 (element_name, "p")) {
+ GtkTextIter start_iter;
+ gtk_text_buffer_get_iter_at_offset (pdata->buffer, &start_iter, pdata->section_start);
+ gtk_text_buffer_apply_tag_by_name (pdata->buffer, "section", &start_iter, &pdata->iter);
+ }
+ }
+
+ pdata->state = STATE_NONE;
+ pdata->section_start = -1;
+ pdata->paragraph_start = -1;
+ pdata->n_item = 1;
+ return;
+ }
+
+ if (!g_strcmp0 (element_name, "li")) {
+ if (pdata->state == STATE_UNORDERED_ITEM)
+ pdata->state = STATE_UNORDERED_LIST;
+ else if (pdata->state == STATE_ORDERED_ITEM)
+ pdata->state = STATE_ORDERED_LIST;
+ else
+ g_assert_not_reached ();
+
+ if (pdata->section_start > 0 && pdata->n_item == 1) {
+ GtkTextIter start_iter;
+ gtk_text_buffer_get_iter_at_offset (pdata->buffer, &start_iter,
+ pdata->section_start);
+ gtk_text_buffer_apply_tag_by_name (pdata->buffer, "section", &start_iter, &pdata->iter);
+ }
+
+ pdata->n_item++;
+ pdata->paragraph_start = -1;
+ return;
+ }
+}
+
+static void
+text_handler (GMarkupParseContext *context,
+ const char *text,
+ gsize text_len,
+ gpointer user_data,
+ GError **error)
+{
+ ReleaseNotesParserData *pdata = user_data;
+ const char *element;
+ char *escaped;
+ static GRegex *regex = NULL;
+ gboolean leading_space;
+ gboolean trailing_space;
+
+ if (pdata->state != STATE_PARAGRAPH &&
+ pdata->state != STATE_UNORDERED_ITEM &&
+ pdata->state != STATE_ORDERED_ITEM)
+ return;
+
+ /* Replace random amounts of spaces and newlines with single spaces */
+ if (!regex) {
+ GError *regex_error = NULL;
+
+ regex = g_regex_new ("\\s+", G_REGEX_OPTIMIZE, 0, ®ex_error);
+
+ if (regex_error) {
+ g_error ("Couldn't compile regex: %s", regex_error->message);
+ g_error_free (regex_error);
+ }
+ }
+
+ element = g_markup_parse_context_get_element (context);
+
+ escaped = g_regex_replace_literal (regex, text, text_len, 0, " ", 0, error);
+
+ if (*error)
+ return;
+
+ if (!*escaped) {
+ g_free (escaped);
+ return;
+ }
+
+ leading_space = *escaped == ' ';
+ trailing_space = escaped[strlen (escaped) - 1] == ' ';
+
+ g_strstrip (escaped);
+
+ /* This might have made the string empty, skip it in that case */
+ if (!*escaped) {
+ g_free (escaped);
+ pdata->last_trailing_space = trailing_space;
+ return;
+ }
+
+ /* We've got rid of inner spaces before <em> and <code>. Bring them back */
+ if ((leading_space || pdata->last_trailing_space) &&
+ pdata->paragraph_start != gtk_text_iter_get_offset (&pdata->iter))
+ gtk_text_buffer_insert (pdata->buffer, &pdata->iter, " ", -1);
+
+ if (!g_strcmp0 (element, "em") || !g_strcmp0 (element, "code"))
+ gtk_text_buffer_insert_with_tags_by_name (pdata->buffer, &pdata->iter,
+ escaped, -1, element, NULL);
+ else
+ gtk_text_buffer_insert (pdata->buffer, &pdata->iter, escaped, -1);
+
+ pdata->last_trailing_space = trailing_space;
+
+ g_free (escaped);
+}
+
+static const GMarkupParser markup_parser =
+{
+ start_element_handler,
+ end_element_handler,
+ text_handler,
+ NULL,
+ NULL
+};
+
+static void
+update_release_notes (AdwAboutWindow *self)
+{
+ GMarkupParseContext *context;
+ ReleaseNotesParserData pdata;
+ GError *error = NULL;
+ GtkTextIter end_iter;
+ const char *version = NULL;
+
+ gtk_text_buffer_set_text (self->release_notes_buffer, "", -1);
+
+ if (!self->release_notes || !*self->release_notes)
+ return;
+
+ pdata.buffer = self->release_notes_buffer;
+ gtk_text_buffer_get_start_iter (self->release_notes_buffer, &pdata.iter);
+
+ if (self->release_notes_version && *self->release_notes_version)
+ version = self->release_notes_version;
+ else if (self->version && *self->version)
+ version = self->version;
+
+ if (version) {
+ char *heading = g_strdup_printf (_("Version %s"), version);
+
+ gtk_text_buffer_insert_with_tags_by_name (self->release_notes_buffer,
+ &pdata.iter, heading, -1,
+ "heading", NULL);
+ gtk_text_buffer_insert (self->release_notes_buffer, &pdata.iter, "\n", -1);
+
+ g_free (heading);
+ }
+
+ pdata.state = STATE_NONE;
+ pdata.n_item = 0;
+ pdata.last_trailing_space = FALSE;
+ context = g_markup_parse_context_new (&markup_parser, 0, &pdata, NULL);
+
+ if (!g_markup_parse_context_parse (context, self->release_notes, -1, &error) ||
+ !g_markup_parse_context_end_parse (context, &error)) {
+ int line_number, char_number;
+ char *position;
+ g_markup_parse_context_get_position (context, &line_number, &char_number);
+
+ g_critical ("Unable to parse release notes: %s at line %d, char %d", error->message, line_number,
char_number);
+
+ gtk_text_buffer_set_text (self->release_notes_buffer, "", -1);
+ gtk_text_buffer_get_start_iter (self->release_notes_buffer, &pdata.iter);
+
+ gtk_text_buffer_insert (self->release_notes_buffer, &pdata.iter, _("Unable to parse release notes:"),
-1);
+ gtk_text_buffer_insert (self->release_notes_buffer, &pdata.iter, "\n", -1);
+
+ gtk_text_buffer_insert (self->release_notes_buffer, &pdata.iter, error->message, -1);
+ gtk_text_buffer_insert (self->release_notes_buffer, &pdata.iter, "\n", -1);
+
+ position = g_strdup_printf (_("Line: %d, character: %d"), line_number, char_number);
+ gtk_text_buffer_insert (self->release_notes_buffer, &pdata.iter, position, -1);
+
+ g_markup_parse_context_free (context);
+ g_error_free (error);
+ g_free (position);
+
+ return;
+ }
+
+ gtk_text_iter_backward_chars (&pdata.iter, 2);
+ gtk_text_buffer_get_end_iter (self->release_notes_buffer, &end_iter);
+ gtk_text_buffer_delete (self->release_notes_buffer, &pdata.iter, &end_iter);
+
+ g_markup_parse_context_free (context);
+}
+
+static void
+update_links (AdwAboutWindow *self)
+{
+ gboolean has_website = self->website && *self->website;
+ gboolean has_comments = self->comments && *self->comments;
+ gboolean show_details = has_comments || self->has_custom_links;
+
+ gtk_widget_set_visible (self->website_row, has_website && !show_details);
+
+ gtk_widget_set_visible (self->details_website_row, has_website && show_details);
+ gtk_widget_set_visible (self->links_group,
+ (has_website && has_comments) || self->has_custom_links);
+}
+
+static void
+adw_about_window_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ AdwAboutWindow *self = ADW_ABOUT_WINDOW (object);
+
+ switch (prop_id) {
+ case PROP_APPLICATION_ICON:
+ g_value_set_string (value, adw_about_window_get_application_icon (self));
+ break;
+ case PROP_APPLICATION_NAME:
+ g_value_set_string (value, adw_about_window_get_application_name (self));
+ break;
+ case PROP_DEVELOPER_NAME:
+ g_value_set_string (value, adw_about_window_get_developer_name (self));
+ break;
+ case PROP_VERSION:
+ g_value_set_string (value, adw_about_window_get_version (self));
+ break;
+ case PROP_RELEASE_NOTES_VERSION:
+ g_value_set_string (value, adw_about_window_get_release_notes_version (self));
+ break;
+ case PROP_RELEASE_NOTES:
+ g_value_set_string (value, adw_about_window_get_release_notes (self));
+ break;
+ case PROP_COMMENTS:
+ g_value_set_string (value, adw_about_window_get_comments (self));
+ break;
+ case PROP_WEBSITE:
+ g_value_set_string (value, adw_about_window_get_website (self));
+ break;
+ case PROP_SUPPORT_URL:
+ g_value_set_string (value, adw_about_window_get_support_url (self));
+ break;
+ case PROP_ISSUE_URL:
+ g_value_set_string (value, adw_about_window_get_issue_url (self));
+ break;
+ case PROP_DEBUG_INFO:
+ g_value_set_string (value, adw_about_window_get_debug_info (self));
+ break;
+ case PROP_DEBUG_INFO_FILENAME:
+ g_value_set_string (value, adw_about_window_get_debug_info_filename (self));
+ break;
+ case PROP_DEVELOPERS:
+ g_value_set_boxed (value, adw_about_window_get_developers (self));
+ break;
+ case PROP_DESIGNERS:
+ g_value_set_boxed (value, adw_about_window_get_designers (self));
+ break;
+ case PROP_ARTISTS:
+ g_value_set_boxed (value, adw_about_window_get_artists (self));
+ break;
+ case PROP_DOCUMENTERS:
+ g_value_set_boxed (value, adw_about_window_get_documenters (self));
+ break;
+ case PROP_TRANSLATOR_CREDITS:
+ g_value_set_string (value, adw_about_window_get_translator_credits (self));
+ break;
+ case PROP_COPYRIGHT:
+ g_value_set_string (value, adw_about_window_get_copyright (self));
+ break;
+ case PROP_LICENSE_TYPE:
+ g_value_set_enum (value, adw_about_window_get_license_type (self));
+ break;
+ case PROP_LICENSE:
+ g_value_set_string (value, adw_about_window_get_license (self));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+adw_about_window_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ AdwAboutWindow *self = ADW_ABOUT_WINDOW (object);
+
+ switch (prop_id) {
+ case PROP_APPLICATION_ICON:
+ adw_about_window_set_application_icon (self, g_value_get_string (value));
+ break;
+ case PROP_APPLICATION_NAME:
+ adw_about_window_set_application_name (self, g_value_get_string (value));
+ break;
+ case PROP_DEVELOPER_NAME:
+ adw_about_window_set_developer_name (self, g_value_get_string (value));
+ break;
+ case PROP_VERSION:
+ adw_about_window_set_version (self, g_value_get_string (value));
+ break;
+ case PROP_RELEASE_NOTES_VERSION:
+ adw_about_window_set_release_notes_version (self, g_value_get_string (value));
+ break;
+ case PROP_RELEASE_NOTES:
+ adw_about_window_set_release_notes (self, g_value_get_string (value));
+ break;
+ case PROP_COMMENTS:
+ adw_about_window_set_comments (self, g_value_get_string (value));
+ break;
+ case PROP_WEBSITE:
+ adw_about_window_set_website (self, g_value_get_string (value));
+ break;
+ case PROP_SUPPORT_URL:
+ adw_about_window_set_support_url (self, g_value_get_string (value));
+ break;
+ case PROP_ISSUE_URL:
+ adw_about_window_set_issue_url (self, g_value_get_string (value));
+ break;
+ case PROP_DEBUG_INFO:
+ adw_about_window_set_debug_info (self, g_value_get_string (value));
+ break;
+ case PROP_DEBUG_INFO_FILENAME:
+ adw_about_window_set_debug_info_filename (self, g_value_get_string (value));
+ break;
+ case PROP_DEVELOPERS:
+ adw_about_window_set_developers (self, g_value_get_boxed (value));
+ break;
+ case PROP_DESIGNERS:
+ adw_about_window_set_designers (self, g_value_get_boxed (value));
+ break;
+ case PROP_DOCUMENTERS:
+ adw_about_window_set_documenters (self, g_value_get_boxed (value));
+ break;
+ case PROP_ARTISTS:
+ adw_about_window_set_artists (self, g_value_get_boxed (value));
+ break;
+ case PROP_TRANSLATOR_CREDITS:
+ adw_about_window_set_translator_credits (self, g_value_get_string (value));
+ break;
+ case PROP_COPYRIGHT:
+ adw_about_window_set_copyright (self, g_value_get_string (value));
+ break;
+ case PROP_LICENSE_TYPE:
+ adw_about_window_set_license_type (self, g_value_get_enum (value));
+ break;
+ case PROP_LICENSE:
+ adw_about_window_set_license (self, g_value_get_string (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+adw_about_window_finalize (GObject *object)
+{
+ AdwAboutWindow *self = ADW_ABOUT_WINDOW (object);
+
+ g_free (self->application_icon);
+ g_free (self->application_name);
+ g_free (self->developer_name);
+ g_free (self->version);
+ g_free (self->release_notes_version);
+ g_free (self->release_notes);
+ g_free (self->comments);
+ g_free (self->website);
+ g_free (self->support_url);
+ g_free (self->issue_url);
+ g_free (self->debug_info);
+ g_free (self->debug_info_filename);
+
+ g_strfreev (self->developers);
+ g_strfreev (self->designers);
+ g_strfreev (self->artists);
+ g_strfreev (self->documenters);
+ g_free (self->translator_credits);
+ g_slist_free_full (self->credit_sections, (GDestroyNotify) free_credit_section);
+
+ g_free (self->copyright);
+ g_free (self->license);
+ g_slist_free_full (self->legal_sections, (GDestroyNotify) free_legal_section);
+
+ G_OBJECT_CLASS (adw_about_window_parent_class)->finalize (object);
+}
+
+static void
+back_cb (AdwAboutWindow *self)
+{
+ adw_leaflet_navigate (ADW_LEAFLET (self->leaflet), ADW_NAVIGATION_DIRECTION_BACK);
+}
+
+static void
+subpage_cb (AdwAboutWindow *self,
+ const char *action_name,
+ GVariant *params)
+{
+ const char *name = g_variant_get_string (params, NULL);
+
+ gtk_stack_set_visible_child_name (GTK_STACK (self->subpage_stack), name);
+ adw_leaflet_navigate (ADW_LEAFLET (self->leaflet), ADW_NAVIGATION_DIRECTION_FORWARD);
+}
+
+static void
+show_url_cb (AdwAboutWindow *self,
+ const char *action_name,
+ GVariant *params)
+{
+ const char *url = g_variant_get_string (params, NULL);
+
+ activate_link (self, url);
+}
+
+static void
+show_url_property_cb (AdwAboutWindow *self,
+ const char *action_name,
+ GVariant *params)
+{
+ const char *property = g_variant_get_string (params, NULL);
+ char *url;
+
+ g_object_get (self, property, &url, NULL);
+
+ activate_link (self, url);
+
+ g_free (url);
+}
+
+static void
+copy_property_cb (AdwAboutWindow *self,
+ const char *action_name,
+ GVariant *params)
+{
+ const char *property = g_variant_get_string (params, NULL);
+ char *value;
+
+ g_object_get (self, property, &value, NULL);
+
+ if (value && *value) {
+ GdkClipboard *clipboard = gtk_widget_get_clipboard (GTK_WIDGET (self));
+
+ gdk_clipboard_set_text (clipboard, value);
+
+ adw_toast_overlay_add_toast (ADW_TOAST_OVERLAY (self->toast_overlay),
+ adw_toast_new (_("Copied to clipboard")));
+ }
+
+ g_free (value);
+}
+
+static void
+debug_cb (AdwAboutWindow *self)
+{
+ adw_leaflet_navigate (ADW_LEAFLET (self->leaflet), ADW_NAVIGATION_DIRECTION_FORWARD);
+}
+
+static void
+save_debug_info_response_cb (GtkFileChooser *chooser,
+ GtkResponseType response,
+ AdwAboutWindow *self)
+{
+ gtk_native_dialog_hide (GTK_NATIVE_DIALOG (chooser));
+
+ if (response == GTK_RESPONSE_ACCEPT) {
+ GFile *file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (chooser));
+ GError *error = NULL;
+
+ g_file_replace_contents (file,
+ self->debug_info,
+ strlen (self->debug_info),
+ NULL,
+ FALSE,
+ G_FILE_CREATE_NONE,
+ NULL,
+ NULL,
+ &error);
+
+ if (error) {
+ GtkWidget *dialog = adw_message_dialog_new (GTK_WINDOW (self),
+ _("Unable to save debugging information"),
+ NULL);
+ adw_message_dialog_format_body (ADW_MESSAGE_DIALOG (dialog),
+ "%s", error->message);
+ adw_message_dialog_add_response (ADW_MESSAGE_DIALOG (dialog),
+ "close", _("Close"));
+
+ gtk_window_present (GTK_WINDOW (dialog));
+
+ g_error_free (error);
+ }
+
+ g_object_unref (file);
+ }
+
+ gtk_native_dialog_destroy (GTK_NATIVE_DIALOG (chooser));
+}
+
+static void
+save_debug_info_cb (AdwAboutWindow *self)
+{
+ GtkFileChooserNative *chooser;
+
+ chooser = gtk_file_chooser_native_new (_("Save debugging information"),
+ GTK_WINDOW (self),
+ GTK_FILE_CHOOSER_ACTION_SAVE,
+ _("_Save"),
+ _("_Cancel"));
+
+ if (self->debug_info_filename && *self->debug_info_filename)
+ gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (chooser), self->debug_info_filename);
+
+ gtk_native_dialog_set_modal (GTK_NATIVE_DIALOG (chooser), TRUE);
+
+ g_signal_connect (chooser, "response", G_CALLBACK (save_debug_info_response_cb), self);
+
+ gtk_native_dialog_show (GTK_NATIVE_DIALOG (chooser));
+}
+
+static gboolean
+close_cb (GtkWidget *widget,
+ GVariant *args,
+ gpointer user_data)
+{
+ AdwAboutWindow *self = ADW_ABOUT_WINDOW (widget);
+
+ if (adw_leaflet_navigate (ADW_LEAFLET (self->leaflet), ADW_NAVIGATION_DIRECTION_BACK))
+ return GDK_EVENT_STOP;
+
+ gtk_window_close (GTK_WINDOW (self));
+
+ return GDK_EVENT_STOP;
+}
+
+static gboolean
+save_debug_info_shortcut_cb (GtkWidget *widget,
+ GVariant *args,
+ gpointer user_data)
+{
+ AdwAboutWindow *self = ADW_ABOUT_WINDOW (widget);
+
+ if (adw_leaflet_get_visible_child (ADW_LEAFLET (self->leaflet)) != self->debug_info_page)
+ return GDK_EVENT_PROPAGATE;
+
+ save_debug_info_cb (self);
+
+ return GDK_EVENT_STOP;
+}
+
+static void
+adw_about_window_class_init (AdwAboutWindowClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->finalize = adw_about_window_finalize;
+ object_class->get_property = adw_about_window_get_property;
+ object_class->set_property = adw_about_window_set_property;
+
+ /**
+ * AdwAboutWindow:application-icon: (attributes org.gtk.Property.get=adw_about_window_get_application_icon
org.gtk.Property.set=adw_about_window_set_application_icon)
+ *
+ * The name of the application icon.
+ *
+ * The icon is displayed at the top of the main page.
+ *
+ * Since: 1.2
+ */
+ props[PROP_APPLICATION_ICON] =
+ g_param_spec_string ("application-icon", NULL, NULL,
+ "",
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
+
+ /**
+ * AdwAboutWindow:application-name: (attributes org.gtk.Property.get=adw_about_window_get_application_name
org.gtk.Property.set=adw_about_window_set_application_name)
+ *
+ * The name of the application.
+ *
+ * The name is displayed at the top of the main page.
+ *
+ * Since: 1.2
+ */
+ props[PROP_APPLICATION_NAME] =
+ g_param_spec_string ("application-name", NULL, NULL,
+ "",
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
+
+ /**
+ * AdwAboutWindow:developer-name: (attributes org.gtk.Property.get=adw_about_window_get_developer_name
org.gtk.Property.set=adw_about_window_set_developer_name)
+ *
+ * The developer name.
+ *
+ * The developer name is displayed on the main page, under the application
+ * name.
+ *
+ * If the application is developed by multiple people, the developer name can
+ * be set to values like "AppName team", "AppName developers" or
+ * "The AppName project", and the individual contributors can be listed on the
+ * Credits page, with [property@AboutWindow:developers] and related
+ * properties.
+ *
+ * Since: 1.2
+ */
+ props[PROP_DEVELOPER_NAME] =
+ g_param_spec_string ("developer-name", NULL, NULL,
+ "",
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
+
+ /**
+ * AdwAboutWindow:version: (attributes org.gtk.Property.get=adw_about_window_get_version
org.gtk.Property.set=adw_about_window_set_version)
+ *
+ * The version of the application.
+ *
+ * The version is displayed on the main page.
+ *
+ * If [property@AboutWindow:release-notes-version] is not set, the version
+ * will also be displayed above the release notes on the What's New page.
+ *
+ * Since: 1.2
+ */
+ props[PROP_VERSION] =
+ g_param_spec_string ("version", NULL, NULL,
+ "",
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
+
+ /**
+ * AdwAboutWindow:release-notes-version: (attributes
org.gtk.Property.get=adw_about_window_get_release_notes_version
org.gtk.Property.set=adw_about_window_set_release_notes_version)
+ *
+ * The version described by the application's release notes.
+ *
+ * The release notes version is displayed on the What's New page, above the
+ * release notes.
+ *
+ * If not set, [property@AboutWindow:version] will be used instead.
+ *
+ * For example, an application with the current version 2.0.2 might want to
+ * keep the release notes from 2.0.0, and set the release notes version
+ * accordingly.
+ *
+ * See [property@AboutWindow:release-notes].
+ *
+ * Since: 1.2
+ */
+ props[PROP_RELEASE_NOTES_VERSION] =
+ g_param_spec_string ("release-notes-version", NULL, NULL,
+ "",
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
+
+ /**
+ * AdwAboutWindow:release-notes: (attributes org.gtk.Property.get=adw_about_window_get_release_notes
org.gtk.Property.set=adw_about_window_set_release_notes)
+ *
+ * The release notes of the application.
+ *
+ * Release notes are displayed on the the What's New page.
+ *
+ * Release notes are formatted the same way as
+ * [AppStream
descriptions](https://freedesktop.org/software/appstream/docs/chap-Metadata.html#tag-description).
+ *
+ * The supported formatting options are:
+ *
+ * * Paragraph (`<p>`)
+ * * Ordered list (`<ol>`), with list items (`<li>`)
+ * * Unordered list (`<ul>`), with list items (`<li>`)
+ *
+ * Within paragraphs and list items, emphasis (`<em>`) and inline code
+ * (`<code>`) text styles are supported. The emphasis is rendered in italic,
+ * while inline code is shown in a monospaced font.
+ *
+ * Any text outside paragraphs or list items is ignored.
+ *
+ * Nested lists are not supported.
+ *
+ * `AdwAboutWindow` displays the version above the release notes. If set, the
+ * [property@AboutWindow:release-notes-version] of the property will be used
+ * as the version; otherwise, [property@AboutWindow:version] is used.
+ *
+ * Since: 1.2
+ */
+ props[PROP_RELEASE_NOTES] =
+ g_param_spec_string ("release-notes", NULL, NULL,
+ "",
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
+
+ /**
+ * AdwAboutWindow:comments: (attributes org.gtk.Property.get=adw_about_window_get_comments
org.gtk.Property.set=adw_about_window_set_comments)
+ *
+ * The comments about the application.
+ *
+ * Comments will be shown on the Details page, above links.
+ *
+ * Unlike [property@Gtk.AboutDialog:comments], this string can be long and
+ * detailed. It can also contain links and Pango markup.
+ *
+ * Since: 1.2
+ */
+ props[PROP_COMMENTS] =
+ g_param_spec_string ("comments", NULL, NULL,
+ "",
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
+
+ /**
+ * AdwAboutWindow:website: (attributes org.gtk.Property.get=adw_about_window_get_website
org.gtk.Property.set=adw_about_window_set_website)
+ *
+ * The URL of the application's website.
+ *
+ * Website is displayed on the Details page, below comments, or on the main
+ * page if the Details page doesn't have any other content.
+ *
+ * Applications can add other links below, see [method@AboutWindow.add_link].
+ *
+ * Since: 1.2
+ */
+ props[PROP_WEBSITE] =
+ g_param_spec_string ("website", NULL, NULL,
+ "",
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
+
+ /**
+ * AdwAboutWindow:support-url: (attributes org.gtk.Property.get=adw_about_window_get_support_url
org.gtk.Property.set=adw_about_window_set_support_url)
+ *
+ * The URL of the application's support page.
+ *
+ * The support page link is displayed on the main page.
+ *
+ * Since: 1.2
+ */
+ props[PROP_SUPPORT_URL] =
+ g_param_spec_string ("support-url", NULL, NULL,
+ "",
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
+
+ /**
+ * AdwAboutWindow:issue-url: (attributes org.gtk.Property.get=adw_about_window_get_issue_url
org.gtk.Property.set=adw_about_window_set_issue_url)
+ *
+ * The URL for the application's issue tracker.
+ *
+ * The issue tracker link is displayed on the main page.
+ *
+ * Since: 1.2
+ */
+ props[PROP_ISSUE_URL] =
+ g_param_spec_string ("issue-url", NULL, NULL,
+ "",
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
+
+ /**
+ * AdwAboutWindow:debug-info: (attributes org.gtk.Property.get=adw_about_window_get_debug_info
org.gtk.Property.set=adw_about_window_set_debug_info)
+ *
+ * The debug information.
+ *
+ * Debug information will be shown on the Troubleshooting page. It's intended
+ * to be attached to issue reports when reporting issues against the
+ * application.
+ *
+ * `AdwAboutWindow` provides a quick way to save debug information to a file.
+ * When saving, [property@AboutWindow:debug-info-filename] would be used as
+ * the suggested filename.
+ *
+ * Debug information cannot contain markup or links.
+ *
+ * Since: 1.2
+ */
+ props[PROP_DEBUG_INFO] =
+ g_param_spec_string ("debug-info", NULL, NULL,
+ "",
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
+
+ /**
+ * AdwAboutWindow:debug-info-filename: (attributes
org.gtk.Property.get=adw_about_window_get_debug_info_filename
org.gtk.Property.set=adw_about_window_set_debug_info_filename)
+ *
+ * The debug information filename.
+ *
+ * It will be used as the suggested filename when saving debug information to
+ * a file.
+ *
+ * See [property@AboutWindow:debug-info].
+ *
+ * Since: 1.2
+ */
+ props[PROP_DEBUG_INFO_FILENAME] =
+ g_param_spec_string ("debug-info-filename", NULL, NULL,
+ "",
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
+
+ /**
+ * AdwAboutWindow:developers: (attributes org.gtk.Property.get=adw_about_window_get_developers
org.gtk.Property.set=adw_about_window_set_developers)
+ *
+ * The list of developers of the application.
+ *
+ * It will be displayed on the Credits page.
+ *
+ * Each name may contain email addresses and URLs, see the introduction for
+ * more details.
+ *
+ * See also:
+ *
+ * * [property@AboutWindow:designers]
+ * * [property@AboutWindow:artists]
+ * * [property@AboutWindow:documenters]
+ * * [property@AboutWindow:translator-credits]
+ * * [method@AboutWindow.add_credit_section]
+ * * [method@AboutWindow.add_acknowledgement_section]
+ *
+ * Since: 1.2
+ */
+ props[PROP_DEVELOPERS] =
+ g_param_spec_boxed ("developers", NULL, NULL,
+ G_TYPE_STRV,
+ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+
+ /**
+ * AdwAboutWindow:designers: (attributes org.gtk.Property.get=adw_about_window_get_designers
org.gtk.Property.set=adw_about_window_set_designers)
+ *
+ * The list of designers of the application.
+ *
+ * It will be displayed on the Credits page.
+ *
+ * Each name may contain email addresses and URLs, see the introduction for
+ * more details.
+ *
+ * See also:
+ *
+ * * [property@AboutWindow:developers]
+ * * [property@AboutWindow:artists]
+ * * [property@AboutWindow:documenters]
+ * * [property@AboutWindow:translator-credits]
+ * * [method@AboutWindow.add_credit_section]
+ * * [method@AboutWindow.add_acknowledgement_section]
+ *
+ * Since: 1.2
+ */
+ props[PROP_DESIGNERS] =
+ g_param_spec_boxed ("designers", NULL, NULL,
+ G_TYPE_STRV,
+ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+
+ /**
+ * AdwAboutWindow:artists: (attributes org.gtk.Property.get=adw_about_window_get_artists
org.gtk.Property.set=adw_about_window_set_artists)
+ *
+ * The list of artists of the application.
+ *
+ * It will be displayed on the Credits page.
+ *
+ * Each name may contain email addresses and URLs, see the introduction for
+ * more details.
+ *
+ * See also:
+ *
+ * * [property@AboutWindow:developers]
+ * * [property@AboutWindow:designers]
+ * * [property@AboutWindow:documenters]
+ * * [property@AboutWindow:translator-credits]
+ * * [method@AboutWindow.add_credit_section]
+ * * [method@AboutWindow.add_acknowledgement_section]
+ *
+ * Since: 1.2
+ */
+ props[PROP_ARTISTS] =
+ g_param_spec_boxed ("artists", NULL, NULL,
+ G_TYPE_STRV,
+ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+
+ /**
+ * AdwAboutWindow:documenters: (attributes org.gtk.Property.get=adw_about_window_get_documenters
org.gtk.Property.set=adw_about_window_set_documenters)
+ *
+ * The list of documenters of the application.
+ *
+ * It will be displayed on the Credits page.
+ *
+ * Each name may contain email addresses and URLs, see the introduction for
+ * more details.
+ *
+ * See also:
+ *
+ * * [property@AboutWindow:developers]
+ * * [property@AboutWindow:designers]
+ * * [property@AboutWindow:artists]
+ * * [property@AboutWindow:translator-credits]
+ * * [method@AboutWindow.add_credit_section]
+ * * [method@AboutWindow.add_acknowledgement_section]
+ *
+ * Since: 1.2
+ */
+ props[PROP_DOCUMENTERS] =
+ g_param_spec_boxed ("documenters", NULL, NULL,
+ G_TYPE_STRV,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
+
+ /**
+ * AdwAboutWindow:translator-credits: (attributes
org.gtk.Property.get=adw_about_window_get_translator_credits
org.gtk.Property.set=adw_about_window_set_translator_credits)
+ *
+ * The translator credits string.
+ *
+ * It will be displayed on the Credits page.
+ *
+ * This string should be `"translator-credits"` or `"translator_credits"` and
+ * should be marked as translatable.
+ *
+ * The string may contain email addresses and URLs, see the introduction for
+ * more details.
+ *
+ * See also:
+ *
+ * * [property@AboutWindow:developers]
+ * * [property@AboutWindow:designers]
+ * * [property@AboutWindow:artists]
+ * * [property@AboutWindow:documenters]
+ * * [method@AboutWindow.add_credit_section]
+ * * [method@AboutWindow.add_acknowledgement_section]
+ *
+ * Since: 1.2
+ */
+ props[PROP_TRANSLATOR_CREDITS] =
+ g_param_spec_string ("translator-credits", NULL, NULL,
+ "",
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
+
+ /**
+ * AdwAboutWindow:copyright: (attributes org.gtk.Property.get=adw_about_window_get_copyright
org.gtk.Property.set=adw_about_window_set_copyright)
+ *
+ * The copyright information.
+ *
+ * This should be a short string of one or two lines, for example:
+ * `© 2022 Example`.
+ *
+ * The copyright information will be displayed on the Legal page, above the
+ * application license.
+ *
+ * [method@AboutWindow.add_legal_section] can be used to add copyright
+ * information for the application dependencies or other components.
+ *
+ * Since: 1.2
+ */
+ props[PROP_COPYRIGHT] =
+ g_param_spec_string ("copyright", NULL, NULL,
+ "",
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
+
+ /**
+ * AdwAboutWindow:license-type: (attributes org.gtk.Property.get=adw_about_window_get_license_type
org.gtk.Property.set=adw_about_window_set_license_type)
+ *
+ * The license type.
+ *
+ * Allows to set the application's license froma list of known licenses.
+ *
+ * If the application's license is not in the list,
+ * [property@AboutWindow:license] can be used instead. The license type will
+ * be automatically set to `GTK_LICENSE_CUSTOM` in that case.
+ *
+ * If set to `GTK_LICENSE_UNKNOWN`, no information will be displayed.
+ *
+ * If the license type is different from `GTK_LICENSE_CUSTOM`.
+ * [property@AboutWindow:license] will be cleared out.
+ *
+ * The license description will be displayed on the Legal page, below the
+ * copyright information.
+ *
+ * [method@AboutWindow.add_legal_section] can be used to add license
+ * information for the application dependencies or other components.
+ *
+ * Since: 1.2
+ */
+ props[PROP_LICENSE_TYPE] =
+ g_param_spec_enum ("license-type", NULL, NULL,
+ GTK_TYPE_LICENSE,
+ GTK_LICENSE_UNKNOWN,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
+
+ /**
+ * AdwAboutWindow:license: (attributes org.gtk.Property.get=adw_about_window_get_license
org.gtk.Property.set=adw_about_window_set_license)
+ *
+ * The license text.
+ *
+ * This can be used to set a custom text for the license if it can't be set
+ * via [property@AboutWindow:license-type].
+ *
+ * When set, [property@AboutWindow:license-type] will be set to
+ * `GTK_LICENSE_CUSTOM`.
+ *
+ * The license text will be displayed on the Legal page, below the copyright
+ * information.
+ *
+ * License text can contain Pango markup and links.
+ *
+ * [method@AboutWindow.add_legal_section] can be used to add license
+ * information for the application dependencies or other components.
+ *
+ * Since: 1.2
+ */
+ props[PROP_LICENSE] =
+ g_param_spec_string ("license", NULL, NULL,
+ "",
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
+
+ g_object_class_install_properties (object_class, LAST_PROP, props);
+
+ /**
+ * AdwAboutWindow::activate-link:
+ * @self: an about window
+ * @uri: the URI to activate
+ *
+ * Emitted when a URL is activated.
+ *
+ * Applications may connect to it to override the default behavior, which is
+ * to call [func@Gtk.show_uri].
+ *
+ * Returns: `TRUE` if the link has been activated
+ *
+ * Since: 1.0
+ */
+ signals[SIGNAL_ACTIVATE_LINK] =
+ g_signal_new ("activate-link",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ g_signal_accumulator_true_handled,
+ NULL, NULL,
+ G_TYPE_BOOLEAN,
+ 1,
+ G_TYPE_STRING);
+
+ g_signal_override_class_handler ("activate-link",
+ G_TYPE_FROM_CLASS (klass),
+ G_CALLBACK (activate_link_default_cb));
+
+ gtk_widget_class_set_template_from_resource (widget_class,
+ "/org/gnome/Adwaita/ui/adw-about-window.ui");
+ gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, leaflet);
+ gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, subpage_stack);
+ gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, toast_overlay);
+ gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, website_row);
+ gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, links_group);
+ gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, details_website_row);
+ gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, credits_box);
+ gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, legal_box);
+ gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, acknowledgements_box);
+ gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, debug_info_page);
+ gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, release_notes_buffer);
+
+ gtk_widget_class_bind_template_callback (widget_class, boolean_or);
+ gtk_widget_class_bind_template_callback (widget_class, string_is_not_empty);
+ gtk_widget_class_bind_template_callback (widget_class, get_headerbar_name);
+ gtk_widget_class_bind_template_callback (widget_class, activate_link_cb);
+
+ gtk_widget_class_install_action (widget_class, "about.back", NULL,
+ (GtkWidgetActionActivateFunc) back_cb);
+ gtk_widget_class_install_action (widget_class, "about.subpage", "s",
+ (GtkWidgetActionActivateFunc) subpage_cb);
+ gtk_widget_class_install_action (widget_class, "about.show-url", "s",
+ (GtkWidgetActionActivateFunc) show_url_cb);
+ gtk_widget_class_install_action (widget_class, "about.show-url-property", "s",
+ (GtkWidgetActionActivateFunc) show_url_property_cb);
+ gtk_widget_class_install_action (widget_class, "about.copy-property", "s",
+ (GtkWidgetActionActivateFunc) copy_property_cb);
+ gtk_widget_class_install_action (widget_class, "about.debug", NULL,
+ (GtkWidgetActionActivateFunc) debug_cb);
+ gtk_widget_class_install_action (widget_class, "about.save-debug-info", NULL,
+ (GtkWidgetActionActivateFunc) save_debug_info_cb);
+
+ gtk_widget_class_add_binding (widget_class, GDK_KEY_Escape, 0, close_cb, NULL);
+ gtk_widget_class_add_binding (widget_class, GDK_KEY_S, GDK_CONTROL_MASK,
+ save_debug_info_shortcut_cb, NULL);
+}
+
+static void
+adw_about_window_init (AdwAboutWindow *self)
+{
+ self->application_icon = g_strdup ("");
+ self->application_name = g_strdup ("");
+ self->developer_name = g_strdup ("");
+ self->version = g_strdup ("");
+ self->release_notes_version = g_strdup ("");
+ self->release_notes = g_strdup ("");
+ self->comments = g_strdup ("");
+ self->website = g_strdup ("");
+ self->support_url = g_strdup ("");
+ self->issue_url = g_strdup ("");
+ self->debug_info = g_strdup ("");
+ self->debug_info_filename = g_strdup ("");
+ self->copyright = g_strdup ("");
+ self->license = g_strdup ("");
+
+ gtk_widget_init_template (GTK_WIDGET (self));
+
+ gtk_text_buffer_create_tag (self->release_notes_buffer, "em",
+ "style", PANGO_STYLE_ITALIC,
+ NULL);
+ gtk_text_buffer_create_tag (self->release_notes_buffer, "code",
+ "family", "monospace",
+ NULL);
+ gtk_text_buffer_create_tag (self->release_notes_buffer, "bullet",
+ "font-features", "tnum=1",
+ "left-margin", 24,
+ "pixels-above-lines", 6,
+ NULL);
+ gtk_text_buffer_create_tag (self->release_notes_buffer, "section",
+ "pixels-above-lines", 12,
+ NULL);
+ gtk_text_buffer_create_tag (self->release_notes_buffer, "heading",
+ "weight", PANGO_WEIGHT_BOLD,
+ NULL);
+}
+
+/**
+ * adw_about_window_new:
+ *
+ * Creates a new `AdwAboutWindow`.
+ *
+ * Returns: the newly created `AdwAboutWindow`
+ *
+ * Since: 1.2
+ */
+GtkWidget *
+adw_about_window_new (void)
+{
+ return g_object_new (ADW_TYPE_ABOUT_WINDOW, NULL);
+}
+
+/**
+ * adw_about_window_get_application_icon: (attributes org.gtk.Method.get_property=application-icon)
+ * @self: an about window
+ *
+ * Gets the name of the application icon for @self.
+ *
+ * Returns: the application icon name
+ *
+ * Since: 1.2
+ */
+const char *
+adw_about_window_get_application_icon (AdwAboutWindow *self)
+{
+ g_return_val_if_fail (ADW_IS_ABOUT_WINDOW (self), NULL);
+
+ return self->application_icon;
+}
+
+/**
+ * adw_about_window_set_application_icon: (attributes org.gtk.Method.set_property=application-icon)
+ * @self: an about window
+ * @application_icon: the application icon name
+ *
+ * Sets the name of the application icon for @self.
+ *
+ * The icon is displayed at the top of the main page.
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_set_application_icon (AdwAboutWindow *self,
+ const char *application_icon)
+{
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+ g_return_if_fail (application_icon != NULL);
+
+ if (g_strcmp0 (self->application_icon, application_icon) == 0)
+ return;
+
+ g_free (self->application_icon);
+ self->application_icon = g_strdup (application_icon);
+
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_APPLICATION_ICON]);
+}
+
+/**
+ * adw_about_window_get_application_name: (attributes org.gtk.Method.get_property=application-name)
+ * @self: an about window
+ *
+ * Gets the application name for @self.
+ *
+ * Returns: the application name
+ *
+ * Since: 1.2
+ */
+const char *
+adw_about_window_get_application_name (AdwAboutWindow *self)
+{
+ g_return_val_if_fail (ADW_IS_ABOUT_WINDOW (self), NULL);
+
+ return self->application_name;
+}
+
+/**
+ * adw_about_window_set_application_name: (attributes org.gtk.Method.set_property=application-name)
+ * @self: an about window
+ * @application_name: the application name
+ *
+ * Sets the application name for @self.
+ *
+ * The name is displayed at the top of the main page.
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_set_application_name (AdwAboutWindow *self,
+ const char *application_name)
+{
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+ g_return_if_fail (application_name != NULL);
+
+ if (g_strcmp0 (self->application_name, application_name) == 0)
+ return;
+
+ g_free (self->application_name);
+ self->application_name = g_strdup (application_name);
+
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_APPLICATION_NAME]);
+}
+
+/**
+ * adw_about_window_get_developer_name: (attributes org.gtk.Method.get_property=developer-name)
+ * @self: an about window
+ *
+ * Gets the developer name for @self.
+ *
+ * Returns: the developer_name
+ *
+ * Since: 1.2
+ */
+const char *
+adw_about_window_get_developer_name (AdwAboutWindow *self)
+{
+ g_return_val_if_fail (ADW_IS_ABOUT_WINDOW (self), NULL);
+
+ return self->developer_name;
+}
+
+/**
+ * adw_about_window_set_developer_name: (attributes org.gtk.Method.set_property=developer-name)
+ * @self: an about window
+ * @developer_name: the developer name
+ *
+ * Sets the developer name for @self.
+ *
+ * The developer name is displayed on the main page, under the application name.
+ *
+ * If the application is developed by multiple people, the developer name can be
+ * set to values like "AppName team", "AppName developers" or
+ * "The AppName project", and the individual contributors can be listed on the
+ * Credits page, with [property@AboutWindow:developers] and related properties.
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_set_developer_name (AdwAboutWindow *self,
+ const char *developer_name)
+{
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+ g_return_if_fail (developer_name != NULL);
+
+ if (g_strcmp0 (self->developer_name, developer_name) == 0)
+ return;
+
+ g_free (self->developer_name);
+ self->developer_name = g_strdup (developer_name);
+
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_DEVELOPER_NAME]);
+}
+
+/**
+ * adw_about_window_get_version: (attributes org.gtk.Method.get_property=version)
+ * @self: an about window
+ *
+ * Gets the version for @self.
+ *
+ * Returns: the version
+ *
+ * Since: 1.2
+ */
+const char *
+adw_about_window_get_version (AdwAboutWindow *self)
+{
+ g_return_val_if_fail (ADW_IS_ABOUT_WINDOW (self), NULL);
+
+ return self->version;
+}
+
+/**
+ * adw_about_window_set_version: (attributes org.gtk.Method.set_property=version)
+ * @self: an about window
+ * @version: the version
+ *
+ * Sets the version for @self.
+ *
+ * The version is displayed on the main page.
+ *
+ * If [property@AboutWindow:release-notes-version] is not set, the version will
+ * also be displayed above the release notes on the What's New page.
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_set_version (AdwAboutWindow *self,
+ const char *version)
+{
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+ g_return_if_fail (version != NULL);
+
+ if (g_strcmp0 (self->version, version) == 0)
+ return;
+
+ g_free (self->version);
+ self->version = g_strdup (version);
+
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_VERSION]);
+}
+
+/**
+ * adw_about_window_get_release_notes_version: (attributes org.gtk.Method.get_property=release-notes-version)
+ * @self: an about window
+ *
+ * Gets the version described by the application's release notes.
+ *
+ * Returns: the release notes version
+ *
+ * Since: 1.2
+ */
+const char *
+adw_about_window_get_release_notes_version (AdwAboutWindow *self)
+{
+ g_return_val_if_fail (ADW_IS_ABOUT_WINDOW (self), NULL);
+
+ return self->release_notes_version;
+}
+
+/**
+ * adw_about_window_set_release_notes_version: (attributes org.gtk.Method.set_property=release-notes-version)
+ * @self: an about window
+ * @version: the release notes version
+ *
+ * Sets the version described by the application's release notes.
+ *
+ * The release notes version is displayed on the What's New page, above the
+ * release notes.
+ *
+ * If not set, [property@AboutWindow:version] will be used instead.
+ *
+ * For example, an application with the current version 2.0.2 might want to
+ * keep the release notes from 2.0.0, and set the release notes version
+ * accordingly.
+ *
+ * See [property@AboutWindow:release-notes].
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_set_release_notes_version (AdwAboutWindow *self,
+ const char *version)
+{
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+ g_return_if_fail (version != NULL);
+
+ if (g_strcmp0 (self->release_notes_version, version) == 0)
+ return;
+
+ g_free (self->release_notes_version);
+ self->release_notes_version = g_strdup (version);
+
+ update_release_notes (self);
+
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_RELEASE_NOTES_VERSION]);
+}
+
+/**
+ * adw_about_window_get_release_notes: (attributes org.gtk.Method.get_property=release-notes)
+ * @self: an about window
+ *
+ * Gets the release notes for @self.
+ *
+ * Returns: the release notes
+ *
+ * Since: 1.2
+ */
+const char *
+adw_about_window_get_release_notes (AdwAboutWindow *self)
+{
+ g_return_val_if_fail (ADW_IS_ABOUT_WINDOW (self), NULL);
+
+ return self->release_notes;
+}
+
+/**
+ * adw_about_window_set_release_notes: (attributes org.gtk.Method.set_property=release-notes)
+ * @self: an about window
+ * @release_notes: the release notes
+ *
+ * Sets the release notes for @self.
+ *
+ * Release notes are displayed on the the What's New page.
+ *
+ * Release notes are formatted the same way as
+ * [AppStream
descriptions](https://freedesktop.org/software/appstream/docs/chap-Metadata.html#tag-description).
+ *
+ * The supported formatting options are:
+ *
+ * * Paragraph (`<p>`)
+ * * Ordered list (`<ol>`), with list items (`<li>`)
+ * * Unordered list (`<ul>`), with list items (`<li>`)
+ *
+ * Within paragraphs and list items, emphasis (`<em>`) and inline code
+ * (`<code>`) text styles are supported. The emphasis is rendered in italic,
+ * while inline code is shown in a monospaced font.
+ *
+ * Any text outside paragraphs or list items is ignored.
+ *
+ * Nested lists are not supported.
+ *
+ * `AdwAboutWindow` displays the version above the release notes. If set, the
+ * [property@AboutWindow:release-notes-version] of the property will be used
+ * as the version; otherwise, [property@AboutWindow:version] is used.
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_set_release_notes (AdwAboutWindow *self,
+ const char *release_notes)
+{
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+ g_return_if_fail (release_notes != NULL);
+
+ if (g_strcmp0 (self->release_notes, release_notes) == 0)
+ return;
+
+ g_free (self->release_notes);
+ self->release_notes = g_strdup (release_notes);
+
+ update_release_notes (self);
+
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_RELEASE_NOTES]);
+}
+
+/**
+ * adw_about_window_get_comments: (attributes org.gtk.Method.get_property=comments)
+ * @self: an about window
+ *
+ * Gets the comments about the application.
+ *
+ * Returns: the comments
+ *
+ * Since: 1.2
+ */
+const char *
+adw_about_window_get_comments (AdwAboutWindow *self)
+{
+ g_return_val_if_fail (ADW_IS_ABOUT_WINDOW (self), NULL);
+
+ return self->comments;
+}
+
+/**
+ * adw_about_window_set_comments: (attributes org.gtk.Method.set_property=comments)
+ * @self: an about window
+ * @comments: the comments
+ *
+ * Sets the comments about the application.
+ *
+ * Comments will be shown on the Details page, above links.
+ *
+ * Unlike [property@Gtk.AboutDialog:comments], this string can be long and
+ * detailed. It can also contain links and Pango markup.
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_set_comments (AdwAboutWindow *self,
+ const char *comments)
+{
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+ g_return_if_fail (comments != NULL);
+
+ if (g_strcmp0 (self->comments, comments) == 0)
+ return;
+
+ g_free (self->comments);
+ self->comments = g_strdup (comments);
+
+ update_links (self);
+
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_COMMENTS]);
+}
+
+/**
+ * adw_about_window_get_website: (attributes org.gtk.Method.get_property=website)
+ * @self: an about window
+ *
+ * Gets the application website URL for @self.
+ *
+ * Returns: the website URL
+ *
+ * Since: 1.2
+ */
+const char *
+adw_about_window_get_website (AdwAboutWindow *self)
+{
+ g_return_val_if_fail (ADW_IS_ABOUT_WINDOW (self), NULL);
+
+ return self->website;
+}
+
+/**
+ * adw_about_window_set_website: (attributes org.gtk.Method.set_property=website)
+ * @self: an about window
+ * @website: the website URL
+ *
+ * Sets the application website URL for @self.
+ *
+ * Website is displayed on the Details page, below comments, or on the main page
+ * if the Details page doesn't have any other content.
+ *
+ * Applications can add other links below, see [method@AboutWindow.add_link].
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_set_website (AdwAboutWindow *self,
+ const char *website)
+{
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+ g_return_if_fail (website != NULL);
+
+ if (g_strcmp0 (self->website, website) == 0)
+ return;
+
+ g_free (self->website);
+ self->website = g_strdup (website);
+
+ update_links (self);
+
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_WEBSITE]);
+}
+
+/**
+ * adw_about_window_get_support_url: (attributes org.gtk.Method.get_property=support-url)
+ * @self: an about window
+ *
+ * Gets the URL of the support page for @self.
+ *
+ * Returns: the support page URL
+ *
+ * Since: 1.2
+ */
+const char *
+adw_about_window_get_support_url (AdwAboutWindow *self)
+{
+ g_return_val_if_fail (ADW_IS_ABOUT_WINDOW (self), NULL);
+
+ return self->support_url;
+}
+
+/**
+ * adw_about_window_set_support_url: (attributes org.gtk.Method.set_property=support-url)
+ * @self: an about window
+ * @support_url: the support page URL
+ *
+ * Sets the URL of the support page for @self.
+ *
+ * The support page link is displayed on the main page.
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_set_support_url (AdwAboutWindow *self,
+ const char *support_url)
+{
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+ g_return_if_fail (support_url != NULL);
+
+ if (g_strcmp0 (self->support_url, support_url) == 0)
+ return;
+
+ g_free (self->support_url);
+ self->support_url = g_strdup (support_url);
+
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SUPPORT_URL]);
+}
+
+/**
+ * adw_about_window_get_issue_url: (attributes org.gtk.Method.get_property=issue-url)
+ * @self: an about window
+ *
+ * Gets the issue tracker URL for @self.
+ *
+ * Returns: the issue tracker URL
+ *
+ * Since: 1.2
+ */
+const char *
+adw_about_window_get_issue_url (AdwAboutWindow *self)
+{
+ g_return_val_if_fail (ADW_IS_ABOUT_WINDOW (self), NULL);
+
+ return self->issue_url;
+}
+
+/**
+ * adw_about_window_set_issue_url: (attributes org.gtk.Method.set_property=issue-url)
+ * @self: an about window
+ * @issue_url: the issue tracker URL
+ *
+ * Sets the issue tracker URL for @self.
+ *
+ * The issue tracker link is displayed on the main page.
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_set_issue_url (AdwAboutWindow *self,
+ const char *issue_url)
+{
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+ g_return_if_fail (issue_url != NULL);
+
+ if (g_strcmp0 (self->issue_url, issue_url) == 0)
+ return;
+
+ g_free (self->issue_url);
+ self->issue_url = g_strdup (issue_url);
+
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ISSUE_URL]);
+}
+
+/**
+ * adw_about_window_add_link:
+ * @self: an about window
+ * @title: the link title
+ * @url: the link URL
+ *
+ * Adds an extra link to the Details page.
+ *
+ * Extra links are displayed under the comment and website.
+ *
+ * Underlines in @title will be interpreted as indicating a mnemonic.
+ *
+ * See [property@AboutWindow:website].
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_add_link (AdwAboutWindow *self,
+ const char *title,
+ const char *url)
+{
+ GtkWidget *row;
+
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+ g_return_if_fail (title != NULL);
+ g_return_if_fail (url != NULL);
+
+ row = adw_action_row_new ();
+ adw_preferences_row_set_title (ADW_PREFERENCES_ROW (row), title);
+ adw_preferences_row_set_use_underline (ADW_PREFERENCES_ROW (row), TRUE);
+
+ adw_action_row_add_suffix (ADW_ACTION_ROW (row),
+ gtk_image_new_from_icon_name ("adw-external-link-symbolic"));
+
+ gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (row), TRUE);
+ gtk_actionable_set_action_name (GTK_ACTIONABLE (row), "about.show-url");
+ gtk_actionable_set_action_target (GTK_ACTIONABLE (row), "s", url);
+
+ gtk_widget_set_tooltip_text (row, url);
+
+ adw_preferences_group_add (ADW_PREFERENCES_GROUP (self->links_group), row);
+
+ self->has_custom_links = TRUE;
+
+ update_links (self);
+
+}
+
+/**
+ * adw_about_window_get_debug_info: (attributes org.gtk.Method.get_property=debug-info)
+ * @self: an about window
+ *
+ * Gets the debug information for @self.
+ *
+ * Returns: the debug information
+ *
+ * Since: 1.2
+ */
+const char *
+adw_about_window_get_debug_info (AdwAboutWindow *self)
+{
+ g_return_val_if_fail (ADW_IS_ABOUT_WINDOW (self), NULL);
+
+ return self->debug_info;
+}
+
+/**
+ * adw_about_window_set_debug_info: (attributes org.gtk.Method.set_property=debug-info)
+ * @self: an about window
+ * @debug_info: the debug information
+ *
+ * Sets the debug information for @self.
+ *
+ * Debug information will be shown on the Troubleshooting page. It's intended
+ * to be attached to issue reports when reporting issues against the
+ * application.
+ *
+ * `AdwAboutWindow` provides a quick way to save debug information to a file.
+ * When saving, [property@AboutWindow:debug-info-filename] would be used as
+ * the suggested filename.
+ *
+ * Debug information cannot contain markup or links.
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_set_debug_info (AdwAboutWindow *self,
+ const char *debug_info)
+{
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+ g_return_if_fail (debug_info != NULL);
+
+ if (g_strcmp0 (self->debug_info, debug_info) == 0)
+ return;
+
+ g_free (self->debug_info);
+ self->debug_info = g_strdup (debug_info);
+
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_DEBUG_INFO]);
+}
+
+/**
+ * adw_about_window_get_debug_info_filename: (attributes org.gtk.Method.get_property=debug-info-filename)
+ * @self: an about window
+ *
+ * Gets the debug information filename for @self.
+ *
+ * Returns: the debug information filename
+ *
+ * Since: 1.2
+ */
+const char *
+adw_about_window_get_debug_info_filename (AdwAboutWindow *self)
+{
+ g_return_val_if_fail (ADW_IS_ABOUT_WINDOW (self), NULL);
+
+ return self->debug_info_filename;
+}
+
+/**
+ * adw_about_window_set_debug_info_filename: (attributes org.gtk.Method.set_property=debug-info)
+ * @self: an about window
+ * @filename: the debug info filename
+ *
+ * Sets the debug information filename for @self.
+ *
+ * It will be used as the suggested filename when saving debug information to a
+ * file.
+ *
+ * See [property@AboutWindow:debug-info].
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_set_debug_info_filename (AdwAboutWindow *self,
+ const char *filename)
+{
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+ g_return_if_fail (filename != NULL);
+
+ if (g_strcmp0 (self->debug_info_filename, filename) == 0)
+ return;
+
+ g_free (self->debug_info_filename);
+ self->debug_info_filename = g_strdup (filename);
+
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_DEBUG_INFO_FILENAME]);
+}
+
+/**
+ * adw_about_window_get_developers: (attributes org.gtk.Method.get_property=developers)
+ * @self: an about window
+ *
+ * Gets the list of developers of the application.
+ *
+ * Returns: (nullable) (transfer none) (array zero-terminated=1): The list of developers
+ *
+ * Since: 1.2
+ */
+const char * const *
+adw_about_window_get_developers (AdwAboutWindow *self)
+{
+ g_return_val_if_fail (ADW_IS_ABOUT_WINDOW (self), NULL);
+
+ return (const char * const *) self->developers;
+}
+
+/**
+ * adw_about_window_set_developers: (attributes org.gtk.Method.set_property=developers)
+ * @self: an about window
+ * @developers: (nullable) (transfer none) (array zero-terminated=1): the list of developers
+ *
+ * Sets the list of developers of the application.
+ *
+ * It will be displayed on the Credits page.
+ *
+ * Each name may contain email addresses and URLs, see the introduction for more
+ * details.
+ *
+ * See also:
+ *
+ * * [property@AboutWindow:designers]
+ * * [property@AboutWindow:artists]
+ * * [property@AboutWindow:documenters]
+ * * [property@AboutWindow:translator-credits]
+ * * [method@AboutWindow.add_credit_section]
+ * * [method@AboutWindow.add_acknowledgement_section]
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_set_developers (AdwAboutWindow *self,
+ const char **developers)
+{
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+
+ if ((const char **) self->developers == developers)
+ return;
+
+ g_strfreev (self->developers);
+ self->developers = g_strdupv ((char **) developers);
+
+ update_credits (self);
+
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_DEVELOPERS]);
+}
+
+/**
+ * adw_about_window_get_designers: (attributes org.gtk.Method.get_property=designers)
+ * @self: an about window
+ *
+ * Gets the list of designers of the application.
+ *
+ * Returns: (nullable) (transfer none) (array zero-terminated=1): The list of designers
+ *
+ * Since: 1.2
+ */
+const char * const *
+adw_about_window_get_designers (AdwAboutWindow *self)
+{
+ g_return_val_if_fail (ADW_IS_ABOUT_WINDOW (self), NULL);
+
+ return (const char * const *) self->designers;
+}
+
+/**
+ * adw_about_window_set_designers: (attributes org.gtk.Method.set_property=designers)
+ * @self: an about window
+ * @designers: (nullable) (transfer none) (array zero-terminated=1): the list of designers
+ *
+ * Sets the list of designers of the application.
+ *
+ * It will be displayed on the Credits page.
+ *
+ * Each name may contain email addresses and URLs, see the introduction for more
+ * details.
+ *
+ * See also:
+ *
+ * * [property@AboutWindow:developers]
+ * * [property@AboutWindow:artists]
+ * * [property@AboutWindow:documenters]
+ * * [property@AboutWindow:translator-credits]
+ * * [method@AboutWindow.add_credit_section]
+ * * [method@AboutWindow.add_acknowledgement_section]
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_set_designers (AdwAboutWindow *self,
+ const char **designers)
+{
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+
+ if ((const char **) self->designers == designers)
+ return;
+
+ g_strfreev (self->designers);
+ self->designers = g_strdupv ((char **) designers);
+
+ update_credits (self);
+
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_DESIGNERS]);
+}
+
+/**
+ * adw_about_window_get_artists: (attributes org.gtk.Method.get_property=artists)
+ * @self: an about window
+ *
+ * Gets the list of artists of the application.
+ *
+ * Returns: (nullable) (transfer none) (array zero-terminated=1): The list of artists
+ *
+ * Since: 1.2
+ */
+const char * const *
+adw_about_window_get_artists (AdwAboutWindow *self)
+{
+ g_return_val_if_fail (ADW_IS_ABOUT_WINDOW (self), NULL);
+
+ return (const char * const *) self->artists;
+}
+
+/**
+ * adw_about_window_set_artists: (attributes org.gtk.Method.set_property=artists)
+ * @self: an about window
+ * @artists: (nullable) (transfer none) (array zero-terminated=1): the list of artists
+ *
+ * Sets the list of artists of the application.
+ *
+ * It will be displayed on the Credits page.
+ *
+ * Each name may contain email addresses and URLs, see the introduction for more
+ * details.
+ *
+ * See also:
+ *
+ * * [property@AboutWindow:developers]
+ * * [property@AboutWindow:designers]
+ * * [property@AboutWindow:documenters]
+ * * [property@AboutWindow:translator-credits]
+ * * [method@AboutWindow.add_credit_section]
+ * * [method@AboutWindow.add_acknowledgement_section]
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_set_artists (AdwAboutWindow *self,
+ const char **artists)
+{
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+
+ if ((const char **) self->artists == artists)
+ return;
+
+ g_strfreev (self->artists);
+ self->artists = g_strdupv ((char **) artists);
+
+ update_credits (self);
+
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ARTISTS]);
+}
+
+/**
+ * adw_about_window_get_documenters: (attributes org.gtk.Method.get_property=documenters)
+ * @self: an about window
+ *
+ * Gets the list of documenters of the application.
+ *
+ * Returns: (nullable) (transfer none) (array zero-terminated=1): The list of documenters
+ *
+ * Since: 1.2
+ */
+const char * const *
+adw_about_window_get_documenters (AdwAboutWindow *self)
+{
+ g_return_val_if_fail (ADW_IS_ABOUT_WINDOW (self), NULL);
+
+ return (const char * const *) self->documenters;
+}
+
+/**
+ * adw_about_window_set_documenters: (attributes org.gtk.Method.set_property=documenters)
+ * @self: an about window
+ * @documenters: (nullable) (transfer none) (array zero-terminated=1): the list of documenters
+ *
+ * Sets the list of documenters of the application.
+ *
+ * It will be displayed on the Credits page.
+ *
+ * Each name may contain email addresses and URLs, see the introduction for more
+ * details.
+ *
+ * See also:
+ *
+ * * [property@AboutWindow:developers]
+ * * [property@AboutWindow:designers]
+ * * [property@AboutWindow:artists]
+ * * [property@AboutWindow:translator-credits]
+ * * [method@AboutWindow.add_credit_section]
+ * * [method@AboutWindow.add_acknowledgement_section]
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_set_documenters (AdwAboutWindow *self,
+ const char **documenters)
+{
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+
+ if ((const char **) self->documenters == documenters)
+ return;
+
+ g_strfreev (self->documenters);
+ self->documenters = g_strdupv ((char **) documenters);
+
+ update_credits (self);
+
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_DOCUMENTERS]);
+}
+
+/**
+ * adw_about_window_get_translator_credits: (attributes org.gtk.Method.get_property=translator-credits)
+ * @self: an about window
+ *
+ * Gets the translator credits string.
+ *
+ * Returns: The translator credits string
+ *
+ * Since: 1.2
+ */
+const char *
+adw_about_window_get_translator_credits (AdwAboutWindow *self)
+{
+ g_return_val_if_fail (ADW_IS_ABOUT_WINDOW (self), NULL);
+
+ return self->translator_credits;
+}
+
+/**
+ * adw_about_window_set_translator_credits: (attributes org.gtk.Method.set_property=translator-credits)
+ * @self: an about window
+ * @translator_credits: the translator credits
+ *
+ * Sets the translator credits string.
+ *
+ * It will be displayed on the Credits page.
+ *
+ * This string should be `"translator-credits"` or `"translator_credits"` and
+ * should be marked as translatable.
+ *
+ * The string may contain email addresses and URLs, see the introduction for
+ * more details.
+ *
+ * See also:
+ *
+ * * [property@AboutWindow:developers]
+ * * [property@AboutWindow:designers]
+ * * [property@AboutWindow:artists]
+ * * [property@AboutWindow:documenters]
+ * * [method@AboutWindow.add_credit_section]
+ * * [method@AboutWindow.add_acknowledgement_section]
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_set_translator_credits (AdwAboutWindow *self,
+ const char *translator_credits)
+{
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+ g_return_if_fail (translator_credits != NULL);
+
+ if (self->translator_credits == translator_credits)
+ return;
+
+ g_free (self->translator_credits);
+ self->translator_credits = g_strdup (translator_credits);
+
+ update_credits (self);
+
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TRANSLATOR_CREDITS]);
+}
+
+/**
+ * adw_about_window_add_credit_section:
+ * @self: an about window
+ * @name: (nullable): the section name
+ * @people: (array zero-terminated=1): the list of names
+ *
+ * Adds an extra section to the Credits page.
+ *
+ * Extra sections are displayed below the standard categories.
+ *
+ * Each name may contain email addresses and URLs, see the introduction for more
+ * details.
+ *
+ * See also:
+ *
+ * * [property@AboutWindow:developers]
+ * * [property@AboutWindow:designers]
+ * * [property@AboutWindow:artists]
+ * * [property@AboutWindow:documenters]
+ * * [property@AboutWindow:translator-credits]
+ * * [method@AboutWindow.add_acknowledgement_section]
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_add_credit_section (AdwAboutWindow *self,
+ const char *name,
+ const char **people)
+{
+ CreditsSection *section;
+
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+ g_return_if_fail (people != NULL);
+
+ section = g_new0 (CreditsSection, 1);
+ section->name = g_strdup (name);
+ section->people = g_strdupv ((char **) people);
+
+ self->credit_sections = g_slist_append (self->credit_sections, section);
+
+ update_credits (self);
+}
+
+/**
+ * adw_about_window_add_acknowledgement_section:
+ * @self: an about window
+ * @name: (nullable): the section name
+ * @people: (array zero-terminated=1): the list of names
+ *
+ * Adds a section to the Acknowledgements page.
+ *
+ * This can be used to acknowledge additional people and organizations for their
+ * non-development contributions - for example, backers in a crowdfunded
+ * project.
+ *
+ * Each name may contain email addresses and URLs, see the introduction for more
+ * details.
+ *
+ * See also:
+ *
+ * * [property@AboutWindow:developers]
+ * * [property@AboutWindow:designers]
+ * * [property@AboutWindow:artists]
+ * * [property@AboutWindow:documenters]
+ * * [property@AboutWindow:translator-credits]
+ * * [method@AboutWindow.add_credit_section]
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_add_acknowledgement_section (AdwAboutWindow *self,
+ const char *name,
+ const char **people)
+{
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+ g_return_if_fail (people != NULL);
+
+ add_credits_section (self->acknowledgements_box, name, (char **) people);
+
+ gtk_widget_show (self->acknowledgements_box);
+}
+
+/**
+ * adw_about_window_get_copyright: (attributes org.gtk.Method.get_property=copyright)
+ * @self: an about window
+ *
+ * Gets the copyright information for @self.
+ *
+ * Returns: the copyright information
+ *
+ * Since: 1.2
+ */
+const char *
+adw_about_window_get_copyright (AdwAboutWindow *self)
+{
+ g_return_val_if_fail (ADW_IS_ABOUT_WINDOW (self), NULL);
+
+ return self->copyright;
+}
+
+/**
+ * adw_about_window_set_copyright: (attributes org.gtk.Method.set_property=copyright)
+ * @self: an about window
+ * @copyright: the copyright information
+ *
+ * Sets the copyright information for @self.
+ *
+ * This should be a short string of one or two lines, for example:
+ * `© 2022 Example`.
+ *
+ * The copyright information will be displayed on the Legal page, before the
+ * application license.
+ *
+ * [method@AboutWindow.add_legal_section] can be used to add copyright
+ * information for the application dependencies or other components.
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_set_copyright (AdwAboutWindow *self,
+ const char *copyright)
+{
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+ g_return_if_fail (copyright != NULL);
+
+ if (g_strcmp0 (self->copyright, copyright) == 0)
+ return;
+
+ g_free (self->copyright);
+ self->copyright = g_strdup (copyright);
+
+ update_legal (self);
+
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_COPYRIGHT]);
+}
+
+/**
+ * adw_about_window_get_license_type: (attributes org.gtk.Method.get_property=license-type)
+ * @self: an about window
+ *
+ * Gets the license type for @self.
+ *
+ * Returns: the license type
+ *
+ * Since: 1.2
+ */
+GtkLicense
+adw_about_window_get_license_type (AdwAboutWindow *self)
+{
+ g_return_val_if_fail (ADW_IS_ABOUT_WINDOW (self), GTK_LICENSE_UNKNOWN);
+
+ return self->license_type;
+}
+
+/**
+ * adw_about_window_set_license_type: (attributes org.gtk.Method.set_property=license-type)
+ * @self: an about window
+ * @license_type: the license type
+ *
+ * Sets the license for @self from a list of known licenses.
+ *
+ * If the application's license is not in the list,
+ * [property@AboutWindow:license] can be used instead. The license type will be
+ * automatically set to `GTK_LICENSE_CUSTOM` in that case.
+ *
+ * If @license_type is `GTK_LICENSE_UNKNOWN`, no information will be displayed.
+ *
+ * If @license_type is different from `GTK_LICENSE_CUSTOM`.
+ * [property@AboutWindow:license] will be cleared out.
+ *
+ * The license description will be displayed on the Legal page, below the
+ * copyright information.
+ *
+ * [method@AboutWindow.add_legal_section] can be used to add license information
+ * for the application dependencies or other components.
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_set_license_type (AdwAboutWindow *self,
+ GtkLicense license_type)
+{
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+ g_return_if_fail (license_type >= GTK_LICENSE_UNKNOWN &&
+ license_type < G_N_ELEMENTS (gtk_license_info));
+
+ if (self->license_type == license_type)
+ return;
+
+ if (license_type != GTK_LICENSE_CUSTOM) {
+ g_free (self->license);
+ self->license = g_strdup ("");
+ }
+
+ self->license_type = license_type;
+
+ update_legal (self);
+
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_LICENSE]);
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_LICENSE_TYPE]);
+}
+
+/**
+ * adw_about_window_get_license: (attributes org.gtk.Method.get_property=license)
+ * @self: an about window
+ *
+ * Gets the license for @self.
+ *
+ * Returns: the license
+ *
+ * Since: 1.2
+ */
+const char *
+adw_about_window_get_license (AdwAboutWindow *self)
+{
+ g_return_val_if_fail (ADW_IS_ABOUT_WINDOW (self), NULL);
+
+ return self->license;
+}
+
+/**
+ * adw_about_window_set_license: (attributes org.gtk.Method.set_property=license)
+ * @self: an about window
+ * @license: the license
+ *
+ * Sets the license for @self.
+ *
+ * This can be used to set a custom text for the license if it can't be set via
+ * [property@AboutWindow:license-type].
+ *
+ * When set, [property@AboutWindow:license-type] will be set to
+ * `GTK_LICENSE_CUSTOM`.
+ *
+ * The license text will be displayed on the Legal page, below the copyright
+ * information.
+ *
+ * License text can contain Pango markup and links.
+ *
+ * [method@AboutWindow.add_legal_section] can be used to add license information
+ * for the application dependencies or other components.
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_set_license (AdwAboutWindow *self,
+ const char *license)
+{
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+ g_return_if_fail (license != NULL);
+
+ if (g_strcmp0 (self->license, license) == 0)
+ return;
+
+ g_object_freeze_notify (G_OBJECT (self));
+
+ g_free (self->license);
+ self->license = g_strdup (license);
+ self->license_type = GTK_LICENSE_CUSTOM;
+
+ update_legal (self);
+
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_LICENSE]);
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_LICENSE_TYPE]);
+
+ g_object_thaw_notify (G_OBJECT (self));
+}
+
+/**
+ * adw_about_window_add_legal_section:
+ * @self: an about window
+ * @title: the name of the section
+ * @copyright: (nullable): a copyright string
+ * @license_type: the type of license
+ * @license: (nullable): custom license information
+ *
+ * Adds an extra section to the Legal page.
+ *
+ * Extra sections will be displayed below the application's own information.
+ *
+ * The parameters @copyright, @license_type and @license will be used to present
+ * the it the same way as [property@AboutWindow:copyright],
+ * [property@AboutWindow:license-type] and [property@AboutWindow:license] are
+ * for the application's own information.
+ *
+ * See those properties for more details.
+ *
+ * This can be useful to attribute the application dependencies or data.
+ *
+ * Examples:
+ *
+ * ```c
+ * adw_about_window_add_legal_section (ADW_ABOUT_WINDOW (about),
+ * _("Copyright and a known license"),
+ * "© 2022 Example",
+ * GTK_LICENSE_LGPL_2_1,
+ * NULL);
+ *
+ * adw_about_window_add_legal_section (ADW_ABOUT_WINDOW (about),
+ * _("Copyright and custom license"),
+ * "© 2022 Example",
+ * GTK_LICENSE_CUSTOM,
+ * "Custom license text");
+ *
+ * adw_about_window_add_legal_section (ADW_ABOUT_WINDOW (about),
+ * _("Copyright only"),
+ * "© 2022 Example",
+ * GTK_LICENSE_UNKNOWN,
+ * NULL);
+ *
+ * adw_about_window_add_legal_section (ADW_ABOUT_WINDOW (about),
+ * _("Custom license only"),
+ * NULL,
+ * GTK_LICENSE_CUSTOM,
+ * "Something completely custom here.");
+ * ```
+ *
+ * Since: 1.2
+ */
+void
+adw_about_window_add_legal_section (AdwAboutWindow *self,
+ const char *title,
+ const char *copyright,
+ GtkLicense license_type,
+ const char *license)
+{
+ LegalSection *section;
+
+ g_return_if_fail (ADW_IS_ABOUT_WINDOW (self));
+ g_return_if_fail (title != NULL);
+ g_return_if_fail (license_type >= GTK_LICENSE_UNKNOWN &&
+ license_type < G_N_ELEMENTS (gtk_license_info));
+
+ section = g_new0 (LegalSection, 1);
+ section->title = g_strdup (title);
+ section->copyright = g_strdup (copyright);
+ section->license_type = license_type;
+ section->license = g_strdup (license);
+
+ self->legal_sections = g_slist_append (self->legal_sections, section);
+
+ update_legal (self);
+}
+
+/**
+ * adw_show_about_window:
+ * @parent: (nullable): the parent top-level window
+ * @first_property_name: the name of the first property
+ * @...: value of first property, followed by more pairs of property name and
+ * value, `NULL`-terminated
+ *
+ * A convenience function for showing an application’s about window.
+ */
+void
+adw_show_about_window (GtkWindow *parent,
+ const char *first_property_name,
+ ...)
+{
+ GtkWidget *window;
+ va_list var_args;
+
+ window = adw_about_window_new ();
+
+ va_start (var_args, first_property_name);
+ g_object_set_valist (G_OBJECT (window), first_property_name, var_args);
+ va_end (var_args);
+
+ if (parent)
+ gtk_window_set_transient_for (GTK_WINDOW (window), parent);
+
+ gtk_window_present (GTK_WINDOW (window));
+}
diff --git a/src/adw-about-window.h b/src/adw-about-window.h
new file mode 100644
index 00000000..e6a041d4
--- /dev/null
+++ b/src/adw-about-window.h
@@ -0,0 +1,175 @@
+/*
+ * Copyright (C) 2021-2022 Purism SPC
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#pragma once
+
+#if !defined(_ADWAITA_INSIDE) && !defined(ADWAITA_COMPILATION)
+#error "Only <adwaita.h> can be included directly."
+#endif
+
+#include "adw-version.h"
+
+#include <gtk/gtk.h>
+#include "adw-window.h"
+
+G_BEGIN_DECLS
+
+#define ADW_TYPE_ABOUT_WINDOW (adw_about_window_get_type())
+
+ADW_AVAILABLE_IN_1_2
+G_DECLARE_FINAL_TYPE (AdwAboutWindow, adw_about_window, ADW, ABOUT_WINDOW, AdwWindow)
+
+ADW_AVAILABLE_IN_1_2
+GtkWidget *adw_about_window_new (void) G_GNUC_WARN_UNUSED_RESULT;
+
+ADW_AVAILABLE_IN_1_2
+const char *adw_about_window_get_application_name (AdwAboutWindow *self);
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_set_application_name (AdwAboutWindow *self,
+ const char *application_name);
+
+ADW_AVAILABLE_IN_1_2
+const char *adw_about_window_get_application_icon (AdwAboutWindow *self);
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_set_application_icon (AdwAboutWindow *self,
+ const char *application_icon);
+
+ADW_AVAILABLE_IN_1_2
+const char *adw_about_window_get_developer_name (AdwAboutWindow *self);
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_set_developer_name (AdwAboutWindow *self,
+ const char *developer_name);
+
+ADW_AVAILABLE_IN_1_2
+const char *adw_about_window_get_version (AdwAboutWindow *self);
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_set_version (AdwAboutWindow *self,
+ const char *version);
+
+ADW_AVAILABLE_IN_1_2
+const char *adw_about_window_get_release_notes_version (AdwAboutWindow *self);
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_set_release_notes_version (AdwAboutWindow *self,
+ const char *version);
+
+ADW_AVAILABLE_IN_1_2
+const char *adw_about_window_get_release_notes (AdwAboutWindow *self);
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_set_release_notes (AdwAboutWindow *self,
+ const char *release_notes);
+
+ADW_AVAILABLE_IN_1_2
+const char *adw_about_window_get_comments (AdwAboutWindow *self);
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_set_comments (AdwAboutWindow *self,
+ const char *comments);
+
+ADW_AVAILABLE_IN_1_2
+const char *adw_about_window_get_website (AdwAboutWindow *self);
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_set_website (AdwAboutWindow *self,
+ const char *website);
+
+ADW_AVAILABLE_IN_1_2
+const char *adw_about_window_get_support_url (AdwAboutWindow *self);
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_set_support_url (AdwAboutWindow *self,
+ const char *support_url);
+
+ADW_AVAILABLE_IN_1_2
+const char *adw_about_window_get_issue_url (AdwAboutWindow *self);
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_set_issue_url (AdwAboutWindow *self,
+ const char *issue_url);
+
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_add_link (AdwAboutWindow *self,
+ const char *title,
+ const char *url);
+
+ADW_AVAILABLE_IN_1_2
+const char *adw_about_window_get_debug_info (AdwAboutWindow *self);
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_set_debug_info (AdwAboutWindow *self,
+ const char *debug_info);
+
+ADW_AVAILABLE_IN_1_2
+const char *adw_about_window_get_debug_info_filename (AdwAboutWindow *self);
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_set_debug_info_filename (AdwAboutWindow *self,
+ const char *filename);
+
+ADW_AVAILABLE_IN_1_2
+const char * const *adw_about_window_get_developers (AdwAboutWindow *self);
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_set_developers (AdwAboutWindow *self,
+ const char **developers);
+
+ADW_AVAILABLE_IN_1_2
+const char * const *adw_about_window_get_designers (AdwAboutWindow *self);
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_set_designers (AdwAboutWindow *self,
+ const char **designers);
+
+ADW_AVAILABLE_IN_1_2
+const char * const *adw_about_window_get_artists (AdwAboutWindow *self);
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_set_artists (AdwAboutWindow *self,
+ const char **artists);
+
+ADW_AVAILABLE_IN_1_2
+const char * const *adw_about_window_get_documenters (AdwAboutWindow *self);
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_set_documenters (AdwAboutWindow *self,
+ const char **documenters);
+
+ADW_AVAILABLE_IN_1_2
+const char *adw_about_window_get_translator_credits (AdwAboutWindow *self);
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_set_translator_credits (AdwAboutWindow *self,
+ const char *translator_credits);
+
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_add_credit_section (AdwAboutWindow *self,
+ const char *name,
+ const char **people);
+
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_add_acknowledgement_section (AdwAboutWindow *self,
+ const char *name,
+ const char **people);
+
+ADW_AVAILABLE_IN_1_2
+const char *adw_about_window_get_copyright (AdwAboutWindow *self);
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_set_copyright (AdwAboutWindow *self,
+ const char *copyright);
+
+ADW_AVAILABLE_IN_1_2
+GtkLicense adw_about_window_get_license_type (AdwAboutWindow *self);
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_set_license_type (AdwAboutWindow *self,
+ GtkLicense license_type);
+
+ADW_AVAILABLE_IN_1_2
+const char *adw_about_window_get_license (AdwAboutWindow *self);
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_set_license (AdwAboutWindow *self,
+ const char *license);
+
+ADW_AVAILABLE_IN_1_2
+void adw_about_window_add_legal_section (AdwAboutWindow *self,
+ const char *title,
+ const char *copyright,
+ GtkLicense license_type,
+ const char *license);
+
+ADW_AVAILABLE_IN_1_2
+void adw_show_about_window (GtkWindow *parent,
+ const char *first_property_name,
+ ...);
+
+G_END_DECLS
diff --git a/src/adw-about-window.ui b/src/adw-about-window.ui
new file mode 100644
index 00000000..d3c1ff91
--- /dev/null
+++ b/src/adw-about-window.ui
@@ -0,0 +1,811 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface domain="libadwaita">
+ <requires lib="gtk" version="4.0"/>
+ <template class="AdwAboutWindow" parent="AdwWindow">
+ <property name="title" translatable="yes">About</property>
+ <property name="default-width">360</property>
+ <property name="modal">True</property>
+ <property name="destroy-with-parent">True</property>
+ <style>
+ <class name="about"/>
+ </style>
+ <property name="content">
+ <object class="AdwToastOverlay" id="toast_overlay">
+ <property name="child">
+ <object class="AdwLeaflet" id="leaflet">
+ <property name="can-navigate-back">True</property>
+ <property name="can-unfold">False</property>
+ <property name="width-request">360</property>
+ <child>
+ <object class="GtkOverlay">
+ <property name="child">
+ <object class="GtkScrolledWindow" id="main_scrolled_window">
+ <property name="hscrollbar-policy">never</property>
+ <property name="propagate-natural-width">True</property>
+ <property name="propagate-natural-height">True</property>
+ <property name="max-content-height">600</property>
+ <style>
+ <class name="main-page"/>
+ </style>
+ <property name="child">
+ <object class="AdwClamp">
+ <property name="child">
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkImage">
+ <binding name="visible">
+ <closure function="string_is_not_empty" type="gboolean">
+ <lookup name="application-icon">AdwAboutWindow</lookup>
+ </closure>
+ </binding>
+ <binding name="icon-name">
+ <lookup name="application-icon">AdwAboutWindow</lookup>
+ </binding>
+ <property name="pixel-size">128</property>
+ <style>
+ <class name="icon-dropshadow"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="wrap">True</property>
+ <property name="justify">center</property>
+ <binding name="visible">
+ <closure function="string_is_not_empty" type="gboolean">
+ <lookup name="application-name">AdwAboutWindow</lookup>
+ </closure>
+ </binding>
+ <binding name="label">
+ <lookup name="application-name">AdwAboutWindow</lookup>
+ </binding>
+ <style>
+ <class name="title-1"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="wrap">True</property>
+ <property name="justify">center</property>
+ <binding name="visible">
+ <closure function="string_is_not_empty" type="gboolean">
+ <lookup name="developer-name">AdwAboutWindow</lookup>
+ </closure>
+ </binding>
+ <binding name="label">
+ <lookup name="developer-name">AdwAboutWindow</lookup>
+ </binding>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton">
+ <property name="halign">center</property>
+ <property name="action-name">about.copy-property</property>
+ <property name="action-target">"version"</property>
+ <property name="child">
+ <object class="GtkLabel">
+ <property name="ellipsize">end</property>
+ <binding name="label">
+ <lookup name="version">AdwAboutWindow</lookup>
+ </binding>
+ </object>
+ </property>
+ <binding name="visible">
+ <closure function="string_is_not_empty" type="gboolean">
+ <lookup name="version">AdwAboutWindow</lookup>
+ </closure>
+ </binding>
+ <style>
+ <class name="app-version"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="AdwPreferencesGroup">
+ <binding name="visible">
+ <closure function="boolean_or" type="gboolean">
+ <constant type="gint">3</constant>
+ <lookup name="visible">whats_new_row</lookup>
+ <lookup name="visible">details_row</lookup>
+ <lookup name="visible">website_row</lookup>
+ </closure>
+ </binding>
+ <child>
+ <object class="AdwActionRow" id="whats_new_row">
+ <property name="title" translatable="yes">_What’s New</property>
+ <property name="use-underline">True</property>
+ <property name="activatable">True</property>
+ <property name="action-name">about.subpage</property>
+ <property name="action-target">"whatsnew"</property>
+ <binding name="visible">
+ <closure function="string_is_not_empty" type="gboolean">
+ <lookup name="text">release_notes_buffer</lookup>
+ </closure>
+ </binding>
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">go-next-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="AdwActionRow" id="details_row">
+ <property name="title" translatable="yes">_Details</property>
+ <property name="use-underline">True</property>
+ <property name="activatable">True</property>
+ <property name="action-name">about.subpage</property>
+ <property name="action-target">"details"</property>
+ <binding name="visible">
+ <closure function="boolean_or" type="gboolean">
+ <constant type="gint">2</constant>
+ <lookup name="visible">comments</lookup>
+ <lookup name="visible">links_group</lookup>
+ </closure>
+ </binding>
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">go-next-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="AdwActionRow" id="website_row">
+ <property name="visible">False</property>
+ <property name="title" translatable="yes">_Website</property>
+ <property name="use-underline">True</property>
+ <property name="activatable">True</property>
+ <property name="action-name">about.show-url-property</property>
+ <property name="action-target">"website"</property>
+ <binding name="tooltip-text">
+ <lookup name="website">AdwAboutWindow</lookup>
+ </binding>
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">adw-external-link-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+
+ <child>
+ <object class="AdwPreferencesGroup">
+ <binding name="visible">
+ <closure function="boolean_or" type="gboolean">
+ <constant type="gint">3</constant>
+ <lookup name="visible">support_row</lookup>
+ <lookup name="visible">issue_row</lookup>
+ <lookup name="visible">troubleshooting_row</lookup>
+ </closure>
+ </binding>
+ <child>
+ <object class="AdwActionRow" id="support_row">
+ <property name="activatable">True</property>
+ <property name="title" translatable="yes">_Support
Questions</property>
+ <property name="use-underline">True</property>
+ <property name="action-name">about.show-url-property</property>
+ <property name="action-target">"support-url"</property>
+ <binding name="tooltip-text">
+ <lookup name="support-url">AdwAboutWindow</lookup>
+ </binding>
+ <binding name="visible">
+ <closure function="string_is_not_empty" type="gboolean">
+ <lookup name="support-url">AdwAboutWindow</lookup>
+ </closure>
+ </binding>
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">adw-external-link-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="AdwActionRow" id="issue_row">
+ <property name="activatable">True</property>
+ <property name="title" translatable="yes">_Report an Issue</property>
+ <property name="use-underline">True</property>
+ <property name="action-name">about.show-url-property</property>
+ <property name="action-target">"issue-url"</property>
+ <binding name="tooltip-text">
+ <lookup name="issue-url">AdwAboutWindow</lookup>
+ </binding>
+ <binding name="visible">
+ <closure function="string_is_not_empty" type="gboolean">
+ <lookup name="issue-url">AdwAboutWindow</lookup>
+ </closure>
+ </binding>
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">adw-external-link-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="AdwActionRow" id="troubleshooting_row">
+ <property name="title" translatable="yes">_Troubleshooting</property>
+ <property name="use-underline">True</property>
+ <property name="activatable">True</property>
+ <property name="action-name">about.subpage</property>
+ <property name="action-target">"troubleshooting"</property>
+ <binding name="visible">
+ <closure function="string_is_not_empty" type="gboolean">
+ <lookup name="debug-info">AdwAboutWindow</lookup>
+ </closure>
+ </binding>
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">go-next-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="AdwPreferencesGroup">
+ <binding name="visible">
+ <closure function="boolean_or" type="gboolean">
+ <constant type="gint">3</constant>
+ <lookup name="visible">credits_box</lookup>
+ <lookup name="visible">legal_box</lookup>
+ <lookup name="visible">acknowledgements_box</lookup>
+ </closure>
+ </binding>
+ <child>
+ <object class="AdwActionRow">
+ <property name="title" translatable="yes">_Credits</property>
+ <property name="use-underline">True</property>
+ <property name="activatable">True</property>
+ <property name="action-name">about.subpage</property>
+ <property name="action-target">"credits"</property>
+ <binding name="visible">
+ <lookup name="visible">credits_box</lookup>
+ </binding>
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">go-next-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="AdwActionRow">
+ <property name="title" translatable="yes">_Legal</property>
+ <property name="use-underline">True</property>
+ <property name="activatable">True</property>
+ <property name="action-name">about.subpage</property>
+ <property name="action-target">"legal"</property>
+ <binding name="visible">
+ <lookup name="visible">legal_box</lookup>
+ </binding>
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">go-next-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="AdwActionRow">
+ <property name="title"
translatable="yes">_Acknowledgements</property>
+ <property name="use-underline">True</property>
+ <property name="activatable">True</property>
+ <property name="action-name">about.subpage</property>
+ <property name="action-target">"acknowledgements"</property>
+ <binding name="visible">
+ <lookup name="visible">acknowledgements_box</lookup>
+ </binding>
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">go-next-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </property>
+ </object>
+ </property>
+ <child type="overlay">
+ <object class="GtkStack" id="headerbar_stack">
+ <property name="transition-type">crossfade</property>
+ <property name="transition-duration">150</property>
+ <property name="valign">start</property>
+ <binding name="visible-child-name">
+ <closure function="get_headerbar_name" type="gchararray">
+ <lookup name="value" type="GtkAdjustment">
+ <lookup name="vadjustment">main_scrolled_window</lookup>
+ </lookup>
+ </closure>
+ </binding>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">top</property>
+ <property name="child">
+ <object class="GtkHeaderBar">
+ <property name="title-widget">
+ <object class="AdwWindowTitle">
+ <property name="visible">False</property>
+ </object>
+ </property>
+ <style>
+ <class name="flat"/>
+ </style>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">regular</property>
+ <property name="child">
+ <object class="GtkHeaderBar"/>
+ </property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStack" id="subpage_stack">
+
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">whatsnew</property>
+ <property name="child">
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkHeaderBar">
+ <property name="valign">start</property>
+ <property name="title-widget">
+ <object class="AdwWindowTitle">
+ <property name="title" translatable="yes">What’s New</property>
+ </object>
+ </property>
+ <child>
+ <object class="GtkButton">
+ <property name="tooltip-text" translatable="yes">Back</property>
+ <property name="icon-name">go-previous-symbolic</property>
+ <property name="action-name">about.back</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="hscrollbar-policy">never</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="subpage"/>
+ </style>
+ <property name="child">
+ <object class="AdwClampScrollable">
+ <property name="child">
+ <object class="GtkTextView">
+ <property name="left-margin">12</property>
+ <property name="right-margin">12</property>
+ <property name="top-margin">18</property>
+ <property name="bottom-margin">18</property>
+ <property name="wrap-mode">word-char</property>
+ <property name="editable">False</property>
+ <property name="buffer">
+ <object class="GtkTextBuffer" id="release_notes_buffer">
+ <property name="enable-undo">False</property>
+ </object>
+ </property>
+ </object>
+ </property>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">details</property>
+ <property name="child">
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkHeaderBar">
+ <property name="valign">start</property>
+ <property name="title-widget">
+ <object class="AdwWindowTitle">
+ <property name="title" translatable="yes">Details</property>
+ </object>
+ </property>
+ <child>
+ <object class="GtkButton">
+ <property name="tooltip-text" translatable="yes">Back</property>
+ <property name="icon-name">go-previous-symbolic</property>
+ <property name="action-name">about.back</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="hscrollbar-policy">never</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="subpage"/>
+ </style>
+ <property name="child">
+ <object class="AdwClamp">
+ <property name="child">
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="comments">
+ <property name="use-markup">True</property>
+ <property name="wrap">True</property>
+ <property name="wrap-mode">word-char</property>
+ <property name="xalign">0</property>
+ <binding name="label">
+ <lookup name="comments">AdwAboutWindow</lookup>
+ </binding>
+ <signal name="activate-link" handler="activate_link_cb"
swapped="yes"/>
+ <binding name="visible">
+ <closure function="string_is_not_empty" type="gboolean">
+ <lookup name="comments">AdwAboutWindow</lookup>
+ </closure>
+ </binding>
+ <style>
+ <class name="body"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="AdwPreferencesGroup" id="links_group">
+ <property name="visible">False</property>
+ <child>
+ <object class="AdwActionRow" id="details_website_row">
+ <property name="visible">False</property>
+ <property name="title" translatable="yes">_Website</property>
+ <property name="use-underline">True</property>
+ <property name="activatable">True</property>
+ <property name="action-name">about.show-url-property</property>
+ <property name="action-target">"website"</property>
+ <binding name="tooltip-text">
+ <lookup name="website">AdwAboutWindow</lookup>
+ </binding>
+ <child>
+ <object class="GtkImage">
+ <property
name="icon-name">adw-external-link-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">troubleshooting</property>
+ <property name="child">
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkHeaderBar">
+ <property name="valign">start</property>
+ <property name="title-widget">
+ <object class="AdwWindowTitle">
+ <property name="title" translatable="yes">Troubleshooting</property>
+ </object>
+ </property>
+ <child>
+ <object class="GtkButton">
+ <property name="tooltip-text" translatable="yes">Back</property>
+ <property name="icon-name">go-previous-symbolic</property>
+ <property name="action-name">about.back</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="hscrollbar-policy">never</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="subpage"/>
+ </style>
+ <property name="child">
+ <object class="AdwClamp">
+ <property name="child">
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="wrap">True</property>
+ <property name="wrap-mode">word-char</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">To assist in
troubleshooting, you can view your debugging information. Providing this information to the application
developers can help diagnose any problems you encounter when you report an issue.</property>
+ <signal name="activate-link" handler="activate_link_cb"
swapped="yes"/>
+ <style>
+ <class name="body"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="AdwPreferencesGroup">
+ <child>
+ <object class="AdwActionRow">
+ <property name="title" translatable="yes">_Debugging
Information</property>
+ <property name="use-underline">True</property>
+ <property name="activatable">True</property>
+ <property name="action-name">about.debug</property>
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">go-next-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">credits</property>
+ <property name="child">
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkHeaderBar">
+ <property name="valign">start</property>
+ <property name="title-widget">
+ <object class="AdwWindowTitle">
+ <property name="title" translatable="yes">Credits</property>
+ </object>
+ </property>
+ <child>
+ <object class="GtkButton">
+ <property name="tooltip-text" translatable="yes">Back</property>
+ <property name="icon-name">go-previous-symbolic</property>
+ <property name="action-name">about.back</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="hscrollbar-policy">never</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="subpage"/>
+ </style>
+ <property name="child">
+ <object class="AdwClamp">
+ <property name="child">
+ <object class="GtkBox" id="credits_box">
+ <property name="orientation">vertical</property>
+ <property name="visible">False</property>
+ </object>
+ </property>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">legal</property>
+ <property name="child">
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkHeaderBar">
+ <property name="valign">start</property>
+ <property name="title-widget">
+ <object class="AdwWindowTitle">
+ <property name="title" translatable="yes">Legal</property>
+ </object>
+ </property>
+ <child>
+ <object class="GtkButton">
+ <property name="tooltip-text" translatable="yes">Back</property>
+ <property name="icon-name">go-previous-symbolic</property>
+ <property name="action-name">about.back</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="hscrollbar-policy">never</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="subpage"/>
+ </style>
+ <property name="child">
+ <object class="AdwClamp">
+ <property name="child">
+ <object class="GtkBox" id="legal_box">
+ <property name="orientation">vertical</property>
+ <property name="visible">False</property>
+ </object>
+ </property>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">acknowledgements</property>
+ <property name="child">
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkHeaderBar">
+ <property name="valign">start</property>
+ <property name="title-widget">
+ <object class="AdwWindowTitle">
+ <property name="title" translatable="yes">Acknowledgements</property>
+ </object>
+ </property>
+ <child>
+ <object class="GtkButton">
+ <property name="tooltip-text" translatable="yes">Back</property>
+ <property name="icon-name">go-previous-symbolic</property>
+ <property name="action-name">about.back</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="hscrollbar-policy">never</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="subpage"/>
+ </style>
+ <property name="child">
+ <object class="AdwClamp">
+ <property name="child">
+ <object class="GtkBox" id="acknowledgements_box">
+ <property name="orientation">vertical</property>
+ <property name="visible">False</property>
+ </object>
+ </property>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkBox" id="debug_info_page">
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkHeaderBar">
+ <property name="valign">start</property>
+ <property name="title-widget">
+ <object class="AdwWindowTitle">
+ <property name="title" translatable="yes">Debugging Information</property>
+ </object>
+ </property>
+ <child>
+ <object class="GtkButton">
+ <property name="tooltip-text" translatable="yes">Back</property>
+ <property name="icon-name">go-previous-symbolic</property>
+ <property name="action-name">about.back</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="hscrollbar-policy">never</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="subpage"/>
+ </style>
+ <property name="child">
+ <object class="AdwClampScrollable">
+ <property name="child">
+ <object class="GtkTextView">
+ <property name="left-margin">12</property>
+ <property name="right-margin">12</property>
+ <property name="top-margin">18</property>
+ <property name="bottom-margin">18</property>
+ <property name="wrap-mode">word-char</property>
+ <property name="editable">False</property>
+ <property name="buffer">
+ <object class="GtkTextBuffer" id="debug_info_buffer">
+ <property name="enable-undo">False</property>
+ <property name="text" bind-source="AdwAboutWindow"
bind-property="debug-info" bind-flags="sync-create"/>
+ </object>
+ </property>
+ </object>
+ </property>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkActionBar">
+ <property name="revealed">True</property>
+ <child>
+ <object class="GtkButton">
+ <property name="action-name">about.copy-property</property>
+ <property name="action-target">"debug-info"</property>
+ <property name="label" translatable="yes">_Copy Text</property>
+ <property name="use-underline">True</property>
+ </object>
+ </child>
+ <child type="end">
+ <object class="GtkButton">
+ <property name="action-name">about.save-debug-info</property>
+ <property name="label" translatable="yes">_Save as…</property>
+ <property name="use-underline">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+
+ </object>
+ </property>
+ </object>
+ </property>
+ </template>
+</interface>
diff --git a/src/adwaita.gresources.xml b/src/adwaita.gresources.xml
index da724d86..58a0d7c4 100644
--- a/src/adwaita.gresources.xml
+++ b/src/adwaita.gresources.xml
@@ -4,11 +4,14 @@
<file>glsl/fade.glsl</file>
<file>glsl/mask.glsl</file>
<file preprocess="xml-stripblanks">icons/scalable/actions/adw-entry-apply-symbolic.svg</file>
+ <file preprocess="xml-stripblanks">icons/scalable/actions/adw-external-link-symbolic.svg</file>
<file preprocess="xml-stripblanks">icons/scalable/actions/adw-expander-arrow-symbolic.svg</file>
+ <file preprocess="xml-stripblanks">icons/scalable/actions/adw-mail-send-symbolic.svg</file>
<file preprocess="xml-stripblanks">icons/scalable/status/avatar-default-symbolic.svg</file>
<file preprocess="xml-stripblanks">icons/scalable/status/adw-tab-icon-missing-symbolic.svg</file>
</gresource>
<gresource prefix="/org/gnome/Adwaita/ui">
+ <file preprocess="xml-stripblanks">adw-about-window.ui</file>
<file preprocess="xml-stripblanks">adw-action-row.ui</file>
<file preprocess="xml-stripblanks">adw-combo-row.ui</file>
<file preprocess="xml-stripblanks">adw-entry-row.ui</file>
diff --git a/src/adwaita.h b/src/adwaita.h
index a2fda744..509a9740 100644
--- a/src/adwaita.h
+++ b/src/adwaita.h
@@ -21,6 +21,7 @@ G_BEGIN_DECLS
#define _ADWAITA_INSIDE
#include "adw-version.h"
+#include "adw-about-window.h"
#include "adw-action-row.h"
#include "adw-animation.h"
#include "adw-animation-target.h"
diff --git a/src/icons/scalable/actions/adw-external-link-symbolic.svg
b/src/icons/scalable/actions/adw-external-link-symbolic.svg
new file mode 100644
index 00000000..549d0f12
--- /dev/null
+++ b/src/icons/scalable/actions/adw-external-link-symbolic.svg
@@ -0,0 +1 @@
+<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M3 2C1.34 2 0 3.34 0 5v8c0 1.66 1.34
3 3 3h8c1.66 0 3-1.34 3-3V9c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .555-.445 1-1 1H3c-.555
0-1-.445-1-1V5c0-.555.445-1 1-1h4c.55 0 1-.45 1-1s-.45-1-1-1zm7-2c-.55 0-1 .45-1 1s.45 1 1 1h2.586L7.293
7.29c-.39.394-.39 1.026 0 1.417s1.023.39 1.414 0L14 3.414V6c0 .55.45 1 1 1s1-.45 1-1V1a.976.976 0 0
0-.035-.258.884.884 0 0 0-.102-.242.994.994 0 0 0-.156-.207L15.66.258a.863.863 0 0 0-.297-.176.73.73 0 0
0-.156-.05c-.039-.012-.082-.016-.121-.02C15.055.004 15.027.004 15 0zm0 0" fill="#222"/></svg>
\ No newline at end of file
diff --git a/src/icons/scalable/actions/adw-mail-send-symbolic.svg
b/src/icons/scalable/actions/adw-mail-send-symbolic.svg
new file mode 100644
index 00000000..932bd11c
--- /dev/null
+++ b/src/icons/scalable/actions/adw-mail-send-symbolic.svg
@@ -0,0 +1 @@
+<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 0a.993.993 0 0 0-.707.293l-1.25
1.25-1.762 1.73c-.191.2-.281.442-.281.75 0 .977 1 1 1 1 .258 0 .527-.128.719-.312L7 3.43V7s0 1 1 1 1-1
1-1V3.43l1.281 1.28c.192.185.41.313.719.313 0 0 1-.023 1-1
0-.308-.09-.55-.281-.75l-1.762-1.73-1.25-1.25A.993.993 0 0 0 8 0zM3 9c-1.645 0-3 1.355-3 3v4h2v-3.8l4.613
3.077a2.505 2.505 0 0 0 2.774 0L14 12.2V16h2v-4c0-1.645-1.355-3-3-3zm.8 2h8.4l-3.923 2.613a.495.495 0 0
1-.554 0zm0 0" fill="#2e3436"/></svg>
\ No newline at end of file
diff --git a/src/meson.build b/src/meson.build
index eb2d9041..b2c47498 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -81,6 +81,7 @@ libadwaita_private_sources += adw_private_enums
libadwaita_generated_headers += [adw_public_enums[1]]
src_headers = [
+ 'adw-about-window.h',
'adw-action-row.h',
'adw-animation.h',
'adw-animation-target.h',
@@ -145,6 +146,7 @@ libadwaita_init_public_types = custom_target('adw-public-types.c',
)
src_sources = [
+ 'adw-about-window.c',
'adw-action-row.c',
'adw-animation.c',
'adw-animation-target.c',
diff --git a/src/stylesheet/widgets/_misc.scss b/src/stylesheet/widgets/_misc.scss
index 6c4ff1f7..3d35a672 100644
--- a/src/stylesheet/widgets/_misc.scss
+++ b/src/stylesheet/widgets/_misc.scss
@@ -96,6 +96,52 @@ statusbar {
padding: 6px 10px 6px 10px;
}
+/******************
+ * AdwAboutWindow *
+ ******************/
+
+window.about {
+ .main-page {
+ scrollbar.vertical {
+ // Keep in sync with header bar height
+ margin-top: 47px;
+ background: none;
+ box-shadow: none;
+ }
+
+ > viewport > clamp > box {
+ margin: 12px;
+ margin-top: 59px; // 12px + 47px
+ border-spacing: 6px;
+
+ > box {
+ margin-top: 18px;
+ border-spacing: 18px;
+ margin-bottom: 6px;
+ }
+ }
+
+ .app-version {
+ padding: 3px 18px;
+ color: $accent_color;
+ border-radius: 999px;
+ margin-top: 3px;
+ }
+ }
+
+ .subpage {
+ > viewport > clamp > box {
+ margin: 18px 12px;
+ border-spacing: 18px;
+ }
+
+ > clamp > textview {
+ background: none;
+ color: inherit;
+ }
+ }
+}
+
/*****************
* AdwStatusPage *
*****************/
diff --git a/tests/meson.build b/tests/meson.build
index b2a660e5..2f17a06c 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -24,6 +24,7 @@ if cc.get_argument_syntax() != 'msvc'
endif
test_names = [
+ 'test-about-window',
'test-action-row',
'test-animation',
'test-animation-target',
diff --git a/tests/test-about-window.c b/tests/test-about-window.c
new file mode 100644
index 00000000..f9c8f6b7
--- /dev/null
+++ b/tests/test-about-window.c
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2022 Purism SPC
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ *
+ * Author: Alexander Mikhaylenko <alexander mikhaylenko puri sm>
+ */
+
+#include <adwaita.h>
+
+static void
+test_adw_about_window_create (void)
+{
+ AdwAboutWindow *window = ADW_ABOUT_WINDOW (adw_about_window_new ());
+
+ const char *developers[] = {
+ "Angela Avery",
+ NULL
+ };
+
+ const char *designers[] = {
+ "GNOME Design Team",
+ NULL
+ };
+
+ const char *artists[] = {
+ "GNOME Design Team",
+ NULL
+ };
+
+ const char *documenters[] = {
+ "Angela Avery",
+ NULL
+ };
+
+ const char *credits[] = {
+ "Angela Avery",
+ NULL
+ };
+
+ const char *acknowledgements[] = {
+ "Angela Avery",
+ NULL
+ };
+
+ g_assert_nonnull (window);
+
+ g_object_set (G_OBJECT (window),
+ "application-name", "Example",
+ "application-icon", "org.gnome.Example",
+ "developer-name", "Angela Avery",
+ "version", "1.2.3",
+ "release-notes-version", "1.2.0",
+ "release-notes", "<p>Example</p>",
+ "comments", "Comments",
+ "website", "https://example.org",
+ "issue-url", "https://example.org",
+ "support-url", "https://example.org",
+ "debug-info", "Debug",
+ "debug-info-filename", "debug.txt",
+ "developers", developers,
+ "designers", designers,
+ "artists", artists,
+ "documenters", documenters,
+ "translator-credits", "translator-credits",
+ "copyright", "© 2022 Angela Avery",
+ "license-type", GTK_LICENSE_GPL_3_0,
+ NULL);
+
+ g_assert_cmpstr (adw_about_window_get_application_name (window), ==, "Example");
+ g_assert_cmpstr (adw_about_window_get_application_icon (window), ==, "org.gnome.Example");
+ g_assert_cmpstr (adw_about_window_get_developer_name (window), ==, "Angela Avery");
+ g_assert_cmpstr (adw_about_window_get_version (window), ==, "1.2.3");
+ g_assert_cmpstr (adw_about_window_get_release_notes_version (window), ==, "1.2.0");
+ g_assert_cmpstr (adw_about_window_get_release_notes (window), ==, "<p>Example</p>");
+ g_assert_cmpstr (adw_about_window_get_comments (window), ==, "Comments");
+ g_assert_cmpstr (adw_about_window_get_website (window), ==, "https://example.org");
+ g_assert_cmpstr (adw_about_window_get_issue_url (window), ==, "https://example.org");
+ g_assert_cmpstr (adw_about_window_get_support_url (window), ==, "https://example.org");
+ g_assert_cmpstr (adw_about_window_get_debug_info (window), ==, "Debug");
+ g_assert_cmpstr (adw_about_window_get_debug_info_filename (window), ==, "debug.txt");
+ g_assert_cmpstrv (adw_about_window_get_developers (window), developers);
+ g_assert_cmpstrv (adw_about_window_get_designers (window), designers);
+ g_assert_cmpstrv (adw_about_window_get_artists (window), artists);
+ g_assert_cmpstrv (adw_about_window_get_documenters (window), documenters);
+ g_assert_cmpstr (adw_about_window_get_translator_credits (window), ==, "translator-credits");
+ g_assert_cmpstr (adw_about_window_get_copyright (window), ==, "© 2022 Angela Avery");
+ g_assert_cmpuint (adw_about_window_get_license_type (window), ==, GTK_LICENSE_GPL_3_0);
+
+ adw_about_window_add_link (window, "Example", "https://example.org");
+ adw_about_window_add_credit_section (window, "Example", credits);
+ adw_about_window_add_acknowledgement_section (window, "Example", acknowledgements);
+ adw_about_window_add_legal_section (window, "Example", "© 2022 Example", GTK_LICENSE_GPL_3_0, NULL);
+ adw_about_window_add_legal_section (window, "Example", "© 2022 Example", GTK_LICENSE_CUSTOM, "License");
+
+ g_assert_finalize_object (window);
+}
+
+int
+main (int argc,
+ char *argv[])
+{
+ gtk_test_init (&argc, &argv, NULL);
+ adw_init ();
+
+ g_test_add_func ("/Adwaita/AboutWindow/create", test_adw_about_window_create);
+
+ return g_test_run ();
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]