You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2025/08/07 16:54:14 UTC
(plc4x-extras) branch develop updated: chore: Merged back changes from the release branch.
This is an automated email from the ASF dual-hosted git repository.
cdutz pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x-extras.git
The following commit(s) were added to refs/heads/develop by this push:
new 2f2b34b chore: Merged back changes from the release branch.
2f2b34b is described below
commit 2f2b34b58963b7d9a0e717b48c5184486937d11d
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Thu Aug 7 18:53:34 2025 +0200
chore: Merged back changes from the release branch.
---
.mvn/wrapper/MavenWrapperDownloader.java | 117 --
.mvn/wrapper/maven-wrapper.jar | Bin 62547 -> 0 bytes
.mvn/wrapper/maven-wrapper.properties | 6 +-
mvnw | 457 +++---
mvnw.cmd | 287 ++--
plc4j/tools/pom.xml | 10 -
plc4j/tools/ui/application/pom.xml | 179 ---
.../java/tools/ui/Plc4xUiBackendApplication.java | 34 -
.../src/main/resources/application-dev.properties | 18 -
.../src/main/resources/application.properties | 31 -
.../ui/application/src/main/resources/logback.xml | 39 -
.../tools/ui/Plc4xUiBackendApplicationTests.java | 34 -
.../src/test/resources/application-test.properties | 19 -
plc4j/tools/ui/backend/pom.xml | 144 --
.../tools/ui/configuration/Plc4xConfiguration.java | 34 -
.../tools/ui/configuration/WebSocketConfig.java | 43 -
.../java/tools/ui/controller/DeviceController.java | 64 -
.../java/tools/ui/controller/DriverController.java | 51 -
.../plc4x/java/tools/ui/event/DeviceEvent.java | 30 -
.../plc4x/java/tools/ui/event/EventType.java | 28 -
.../java/tools/ui/event/UiApplicationEvent.java | 42 -
.../java/tools/ui/handler/WebSocketHandler.java | 107 --
.../java/tools/ui/model/ConfigurationOption.java | 52 -
.../apache/plc4x/java/tools/ui/model/Device.java | 109 --
.../apache/plc4x/java/tools/ui/model/Driver.java | 49 -
.../plc4x/java/tools/ui/model/Transport.java | 49 -
.../java/tools/ui/repository/DeviceRepository.java | 30 -
.../plc4x/java/tools/ui/service/DeviceService.java | 82 --
.../plc4x/java/tools/ui/service/DriverService.java | 119 --
plc4j/tools/ui/backend/ws.html | 36 -
plc4j/tools/ui/frontend/pom.xml | 212 ---
plc4j/tools/ui/frontend/project/.eslintrc.cjs | 37 -
plc4j/tools/ui/frontend/project/.gitignore | 26 -
plc4j/tools/ui/frontend/project/README.md | 49 -
plc4j/tools/ui/frontend/project/index.html | 32 -
plc4j/tools/ui/frontend/project/package.json | 51 -
.../ui/frontend/project/public/plc4x-favicon.png | Bin 6065 -> 0 bytes
plc4j/tools/ui/frontend/project/src/App.css | 19 -
plc4j/tools/ui/frontend/project/src/App.tsx | 106 --
.../ui/frontend/project/src/assets/plc4x-logo.svg | 1494 --------------------
.../tools/ui/frontend/project/src/assets/react.svg | 23 -
.../project/src/components/DeviceDialog.tsx | 184 ---
.../project/src/components/NavigationTree.tsx | 221 ---
.../project/src/components/PlcConnection.tsx | 45 -
.../src/generated/plc4j-tools-ui-frontend.ts | 209 ---
plc4j/tools/ui/frontend/project/src/index.css | 102 --
.../ui/frontend/project/src/layouts/MainLayout.tsx | 73 -
plc4j/tools/ui/frontend/project/src/main.tsx | 37 -
.../ui/frontend/project/src/model/TreeItemData.ts | 37 -
.../tools/ui/frontend/project/src/pages/About.tsx | 24 -
.../ui/frontend/project/src/pages/Inspect.tsx | 140 --
plc4j/tools/ui/frontend/project/src/pages/Mqtt.tsx | 24 -
.../tools/ui/frontend/project/src/pages/OpcUa.tsx | 24 -
.../ui/frontend/project/src/pages/Settings.tsx | 24 -
plc4j/tools/ui/frontend/project/src/store/index.ts | 91 --
.../tools/ui/frontend/project/src/utils/Counter.ts | 28 -
plc4j/tools/ui/frontend/project/src/vite-env.d.ts | 20 -
plc4j/tools/ui/frontend/project/tsconfig.json | 25 -
plc4j/tools/ui/frontend/project/tsconfig.node.json | 10 -
plc4j/tools/ui/frontend/project/vite.config.ts | 26 -
plc4j/tools/ui/plc4j-tools-ui.iml | 8 -
plc4j/tools/ui/pom.xml | 120 --
62 files changed, 327 insertions(+), 5494 deletions(-)
diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java
deleted file mode 100644
index e76d1f3..0000000
--- a/.mvn/wrapper/MavenWrapperDownloader.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright 2007-present the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import java.net.*;
-import java.io.*;
-import java.nio.channels.*;
-import java.util.Properties;
-
-public class MavenWrapperDownloader {
-
- private static final String WRAPPER_VERSION = "0.5.6";
- /**
- * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
- */
- private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
- + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
-
- /**
- * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
- * use instead of the default one.
- */
- private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
- ".mvn/wrapper/maven-wrapper.properties";
-
- /**
- * Path where the maven-wrapper.jar will be saved to.
- */
- private static final String MAVEN_WRAPPER_JAR_PATH =
- ".mvn/wrapper/maven-wrapper.jar";
-
- /**
- * Name of the property which should be used to override the default download url for the wrapper.
- */
- private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
-
- public static void main(String args[]) {
- System.out.println("- Downloader started");
- File baseDirectory = new File(args[0]);
- System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
-
- // If the maven-wrapper.properties exists, read it and check if it contains a custom
- // wrapperUrl parameter.
- File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
- String url = DEFAULT_DOWNLOAD_URL;
- if(mavenWrapperPropertyFile.exists()) {
- FileInputStream mavenWrapperPropertyFileInputStream = null;
- try {
- mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
- Properties mavenWrapperProperties = new Properties();
- mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
- url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
- } catch (IOException e) {
- System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
- } finally {
- try {
- if(mavenWrapperPropertyFileInputStream != null) {
- mavenWrapperPropertyFileInputStream.close();
- }
- } catch (IOException e) {
- // Ignore ...
- }
- }
- }
- System.out.println("- Downloading from: " + url);
-
- File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
- if(!outputFile.getParentFile().exists()) {
- if(!outputFile.getParentFile().mkdirs()) {
- System.out.println(
- "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
- }
- }
- System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
- try {
- downloadFileFromURL(url, outputFile);
- System.out.println("Done");
- System.exit(0);
- } catch (Throwable e) {
- System.out.println("- Error downloading");
- e.printStackTrace();
- System.exit(1);
- }
- }
-
- private static void downloadFileFromURL(String urlString, File destination) throws Exception {
- if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
- String username = System.getenv("MVNW_USERNAME");
- char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
- Authenticator.setDefault(new Authenticator() {
- @Override
- protected PasswordAuthentication getPasswordAuthentication() {
- return new PasswordAuthentication(username, password);
- }
- });
- }
- URL website = new URL(urlString);
- ReadableByteChannel rbc;
- rbc = Channels.newChannel(website.openStream());
- FileOutputStream fos = new FileOutputStream(destination);
- fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
- fos.close();
- rbc.close();
- }
-
-}
diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar
deleted file mode 100644
index cb28b0e..0000000
Binary files a/.mvn/wrapper/maven-wrapper.jar and /dev/null differ
diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties
index 533b8a3..3590e0c 100644
--- a/.mvn/wrapper/maven-wrapper.properties
+++ b/.mvn/wrapper/maven-wrapper.properties
@@ -15,6 +15,6 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-#
-distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.5/apache-maven-3.9.5-bin.zip
-wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar
+wrapperVersion=3.3.2
+distributionType=only-script
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.11/apache-maven-3.9.11-bin.zip
diff --git a/mvnw b/mvnw
index 8a8fb22..d7c358e 100755
--- a/mvnw
+++ b/mvnw
@@ -19,298 +19,241 @@
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
-# Maven Start Up Batch script
-#
-# Required ENV vars:
-# ------------------
-# JAVA_HOME - location of a JDK home dir
+# Apache Maven Wrapper startup batch script, version 3.3.2
#
# Optional ENV vars
# -----------------
-# M2_HOME - location of maven2's installed home dir
-# MAVEN_OPTS - parameters passed to the Java VM when running Maven
-# e.g. to debug Maven itself, use
-# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# JAVA_HOME - location of a JDK home dir, required when download maven via java source
+# MVNW_REPOURL - repo url base for downloading maven distribution
+# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
+# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
# ----------------------------------------------------------------------------
-if [ -z "$MAVEN_SKIP_RC" ] ; then
-
- if [ -f /usr/local/etc/mavenrc ] ; then
- . /usr/local/etc/mavenrc
- fi
-
- if [ -f /etc/mavenrc ] ; then
- . /etc/mavenrc
- fi
+set -euf
+[ "${MVNW_VERBOSE-}" != debug ] || set -x
- if [ -f "$HOME/.mavenrc" ] ; then
- . "$HOME/.mavenrc"
- fi
+# OS specific support.
+native_path() { printf %s\\n "$1"; }
+case "$(uname)" in
+CYGWIN* | MINGW*)
+ [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")"
+ native_path() { cygpath --path --windows "$1"; }
+ ;;
+esac
-fi
+# set JAVACMD and JAVACCMD
+set_java_home() {
+ # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
+ if [ -n "${JAVA_HOME-}" ]; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ]; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ JAVACCMD="$JAVA_HOME/jre/sh/javac"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ JAVACCMD="$JAVA_HOME/bin/javac"
-# OS specific support. $var _must_ be set to either true or false.
-cygwin=false;
-darwin=false;
-mingw=false
-case "`uname`" in
- CYGWIN*) cygwin=true ;;
- MINGW*) mingw=true;;
- Darwin*) darwin=true
- # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
- # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
- if [ -z "$JAVA_HOME" ]; then
- if [ -x "/usr/libexec/java_home" ]; then
- export JAVA_HOME="`/usr/libexec/java_home`"
- else
- export JAVA_HOME="/Library/Java/Home"
+ if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then
+ echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2
+ echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2
+ return 1
fi
fi
- ;;
-esac
-
-if [ -z "$JAVA_HOME" ] ; then
- if [ -r /etc/gentoo-release ] ; then
- JAVA_HOME=`java-config --jre-home`
+ else
+ JAVACMD="$(
+ 'set' +e
+ 'unset' -f command 2>/dev/null
+ 'command' -v java
+ )" || :
+ JAVACCMD="$(
+ 'set' +e
+ 'unset' -f command 2>/dev/null
+ 'command' -v javac
+ )" || :
+
+ if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then
+ echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2
+ return 1
+ fi
fi
-fi
-
-if [ -z "$M2_HOME" ] ; then
- ## resolve links - $0 may be a link to maven's home
- PRG="$0"
+}
- # need this for relative symlinks
- while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG="`dirname "$PRG"`/$link"
- fi
+# hash string like Java String::hashCode
+hash_string() {
+ str="${1:-}" h=0
+ while [ -n "$str" ]; do
+ char="${str%"${str#?}"}"
+ h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296))
+ str="${str#?}"
done
+ printf %x\\n $h
+}
- saveddir=`pwd`
+verbose() { :; }
+[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; }
- M2_HOME=`dirname "$PRG"`/..
+die() {
+ printf %s\\n "$1" >&2
+ exit 1
+}
- # make it fully qualified
- M2_HOME=`cd "$M2_HOME" && pwd`
+trim() {
+ # MWRAPPER-139:
+ # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds.
+ # Needed for removing poorly interpreted newline sequences when running in more
+ # exotic environments such as mingw bash on Windows.
+ printf "%s" "${1}" | tr -d '[:space:]'
+}
- cd "$saveddir"
- # echo Using m2 at $M2_HOME
-fi
+# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
+while IFS="=" read -r key value; do
+ case "${key-}" in
+ distributionUrl) distributionUrl=$(trim "${value-}") ;;
+ distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;;
+ esac
+done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties"
+[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties"
+
+case "${distributionUrl##*/}" in
+maven-mvnd-*bin.*)
+ MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/
+ case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in
+ *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;;
+ :Darwin*x86_64) distributionPlatform=darwin-amd64 ;;
+ :Darwin*arm64) distributionPlatform=darwin-aarch64 ;;
+ :Linux*x86_64*) distributionPlatform=linux-amd64 ;;
+ *)
+ echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2
+ distributionPlatform=linux-amd64
+ ;;
+ esac
+ distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip"
+ ;;
+maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
+*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
+esac
-# For Cygwin, ensure paths are in UNIX format before anything is touched
-if $cygwin ; then
- [ -n "$M2_HOME" ] &&
- M2_HOME=`cygpath --unix "$M2_HOME"`
- [ -n "$JAVA_HOME" ] &&
- JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
- [ -n "$CLASSPATH" ] &&
- CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
-fi
+# apply MVNW_REPOURL and calculate MAVEN_HOME
+# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
+[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}"
+distributionUrlName="${distributionUrl##*/}"
+distributionUrlNameMain="${distributionUrlName%.*}"
+distributionUrlNameMain="${distributionUrlNameMain%-bin}"
+MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}"
+MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")"
+
+exec_maven() {
+ unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || :
+ exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD"
+}
-# For Mingw, ensure paths are in UNIX format before anything is touched
-if $mingw ; then
- [ -n "$M2_HOME" ] &&
- M2_HOME="`(cd "$M2_HOME"; pwd)`"
- [ -n "$JAVA_HOME" ] &&
- JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+if [ -d "$MAVEN_HOME" ]; then
+ verbose "found existing MAVEN_HOME at $MAVEN_HOME"
+ exec_maven "$@"
fi
-if [ -z "$JAVA_HOME" ]; then
- javaExecutable="`which javac`"
- if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
- # readlink(1) is not available as standard on Solaris 10.
- readLink=`which readlink`
- if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
- if $darwin ; then
- javaHome="`dirname \"$javaExecutable\"`"
- javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
- else
- javaExecutable="`readlink -f \"$javaExecutable\"`"
- fi
- javaHome="`dirname \"$javaExecutable\"`"
- javaHome=`expr "$javaHome" : '\(.*\)/bin'`
- JAVA_HOME="$javaHome"
- export JAVA_HOME
- fi
- fi
-fi
+case "${distributionUrl-}" in
+*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;;
+*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;;
+esac
-if [ -z "$JAVACMD" ] ; then
- if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- else
- JAVACMD="`\\unset -f command; \\command -v java`"
- fi
+# prepare tmp dir
+if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then
+ clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; }
+ trap clean HUP INT TERM EXIT
+else
+ die "cannot create temp dir"
fi
-if [ ! -x "$JAVACMD" ] ; then
- echo "Error: JAVA_HOME is not defined correctly." >&2
- echo " We cannot execute $JAVACMD" >&2
- exit 1
-fi
+mkdir -p -- "${MAVEN_HOME%/*}"
-if [ -z "$JAVA_HOME" ] ; then
- echo "Warning: JAVA_HOME environment variable is not set."
+# Download and Install Apache Maven
+verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
+verbose "Downloading from: $distributionUrl"
+verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
+
+# select .zip or .tar.gz
+if ! command -v unzip >/dev/null; then
+ distributionUrl="${distributionUrl%.zip}.tar.gz"
+ distributionUrlName="${distributionUrl##*/}"
fi
-CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+# verbose opt
+__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR=''
+[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v
-# traverses directory structure from process work directory to filesystem root
-# first directory with .mvn subdirectory is considered project base directory
-find_maven_basedir() {
+# normalize http auth
+case "${MVNW_PASSWORD:+has-password}" in
+'') MVNW_USERNAME='' MVNW_PASSWORD='' ;;
+has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;;
+esac
- if [ -z "$1" ]
- then
- echo "Path not specified to find_maven_basedir"
- return 1
- fi
+if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then
+ verbose "Found wget ... using wget"
+ wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl"
+elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then
+ verbose "Found curl ... using curl"
+ curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl"
+elif set_java_home; then
+ verbose "Falling back to use Java to download"
+ javaSource="$TMP_DOWNLOAD_DIR/Downloader.java"
+ targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName"
+ cat >"$javaSource" <<-END
+ public class Downloader extends java.net.Authenticator
+ {
+ protected java.net.PasswordAuthentication getPasswordAuthentication()
+ {
+ return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() );
+ }
+ public static void main( String[] args ) throws Exception
+ {
+ setDefault( new Downloader() );
+ java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() );
+ }
+ }
+ END
+ # For Cygwin/MinGW, switch paths to Windows format before running javac and java
+ verbose " - Compiling Downloader.java ..."
+ "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java"
+ verbose " - Running Downloader.java ..."
+ "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")"
+fi
- basedir="$1"
- wdir="$1"
- while [ "$wdir" != '/' ] ; do
- if [ -d "$wdir"/.mvn ] ; then
- basedir=$wdir
- break
+# If specified, validate the SHA-256 sum of the Maven distribution zip file
+if [ -n "${distributionSha256Sum-}" ]; then
+ distributionSha256Result=false
+ if [ "$MVN_CMD" = mvnd.sh ]; then
+ echo "Checksum validation is not supported for maven-mvnd." >&2
+ echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
+ exit 1
+ elif command -v sha256sum >/dev/null; then
+ if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then
+ distributionSha256Result=true
fi
- # workaround for JBEAP-8937 (on Solaris 10/Sparc)
- if [ -d "${wdir}" ]; then
- wdir=`cd "$wdir/.."; pwd`
+ elif command -v shasum >/dev/null; then
+ if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then
+ distributionSha256Result=true
fi
- # end of workaround
- done
- echo "${basedir}"
-}
-
-# concatenates all lines of a file
-concat_lines() {
- if [ -f "$1" ]; then
- echo "$(tr -s '\n' ' ' < "$1")"
+ else
+ echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
+ echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
+ exit 1
+ fi
+ if [ $distributionSha256Result = false ]; then
+ echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2
+ echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2
+ exit 1
fi
-}
-
-BASE_DIR=`find_maven_basedir "$(pwd)"`
-if [ -z "$BASE_DIR" ]; then
- exit 1;
fi
-##########################################################################################
-# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
-# This allows using the maven wrapper in projects that prohibit checking in binary data.
-##########################################################################################
-if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
- if [ "$MVNW_VERBOSE" = true ]; then
- echo "Found .mvn/wrapper/maven-wrapper.jar"
- fi
+# unzip and move
+if command -v unzip >/dev/null; then
+ unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip"
else
- if [ "$MVNW_VERBOSE" = true ]; then
- echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
- fi
- if [ -n "$MVNW_REPOURL" ]; then
- jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
- else
- jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
- fi
- while IFS="=" read key value; do
- case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
- esac
- done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
- if [ "$MVNW_VERBOSE" = true ]; then
- echo "Downloading from: $jarUrl"
- fi
- wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
- if $cygwin; then
- wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
- fi
-
- if command -v wget > /dev/null; then
- if [ "$MVNW_VERBOSE" = true ]; then
- echo "Found wget ... using wget"
- fi
- if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
- wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
- else
- wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
- fi
- elif command -v curl > /dev/null; then
- if [ "$MVNW_VERBOSE" = true ]; then
- echo "Found curl ... using curl"
- fi
- if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
- curl -o "$wrapperJarPath" "$jarUrl" -f
- else
- curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
- fi
-
- else
- if [ "$MVNW_VERBOSE" = true ]; then
- echo "Falling back to using Java to download"
- fi
- javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
- # For Cygwin, switch paths to Windows format before running javac
- if $cygwin; then
- javaClass=`cygpath --path --windows "$javaClass"`
- fi
- if [ -e "$javaClass" ]; then
- if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
- if [ "$MVNW_VERBOSE" = true ]; then
- echo " - Compiling MavenWrapperDownloader.java ..."
- fi
- # Compiling the Java class
- ("$JAVA_HOME/bin/javac" "$javaClass")
- fi
- if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
- # Running the downloader
- if [ "$MVNW_VERBOSE" = true ]; then
- echo " - Running MavenWrapperDownloader.java ..."
- fi
- ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
- fi
- fi
- fi
-fi
-##########################################################################################
-# End of extension
-##########################################################################################
-
-export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
-if [ "$MVNW_VERBOSE" = true ]; then
- echo $MAVEN_PROJECTBASEDIR
+ tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar"
fi
-MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin; then
- [ -n "$M2_HOME" ] &&
- M2_HOME=`cygpath --path --windows "$M2_HOME"`
- [ -n "$JAVA_HOME" ] &&
- JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
- [ -n "$CLASSPATH" ] &&
- CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
- [ -n "$MAVEN_PROJECTBASEDIR" ] &&
- MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
-fi
-
-# Provide a "standardized" way to retrieve the CLI args that will
-# work with both Windows and non-Windows executions.
-MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
-export MAVEN_CMD_LINE_ARGS
-
-WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url"
+mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
-exec "$JAVACMD" \
- $MAVEN_OPTS \
- $MAVEN_DEBUG_OPTS \
- -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
- "-Dmaven.home=${M2_HOME}" \
- "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
- ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
+clean || :
+exec_maven "$@"
diff --git a/mvnw.cmd b/mvnw.cmd
index 1d8ab01..6f779cf 100644
--- a/mvnw.cmd
+++ b/mvnw.cmd
@@ -1,3 +1,4 @@
+<# : batch portion
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@@ -18,171 +19,131 @@
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
-@REM Maven Start Up Batch script
-@REM
-@REM Required ENV vars:
-@REM JAVA_HOME - location of a JDK home dir
+@REM Apache Maven Wrapper startup batch script, version 3.3.2
@REM
@REM Optional ENV vars
-@REM M2_HOME - location of maven2's installed home dir
-@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
-@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
-@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
-@REM e.g. to debug Maven itself, use
-@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM MVNW_REPOURL - repo url base for downloading maven distribution
+@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
+@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output
@REM ----------------------------------------------------------------------------
-@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
-@echo off
-@REM set title of command window
-title %0
-@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
-@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
-
-@REM set %HOME% to equivalent of $HOME
-if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
-
-@REM Execute a user defined script before this one
-if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
-@REM check for pre script, once with legacy .bat ending and once with .cmd ending
-if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
-if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
-:skipRcPre
-
-@setlocal
-
-set ERROR_CODE=0
-
-@REM To isolate internal variables from possible post scripts, we use another setlocal
-@setlocal
-
-@REM ==== START VALIDATION ====
-if not "%JAVA_HOME%" == "" goto OkJHome
-
-echo.
-echo Error: JAVA_HOME not found in your environment. >&2
-echo Please set the JAVA_HOME variable in your environment to match the >&2
-echo location of your Java installation. >&2
-echo.
-goto error
-
-:OkJHome
-if exist "%JAVA_HOME%\bin\java.exe" goto init
-
-echo.
-echo Error: JAVA_HOME is set to an invalid directory. >&2
-echo JAVA_HOME = "%JAVA_HOME%" >&2
-echo Please set the JAVA_HOME variable in your environment to match the >&2
-echo location of your Java installation. >&2
-echo.
-goto error
-
-@REM ==== END VALIDATION ====
-
-:init
-
-@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
-@REM Fallback to current working directory if not found.
-
-set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
-IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
-
-set EXEC_DIR=%CD%
-set WDIR=%EXEC_DIR%
-:findBaseDir
-IF EXIST "%WDIR%"\.mvn goto baseDirFound
-cd ..
-IF "%WDIR%"=="%CD%" goto baseDirNotFound
-set WDIR=%CD%
-goto findBaseDir
-
-:baseDirFound
-set MAVEN_PROJECTBASEDIR=%WDIR%
-cd "%EXEC_DIR%"
-goto endDetectBaseDir
-
-:baseDirNotFound
-set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
-cd "%EXEC_DIR%"
-
-:endDetectBaseDir
-
-IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
-
-@setlocal EnableExtensions EnableDelayedExpansion
-for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
-@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
-
-:endReadAdditionalConfig
-
-SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
-set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
-set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
-
-set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
-
-FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
- IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
-)
-
-@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
-@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
-if exist %WRAPPER_JAR% (
- if "%MVNW_VERBOSE%" == "true" (
- echo Found %WRAPPER_JAR%
- )
-) else (
- if not "%MVNW_REPOURL%" == "" (
- SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
- )
- if "%MVNW_VERBOSE%" == "true" (
- echo Couldn't find %WRAPPER_JAR%, downloading it ...
- echo Downloading from: %DOWNLOAD_URL%
- )
-
- powershell -Command "&{"^
- "$webclient = new-object System.Net.WebClient;"^
- "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
- "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
- "}"^
- "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
- "}"
- if "%MVNW_VERBOSE%" == "true" (
- echo Finished downloading %WRAPPER_JAR%
- )
+@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0)
+@SET __MVNW_CMD__=
+@SET __MVNW_ERROR__=
+@SET __MVNW_PSMODULEP_SAVE=%PSModulePath%
+@SET PSModulePath=
+@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @(
+ IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B)
)
-@REM End of extension
-
-@REM Provide a "standardized" way to retrieve the CLI args that will
-@REM work with both Windows and non-Windows executions.
-set MAVEN_CMD_LINE_ARGS=%*
-
-%MAVEN_JAVA_EXE% ^
- %JVM_CONFIG_MAVEN_PROPS% ^
- %MAVEN_OPTS% ^
- %MAVEN_DEBUG_OPTS% ^
- -classpath %WRAPPER_JAR% ^
- "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
- %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
-if ERRORLEVEL 1 goto error
-goto end
-
-:error
-set ERROR_CODE=1
-
-:end
-@endlocal & set ERROR_CODE=%ERROR_CODE%
-
-if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
-@REM check for post script, once with legacy .bat ending and once with .cmd ending
-if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
-if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
-:skipRcPost
-
-@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
-if "%MAVEN_BATCH_PAUSE%"=="on" pause
-
-if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
-
-cmd /C exit /B %ERROR_CODE%
+@SET PSModulePath=%__MVNW_PSMODULEP_SAVE%
+@SET __MVNW_PSMODULEP_SAVE=
+@SET __MVNW_ARG0_NAME__=
+@SET MVNW_USERNAME=
+@SET MVNW_PASSWORD=
+@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*)
+@echo Cannot start maven from wrapper >&2 && exit /b 1
+@GOTO :EOF
+: end batch / begin powershell #>
+
+$ErrorActionPreference = "Stop"
+if ($env:MVNW_VERBOSE -eq "true") {
+ $VerbosePreference = "Continue"
+}
+
+# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties
+$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl
+if (!$distributionUrl) {
+ Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
+}
+
+switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) {
+ "maven-mvnd-*" {
+ $USE_MVND = $true
+ $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip"
+ $MVN_CMD = "mvnd.cmd"
+ break
+ }
+ default {
+ $USE_MVND = $false
+ $MVN_CMD = $script -replace '^mvnw','mvn'
+ break
+ }
+}
+
+# apply MVNW_REPOURL and calculate MAVEN_HOME
+# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
+if ($env:MVNW_REPOURL) {
+ $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" }
+ $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')"
+}
+$distributionUrlName = $distributionUrl -replace '^.*/',''
+$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$',''
+$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain"
+if ($env:MAVEN_USER_HOME) {
+ $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain"
+}
+$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
+$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME"
+
+if (Test-Path -Path "$MAVEN_HOME" -PathType Container) {
+ Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME"
+ Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
+ exit $?
+}
+
+if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) {
+ Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl"
+}
+
+# prepare tmp dir
+$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile
+$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir"
+$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null
+trap {
+ if ($TMP_DOWNLOAD_DIR.Exists) {
+ try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
+ catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
+ }
+}
+
+New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null
+
+# Download and Install Apache Maven
+Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
+Write-Verbose "Downloading from: $distributionUrl"
+Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
+
+$webclient = New-Object System.Net.WebClient
+if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) {
+ $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD)
+}
+[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
+$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null
+
+# If specified, validate the SHA-256 sum of the Maven distribution zip file
+$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum
+if ($distributionSha256Sum) {
+ if ($USE_MVND) {
+ Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties."
+ }
+ Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash
+ if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) {
+ Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property."
+ }
+}
+
+# unzip and move
+Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null
+Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null
+try {
+ Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null
+} catch {
+ if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) {
+ Write-Error "fail to move MAVEN_HOME"
+ }
+} finally {
+ try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
+ catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
+}
+
+Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
diff --git a/plc4j/tools/pom.xml b/plc4j/tools/pom.xml
index db636e1..bbbece9 100644
--- a/plc4j/tools/pom.xml
+++ b/plc4j/tools/pom.xml
@@ -56,16 +56,6 @@
<module>opcua-server</module>
</modules>
</profile>
- <!-- Disabled till someone volunteers to keep on working on this. -->
- <!--profile>
- <id>.above-or-equal-java-19</id>
- <activation>
- <jdk>[19,)</jdk>
- </activation>
- <modules>
- <module>ui</module>
- </modules>
- </profile-->
</profiles>
</project>
\ No newline at end of file
diff --git a/plc4j/tools/ui/application/pom.xml b/plc4j/tools/ui/application/pom.xml
deleted file mode 100644
index 10a84c2..0000000
--- a/plc4j/tools/ui/application/pom.xml
+++ /dev/null
@@ -1,179 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- https://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
- -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.apache.plc4x</groupId>
- <artifactId>plc4j-tools-ui</artifactId>
- <version>0.14.0-SNAPSHOT</version>
- </parent>
-
- <artifactId>plc4j-tools-ui-application</artifactId>
- <name>PLC4J: Tools: Application</name>
-
- <build>
- <plugins>
- <!-- Unpack the Frontend, so it's served with the rest of the application -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <version>3.6.1</version>
- <executions>
- <execution>
- <id>unpack</id>
- <phase>generate-resources</phase>
- <goals>
- <goal>unpack</goal>
- </goals>
- <configuration>
- <artifactItems>
- <artifactItem>
- <groupId>org.apache.plc4x</groupId>
- <artifactId>plc4j-tools-ui-frontend</artifactId>
- <version>${project.version}</version>
- <type>jar</type>
- <outputDirectory>${project.build.outputDirectory}/static</outputDirectory>
- </artifactItem>
- </artifactItems>
- </configuration>
- </execution>
- <execution>
- <id>copy-dependencies</id>
- <phase>package</phase>
- <goals>
- <goal>copy-dependencies</goal>
- </goals>
- <configuration>
- <outputDirectory>${project.build.directory}/libs</outputDirectory>
- </configuration>
- </execution>
- </executions>
- <configuration>
- <usedDependencies combine.children="append">
- <usedDependency>org.apache.plc4x:plc4j-tools-ui-backend</usedDependency>
- <usedDependency>ch.qos.logback:logback-core</usedDependency>
- </usedDependencies>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- <version>3.2.5</version>
- <configuration>
- <mainClass>org.apache.plc4x.java.tools.ui.Plc4xUiBackendApplication</mainClass>
- <profiles>
- <profile>dev</profile>
- </profiles>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.rat</groupId>
- <artifactId>apache-rat-plugin</artifactId>
- <executions>
- <execution>
- <id>license-check</id>
- <phase>verify</phase>
- <goals>
- <goal>check</goal>
- </goals>
- <configuration>
- <excludes>
- <exclude>storage/**</exclude>
- <exclude>derby.log</exclude>
- </excludes>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-autoconfigure</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.data</groupId>
- <artifactId>spring-data-jpa</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.apache.plc4x</groupId>
- <artifactId>plc4j-tools-ui-backend</artifactId>
- <version>0.14.0-SNAPSHOT</version>
- </dependency>
-
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- </dependency>
- <dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-classic</artifactId>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-core</artifactId>
- <scope>compile</scope>
- </dependency>
-
- <!-- Test dependencies -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-test</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.springframework.security</groupId>
- <artifactId>spring-security-test</artifactId>
- <scope>test</scope>
- </dependency>
-
- <!-- For making sure this module is built first -->
- <dependency>
- <groupId>org.apache.plc4x</groupId>
- <artifactId>plc4j-tools-ui-frontend</artifactId>
- <version>0.14.0-SNAPSHOT</version>
- <scope>provided</scope>
- </dependency>
- </dependencies>
-
-</project>
diff --git a/plc4j/tools/ui/application/src/main/java/org/apache/plc4x/java/tools/ui/Plc4xUiBackendApplication.java b/plc4j/tools/ui/application/src/main/java/org/apache/plc4x/java/tools/ui/Plc4xUiBackendApplication.java
deleted file mode 100644
index 6a769ed..0000000
--- a/plc4j/tools/ui/application/src/main/java/org/apache/plc4x/java/tools/ui/Plc4xUiBackendApplication.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.tools.ui;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
-
-@SpringBootApplication
-@EnableJpaRepositories("org.apache.plc4x.java.tools.ui")
-public class Plc4xUiBackendApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(Plc4xUiBackendApplication.class, args);
- }
-
-}
diff --git a/plc4j/tools/ui/application/src/main/resources/application-dev.properties b/plc4j/tools/ui/application/src/main/resources/application-dev.properties
deleted file mode 100644
index fe95886..0000000
--- a/plc4j/tools/ui/application/src/main/resources/application-dev.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
diff --git a/plc4j/tools/ui/application/src/main/resources/application.properties b/plc4j/tools/ui/application/src/main/resources/application.properties
deleted file mode 100644
index 0497f63..0000000
--- a/plc4j/tools/ui/application/src/main/resources/application.properties
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-# Settings for the Derby sql database, which contains the application settings.
-spring.jpa.generate-ddl=true
-spring.jpa.hibernate.ddl-auto=update
-spring.jpa.database=default
-spring.datasource.url=jdbc:derby:directory:storage/settings;create=true
-
-# DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)
-spring.sql.init.continue-on-error=false
-spring.datasource.generate-unique-name=false
-
-# Just setting this to the default in order to avoid warning messages.
-spring.jpa.open-in-view=true
diff --git a/plc4j/tools/ui/application/src/main/resources/logback.xml b/plc4j/tools/ui/application/src/main/resources/logback.xml
deleted file mode 100644
index 22a5cdf..0000000
--- a/plc4j/tools/ui/application/src/main/resources/logback.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- https://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
- -->
-<configuration xmlns="http://ch.qos.logback/xml/ns/logback"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="
- http://ch.qos.logback/xml/ns/logback
- https://raw.githubusercontent.com/enricopulatzo/logback-XSD/master/src/main/xsd/logback.xsd">
-
- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <encoder>
- <pattern>[%thread] %highlight(%-5level) %cyan(%logger{15}) - %msg %n</pattern>
- </encoder>
- </appender>
-
- <!-- TODO: Suppress the annoying warnings when using derby (Maybe fix these) -->
- <logger name="com.zaxxer.hikari" level="error"/>
-
- <root level="info">
- <appender-ref ref="STDOUT" />
- </root>
-
-</configuration>
\ No newline at end of file
diff --git a/plc4j/tools/ui/application/src/test/java/org/apache/plc4x/java/tools/ui/Plc4xUiBackendApplicationTests.java b/plc4j/tools/ui/application/src/test/java/org/apache/plc4x/java/tools/ui/Plc4xUiBackendApplicationTests.java
deleted file mode 100644
index 879b9d8..0000000
--- a/plc4j/tools/ui/application/src/test/java/org/apache/plc4x/java/tools/ui/Plc4xUiBackendApplicationTests.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.tools.ui;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.ActiveProfiles;
-
-@SpringBootTest
-@ActiveProfiles(value = "test")
-class Plc4xUiBackendApplicationTests {
-
- @Test
- void contextLoads() {
- }
-
-}
diff --git a/plc4j/tools/ui/application/src/test/resources/application-test.properties b/plc4j/tools/ui/application/src/test/resources/application-test.properties
deleted file mode 100644
index b4082c8..0000000
--- a/plc4j/tools/ui/application/src/test/resources/application-test.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-spring.datasource.url=jdbc:derby:directory:target/storage/settings;create=true
diff --git a/plc4j/tools/ui/backend/pom.xml b/plc4j/tools/ui/backend/pom.xml
deleted file mode 100644
index 5d59e1d..0000000
--- a/plc4j/tools/ui/backend/pom.xml
+++ /dev/null
@@ -1,144 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- https://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
- -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.apache.plc4x</groupId>
- <artifactId>plc4j-tools-ui</artifactId>
- <version>0.14.0-SNAPSHOT</version>
- </parent>
-
- <artifactId>plc4j-tools-ui-backend</artifactId>
- <name>PLC4J: Tools: Backend</name>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.rat</groupId>
- <artifactId>apache-rat-plugin</artifactId>
- <executions>
- <execution>
- <id>license-check</id>
- <phase>verify</phase>
- <goals>
- <goal>check</goal>
- </goals>
- </execution>
- </executions>
- <configuration>
- <excludes combine.children="append">
- <exclude>storage/**</exclude>
- <exclude>derby.log</exclude>
- </excludes>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-websocket</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-core</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.data</groupId>
- <artifactId>spring-data-jpa</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-websocket</artifactId>
- </dependency>
-
- <!-- Add support for the embedded derby database, which is used for saving the configuration -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-jpa</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.derby</groupId>
- <artifactId>derby</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.derby</groupId>
- <artifactId>derbytools</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.apache.plc4x</groupId>
- <artifactId>plc4j-api</artifactId>
- <version>0.14.0-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.apache.plc4x</groupId>
- <artifactId>plc4j-connection-cache</artifactId>
- <version>0.14.0-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.apache.plc4x</groupId>
- <artifactId>plc4j-driver-all</artifactId>
- <version>0.14.0-SNAPSHOT</version>
- <type>pom</type>
- </dependency>
-
- <dependency>
- <groupId>jakarta.persistence</groupId>
- <artifactId>jakarta.persistence-api</artifactId>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- </dependency>
- <!--dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-core</artifactId>
- </dependency-->
-
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- </dependency>
- <dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-classic</artifactId>
- </dependency>
- <dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-core</artifactId>
- </dependency>
- </dependencies>
-
-</project>
diff --git a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/configuration/Plc4xConfiguration.java b/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/configuration/Plc4xConfiguration.java
deleted file mode 100644
index 5d39e84..0000000
--- a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/configuration/Plc4xConfiguration.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.tools.ui.configuration;
-
-import org.apache.plc4x.java.api.PlcDriverManager;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class Plc4xConfiguration {
-
- @Bean
- public PlcDriverManager driverManager() {
- return PlcDriverManager.getDefault();
- }
-
-}
diff --git a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/configuration/WebSocketConfig.java b/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/configuration/WebSocketConfig.java
deleted file mode 100644
index 03281de..0000000
--- a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/configuration/WebSocketConfig.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.tools.ui.configuration;
-
-import org.apache.plc4x.java.tools.ui.handler.WebSocketHandler;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.socket.config.annotation.EnableWebSocket;
-import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
-import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
-
-@Configuration
-@EnableWebSocket
-public class WebSocketConfig implements WebSocketConfigurer {
-
- private final WebSocketHandler webSocketHandler;
-
- public WebSocketConfig(WebSocketHandler webSocketHandler) {
- this.webSocketHandler = webSocketHandler;
- }
-
- @Override
- public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
- registry.addHandler(webSocketHandler, "/ws").setAllowedOrigins("*");
- }
-
-}
diff --git a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/controller/DeviceController.java b/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/controller/DeviceController.java
deleted file mode 100644
index 5a4f66a..0000000
--- a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/controller/DeviceController.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.tools.ui.controller;
-
-import org.apache.plc4x.java.tools.ui.model.Device;
-import org.apache.plc4x.java.tools.ui.service.DeviceService;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-//@CrossOrigin(origins = {"http://localhost:8080", "http://localhost:5173"})
-@CrossOrigin(origins = {"*"})
-@RestController
-@RequestMapping("/api/devices")
-public class DeviceController {
-
- private final DeviceService deviceService;
-
- public DeviceController(DeviceService deviceService) {
- this.deviceService = deviceService;
- }
-
- @GetMapping("/{id}")
- public Device getDeviceById(@PathVariable Integer id) {
- return deviceService.readDevice(id).orElseThrow(() -> new RuntimeException("Error finding connection with id: " + id));
- }
-
- @GetMapping
- public List<Device> getAllDevices() {
- return deviceService.getAllDevices();
- }
-
- @PostMapping
- public Device saveDevice(@RequestBody Device device) {
- if (device.getId() == null) {
- return deviceService.createDevice(device);
- } else {
- return deviceService.updateDevice(device);
- }
- }
-
- @DeleteMapping
- public void deleteDevice(@RequestBody Device device) {
- deviceService.deleteDevice(device);
- }
-
-}
diff --git a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/controller/DriverController.java b/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/controller/DriverController.java
deleted file mode 100644
index 43438f2..0000000
--- a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/controller/DriverController.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.tools.ui.controller;
-
-import org.apache.plc4x.java.tools.ui.model.Driver;
-import org.apache.plc4x.java.tools.ui.service.DriverService;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-// Allow from the default port 8080 as well as the one node usually uses for it's dev-mode 5173
-//@CrossOrigin(origins = {"http://localhost:8080", "http://localhost:5173"})
-@CrossOrigin(origins = {"*"})
-@RestController
-@RequestMapping("/api")
-public class DriverController {
-
- private final DriverService driverService;
-
- public DriverController(DriverService driverService) {
- this.driverService = driverService;
- }
-
- @GetMapping("/drivers")
- public List<Driver> getAllDrivers() {
- return driverService.getDriverList();
- }
-
- @GetMapping("/discover/{protocolCode}")
- public void discover(@PathVariable("protocolCode") String protocolCode) {
- driverService.discover(protocolCode);
- }
-
-}
diff --git a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/event/DeviceEvent.java b/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/event/DeviceEvent.java
deleted file mode 100644
index 7f659b5..0000000
--- a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/event/DeviceEvent.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.tools.ui.event;
-
-import org.apache.plc4x.java.tools.ui.model.Device;
-
-public class DeviceEvent extends UiApplicationEvent<Device> {
-
- public DeviceEvent(Device source, EventType eventType) {
- super(source, eventType);
- }
-
-}
diff --git a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/event/EventType.java b/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/event/EventType.java
deleted file mode 100644
index 4e3e4b6..0000000
--- a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/event/EventType.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.tools.ui.event;
-
-public enum EventType {
-
- CREATED,
- UPDATED,
- DELETED
-
-}
diff --git a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/event/UiApplicationEvent.java b/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/event/UiApplicationEvent.java
deleted file mode 100644
index 45b5856..0000000
--- a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/event/UiApplicationEvent.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.tools.ui.event;
-
-public abstract class UiApplicationEvent<T> extends org.springframework.context.ApplicationEvent {
-
- private final EventType eventType;
-
- public UiApplicationEvent(T source, EventType eventType) {
- super(source);
- this.eventType = eventType;
- }
-
- public EventType getEventType() {
- return eventType;
- }
-
- @Override
- public T getSource() {
- // We're only accepting objects of type T, so in this case it's safe to cast.
- //noinspection unchecked
- return (T) super.getSource();
- }
-
-}
diff --git a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/handler/WebSocketHandler.java b/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/handler/WebSocketHandler.java
deleted file mode 100644
index bd7e10c..0000000
--- a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/handler/WebSocketHandler.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.tools.ui.handler;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.plc4x.java.tools.ui.event.UiApplicationEvent;
-import org.springframework.context.event.EventListener;
-import org.springframework.stereotype.Component;
-import org.springframework.web.socket.CloseStatus;
-import org.springframework.web.socket.TextMessage;
-import org.springframework.web.socket.WebSocketMessage;
-import org.springframework.web.socket.WebSocketSession;
-import org.springframework.lang.Nullable;
-
-import java.io.IOException;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-@Component
-public class WebSocketHandler implements org.springframework.web.socket.WebSocketHandler {
-
- private final Map<String, WebSocketSession> openSessions = new ConcurrentHashMap<>();
- private final ObjectMapper objectMapper = new ObjectMapper();
-
- /**
- * ApplicationEvent listener forwarding all ApplicationEvents from this application to all connected clients.
- * @param uiApplicationEvent event that we want to be forwarded.
- */
- @EventListener
- public void onApplicationEvent(UiApplicationEvent<?> uiApplicationEvent) {
- openSessions.forEach((s, webSocketSession) -> {
- try {
- webSocketSession.sendMessage(new TextMessage(objectMapper.writeValueAsString(uiApplicationEvent)));
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- });
- }
-
- /**
- * Register a new web-socket session.
- * @param session the new web-socket session.
- */
- @Override
- public void afterConnectionEstablished(@Nullable WebSocketSession session) {
- if(session != null) {
- openSessions.put(session.getId(), session);
- }
- }
-
- /**
- * Remove a web-socket session from the list.
- * @param session the web-socket session we want to remove
- * @param closeStatus the status of the closed session
- */
- @Override
- public void afterConnectionClosed(@Nullable WebSocketSession session, @Nullable CloseStatus closeStatus) {
- if((session != null) && (closeStatus != null)) {
- //noinspection resource
- openSessions.remove(session.getId());
- }
- }
-
- /**
- * Handle an incoming message on the web-socket session
- * (this should actually not happen, as we only use the web-sockets for server-to-client communication)
- * @param session the web-socket session the message is coming in on
- * @param message the message
- */
- @Override
- public void handleMessage(@Nullable WebSocketSession session, @Nullable WebSocketMessage<?> message) {
- System.out.println("handleMessage");
- }
-
- /**
- * Callback for handling transport errors.
- * @param session the web-socket session causing the error
- * @param exception the error that happened
- */
- @Override
- public void handleTransportError(@Nullable WebSocketSession session, @Nullable Throwable exception) {
- System.out.println("handleTransportError");
- }
-
- @Override
- public boolean supportsPartialMessages() {
- return false;
- }
-
-}
diff --git a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/model/ConfigurationOption.java b/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/model/ConfigurationOption.java
deleted file mode 100644
index c8d5ef5..0000000
--- a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/model/ConfigurationOption.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.tools.ui.model;
-
-public class ConfigurationOption {
-
- public final String name;
- public final String typeName;
- public final boolean required;
- public final Object defaultValue;
-
- public ConfigurationOption(String name, String typeName, boolean required, Object defaultValue) {
- this.name = name;
- this.typeName = typeName;
- this.required = required;
- this.defaultValue = defaultValue;
- }
-
- public String getName() {
- return name;
- }
-
- public String getTypeName() {
- return typeName;
- }
-
- public boolean isRequired() {
- return required;
- }
-
- public Object getDefaultValue() {
- return defaultValue;
- }
-
-}
diff --git a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/model/Device.java b/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/model/Device.java
deleted file mode 100644
index bbc8396..0000000
--- a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/model/Device.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.tools.ui.model;
-
-import jakarta.persistence.*;
-
-import java.util.Map;
-
-@Entity
-public class Device {
-
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- private Integer id;
-
- private String name;
-
- private String protocolCode;
- private String transportCode;
-
- private String transportUrl;
- @ElementCollection
- @MapKeyColumn(name="name")
- @Column(name="value")
- @CollectionTable(name="device_options", joinColumns=@JoinColumn(name="device_id"))
- private Map<String, String> options;
- @ElementCollection
- @MapKeyColumn(name="name")
- @Column(name="value")
- @CollectionTable(name="device_attributes", joinColumns=@JoinColumn(name="device_id"))
- private Map<String, String> attributes;
-
- public Device() {
- }
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getProtocolCode() {
- return protocolCode;
- }
-
- public void setProtocolCode(String protocolCode) {
- this.protocolCode = protocolCode;
- }
-
- public String getTransportCode() {
- return transportCode;
- }
-
- public void setTransportCode(String transportCode) {
- this.transportCode = transportCode;
- }
-
- public String getTransportUrl() {
- return transportUrl;
- }
-
- public void setTransportUrl(String transportUrl) {
- this.transportUrl = transportUrl;
- }
-
- public Map<String, String> getOptions() {
- return options;
- }
-
- public void setOptions(Map<String, String> options) {
- this.options = options;
- }
-
- public Map<String, String> getAttributes() {
- return attributes;
- }
-
- public void setAttributes(Map<String, String> attributes) {
- this.attributes = attributes;
- }
-
-}
diff --git a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/model/Driver.java b/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/model/Driver.java
deleted file mode 100644
index bb5a992..0000000
--- a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/model/Driver.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.tools.ui.model;
-
-import org.apache.plc4x.java.api.metadata.PlcDriverMetadata;
-
-public class Driver {
-
- private final String code;
- private final String name;
- private final PlcDriverMetadata metadata;
-
-
- public Driver(String code, String name, PlcDriverMetadata metadata) {
- this.code = code;
- this.name = name;
- this.metadata = metadata;
- }
-
- public String getCode() {
- return code;
- }
-
- public String getName() {
- return name;
- }
-
- public PlcDriverMetadata getMetadata() {
- return metadata;
- }
-
-}
diff --git a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/model/Transport.java b/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/model/Transport.java
deleted file mode 100644
index faebe25..0000000
--- a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/model/Transport.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.tools.ui.model;
-
-import java.util.Map;
-
-public class Transport {
-
- private final String code;
- private final String name;
-
- private final Map<String, Object> options;
-
- public Transport(String code, String name, Map<String, Object> options) {
- this.code = code;
- this.name = name;
- this.options = options;
- }
-
- public String getCode() {
- return code;
- }
-
- public String getName() {
- return name;
- }
-
- public Map<String, Object> getOptions() {
- return options;
- }
-
-}
diff --git a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/repository/DeviceRepository.java b/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/repository/DeviceRepository.java
deleted file mode 100644
index 3a5bd46..0000000
--- a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/repository/DeviceRepository.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.tools.ui.repository;
-
-import org.apache.plc4x.java.tools.ui.model.Device;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-import java.util.List;
-
-public interface DeviceRepository extends JpaRepository<Device, Integer> {
- List<Device> findByProtocolCodeAndTransportCodeAndTransportUrl(String protocolCode, String transportCode, String transportUrl);
-
-}
diff --git a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/service/DeviceService.java b/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/service/DeviceService.java
deleted file mode 100644
index 24591d6..0000000
--- a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/service/DeviceService.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.tools.ui.service;
-
-import org.apache.plc4x.java.api.PlcDriverManager;
-import org.apache.plc4x.java.tools.ui.event.DeviceEvent;
-import org.apache.plc4x.java.tools.ui.event.EventType;
-import org.apache.plc4x.java.tools.ui.model.Device;
-import org.apache.plc4x.java.tools.ui.repository.DeviceRepository;
-import org.apache.plc4x.java.utils.cache.CachedPlcConnectionManager;
-import org.springframework.context.ApplicationEventPublisher;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-import java.util.Optional;
-
-@Component
-public class DeviceService {
-
- private final DeviceRepository deviceRepository;
- private final ApplicationEventPublisher publisher;
- private final CachedPlcConnectionManager cachedPlcConnectionManager;
-
- public DeviceService(DeviceRepository deviceRepository, ApplicationEventPublisher publisher, PlcDriverManager driverManager) {
- this.deviceRepository = deviceRepository;
- this.publisher = publisher;
- this.cachedPlcConnectionManager = CachedPlcConnectionManager.getBuilder(driverManager.getConnectionManager()).build();
- }
-
- public List<Device> getAllDevices() {
- return deviceRepository.findAll();
- }
-
- /**
- * We consider a device a "new device", if there is no device with the same protocol code, transport code and transport url.
- * @param device the device we want to know if it's "new".
- * @return true if it's a "new" device.
- */
- public boolean isNewDevice(Device device) {
- List<Device> foundDevices = deviceRepository.findByProtocolCodeAndTransportCodeAndTransportUrl(device.getProtocolCode(), device.getTransportCode(), device.getTransportUrl());
- return foundDevices.isEmpty();
- }
-
- public Device createDevice(Device device) {
- Device savedDevice = deviceRepository.save(device);
- publisher.publishEvent(new DeviceEvent(device, EventType.CREATED));
- return savedDevice;
- }
-
- public Optional<Device> readDevice(Integer id) {
- return deviceRepository.findById(id);
- }
-
- public Device updateDevice(Device device) {
- Device savedDevice = deviceRepository.save(device);
- publisher.publishEvent(new DeviceEvent(savedDevice, EventType.UPDATED));
- return savedDevice;
- }
-
- public void deleteDevice(Device device) {
- deviceRepository.delete(device);
- publisher.publishEvent(new DeviceEvent(device, EventType.DELETED));
- }
-
-}
diff --git a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/service/DriverService.java b/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/service/DriverService.java
deleted file mode 100644
index 79fa8b5..0000000
--- a/plc4j/tools/ui/backend/src/main/java/org/apache/plc4x/java/tools/ui/service/DriverService.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.tools.ui.service;
-
-import org.apache.plc4x.java.api.PlcDriver;
-import org.apache.plc4x.java.api.PlcDriverManager;
-import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
-import org.apache.plc4x.java.api.messages.PlcDiscoveryRequest;
-import org.apache.plc4x.java.api.metadata.PlcDriverMetadata;
-import org.apache.plc4x.java.tools.ui.model.Device;
-import org.apache.plc4x.java.tools.ui.model.Driver;
-import org.springframework.stereotype.Component;
-
-import java.util.*;
-
-@Component
-public class DriverService {
-
- private static final String ALL_DRIVERS = "all";
-
- private final PlcDriverManager driverManager;
- private final DeviceService deviceService;
-
- public DriverService(PlcDriverManager driverManager, DeviceService deviceService) {
- this.driverManager = driverManager;
- this.deviceService = deviceService;
- }
-
- public List<Driver> getDriverList() {
- List<Driver> drivers = new ArrayList<>();
- for (String protocolCode : driverManager.getProtocolCodes()) {
- try {
- PlcDriver driver = driverManager.getDriver(protocolCode);
- PlcDriverMetadata metadata = driver.getMetadata();
- drivers.add(new Driver(protocolCode, driver.getProtocolName(), metadata));
- } catch (Exception e) {
- throw new RuntimeException("Error retrieving driver list", e);
- }
- }
- return drivers;
- }
-
- public void discover(String protocolCode) {
- if(ALL_DRIVERS.equals(protocolCode)) {
- for (String curProtocolCode : driverManager.getProtocolCodes()) {
- try {
- if("modbus-tcp".equals(curProtocolCode)) {
- continue;
- }
- PlcDriver driver = driverManager.getDriver(curProtocolCode);
- if (driver.getMetadata().isDiscoverySupported()) {
- discoverProtocol(curProtocolCode);
- }
- } catch (PlcConnectionException e) {
- throw new RuntimeException(e);
- }
- }
- } else {
- discoverProtocol(protocolCode);
- }
- }
-
- private void discoverProtocol(String protocolCode) {
- try {
- PlcDriver driver = driverManager.getDriver(protocolCode);
- if (!driver.getMetadata().isDiscoverySupported()) {
- throw new RuntimeException("Driver doesn't support discovery");
- } else {
- PlcDiscoveryRequest request = driver.discoveryRequestBuilder().addQuery("all", "*").build();
- // Execute the discovery request and have all connections found be added as connections.
- request.executeWithHandler(discoveryItem -> {
- // Create the new device.
- Device device = new Device();
- device.setName(discoveryItem.getName());
- device.setProtocolCode(discoveryItem.getProtocolCode());
- device.setTransportCode(discoveryItem.getTransportCode());
- device.setTransportUrl(discoveryItem.getTransportUrl());
- device.setOptions(discoveryItem.getOptions());
- Map<String, String> attributes = new HashMap<>();
- for (String attributeName : discoveryItem.getAttributes().keySet()) {
- String attributeValue = discoveryItem.getAttributes().get(attributeName).getString();
- attributes.put(attributeName, attributeValue);
- }
- device.setAttributes(attributes);
-
- // Save the found device in the database, if this is a new device,
- // that is not stored in our system before.
- if(deviceService.isNewDevice(device)) {
- deviceService.createDevice(device);
- }
- }).whenComplete((plcDiscoveryResponse, throwable) -> {
- if(throwable != null) {
- throw new RuntimeException("Error executing discovery", throwable);
- }
- });
- }
- } catch (PlcConnectionException e) {
- throw new RuntimeException("Error getting driver", e);
- }
- }
-
-}
diff --git a/plc4j/tools/ui/backend/ws.html b/plc4j/tools/ui/backend/ws.html
deleted file mode 100644
index 2ce6d84..0000000
--- a/plc4j/tools/ui/backend/ws.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- https://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
- -->
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <title>Profile notification client
- </title>
-</head>
-<body>
-<script>
- // <1>
- var socket = new WebSocket('ws://localhost:8080/ws');
- // <2>
- socket.addEventListener('message', function (event) {
- window.alert('message from server: ' + event.data);
- });
-</script>
-</body>
-</html>
diff --git a/plc4j/tools/ui/frontend/pom.xml b/plc4j/tools/ui/frontend/pom.xml
deleted file mode 100644
index dc3d762..0000000
--- a/plc4j/tools/ui/frontend/pom.xml
+++ /dev/null
@@ -1,212 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- https://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
- -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.apache.plc4x</groupId>
- <artifactId>plc4j-tools-ui</artifactId>
- <version>0.14.0-SNAPSHOT</version>
- </parent>
-
- <artifactId>plc4j-tools-ui-frontend</artifactId>
- <name>PLC4J: Tools: Frontend</name>
-
- <properties>
- </properties>
-
- <build>
- <plugins>
- <plugin>
- <groupId>cz.habarta.typescript-generator</groupId>
- <artifactId>typescript-generator-maven-plugin</artifactId>
- <version>3.2.1263</version>
- <executions>
- <execution>
- <id>generate-rest-client</id>
- <phase>generate-sources</phase>
- <goals>
- <goal>generate</goal>
- </goals>
- <configuration>
- <skip>false</skip>
- <classes>
- <!-- These are the PLC4J API types -->
- <!--class>org.apache.plc4x.java.api.messages.PlcBrowseItem</class>
- <class>org.apache.plc4x.java.api.messages.PlcBrowseItemArrayInfo</class>
- <class>org.apache.plc4x.java.api.messages.PlcBrowseRequest</class>
- <class>org.apache.plc4x.java.api.messages.PlcBrowseResponse</class>
- <class>org.apache.plc4x.java.api.messages.PlcDiscoveryItem</class>
- <class>org.apache.plc4x.java.api.messages.PlcDiscoveryRequest</class>
- <class>org.apache.plc4x.java.api.messages.PlcDiscoveryResponse</class>
- <class>org.apache.plc4x.java.api.metadata.PlcConnectionMetadata</class>
- <class>org.apache.plc4x.java.api.metadata.PlcDriverMetadata</class>
- <class>org.apache.plc4x.java.api.model.ArrayInfo</class>
- <class>org.apache.plc4x.java.api.model.PlcQuery</class>
- <class>org.apache.plc4x.java.api.model.PlcTag</class>
- <class>org.apache.plc4x.java.api.types.PlcResponseCode</class>
- <class>org.apache.plc4x.java.api.types.PlcSubscriptionType</class>
- <class>org.apache.plc4x.java.api.types.PlcValueType</class>
- <class>org.apache.plc4x.java.api.value.PlcValue</class-->
- <class>org.apache.plc4x.java.tools.ui.model.Device</class>
- <class>org.apache.plc4x.java.tools.ui.model.Driver</class>
- <class>org.apache.plc4x.java.tools.ui.event.EventType</class>
- <class>org.apache.plc4x.java.tools.ui.event.UiApplicationEvent</class>
- <class>org.apache.plc4x.java.tools.ui.event.DeviceEvent</class>
- <!-- Here come the REST controllers -->
- <class>org.apache.plc4x.java.tools.ui.controller.DeviceController</class>
- <class>org.apache.plc4x.java.tools.ui.controller.DriverController</class>
- </classes>
- <excludeClasses>
- <excludeClass>java.lang.Comparable</excludeClass>
- </excludeClasses>
- <extensions>
- <extension>cz.habarta.typescript.generator.ext.AxiosClientExtension</extension>
- </extensions>
- <outputKind>module</outputKind>
- <outputFileType>implementationFile</outputFileType>
- <classesFromAutomaticJaxrsApplication>true</classesFromAutomaticJaxrsApplication>
- <generateJaxrsApplicationClient>true</generateJaxrsApplicationClient>
- <generateSpringApplicationClient>true</generateSpringApplicationClient>
- <jsonLibrary>jackson2</jsonLibrary>
- <restOptionsType>AxiosRequestConfig</restOptionsType>
- <restResponseType>AxiosPromise</restResponseType>
- <outputFile>project/src/generated/plc4j-tools-ui-frontend.ts</outputFile>
- <noFileComment>true</noFileComment>
- </configuration>
- </execution>
- </executions>
- <dependencies>
- <dependency>
- <groupId>cz.habarta.typescript-generator</groupId>
- <artifactId>typescript-generator-spring</artifactId>
- <version>3.2.1263</version>
- </dependency>
- </dependencies>
- </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>license-maven-plugin</artifactId>
- <version>2.4.0</version>
- <executions>
- <execution>
- <id>add-apache-headers</id>
- <phase>process-sources</phase>
- <goals>
- <goal>update-file-header</goal>
- </goals>
- <configuration>
- <licenseName>apache_v2</licenseName>
- <roots>
- <root>project/src/generated</root>
- </roots>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>com.github.eirslett</groupId>
- <artifactId>frontend-maven-plugin</artifactId>
- <version>1.15.0</version>
- <executions>
- <execution>
- <id>install-node-and-npm</id>
- <phase>generate-resources</phase>
- <goals>
- <goal>install-node-and-npm</goal>
- </goals>
- </execution>
- <execution>
- <id>npm-install</id>
- <phase>generate-resources</phase>
- <goals>
- <goal>npm</goal>
- </goals>
- <configuration>
- <arguments>install</arguments>
- </configuration>
- </execution>
- <execution>
- <id>npm-run-build</id>
- <phase>compile</phase>
- <goals>
- <goal>npm</goal>
- </goals>
- <configuration>
- <arguments>run build</arguments>
- </configuration>
- </execution>
- </executions>
- <configuration>
- <workingDirectory>project</workingDirectory>
- <nodeVersion>v20.9.0</nodeVersion>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>3.4.1</version>
- <executions>
- <execution>
- <id>default-jar</id>
- <phase>package</phase>
- <goals>
- <goal>jar</goal>
- </goals>
- <configuration>
- <classesDirectory>project/dist</classesDirectory>
- <includes>
- <include>**</include>
- </includes>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <!-- Exclude the Node directories and the output directory -->
- <plugin>
- <groupId>org.apache.rat</groupId>
- <artifactId>apache-rat-plugin</artifactId>
- <configuration>
- <excludes combine.children="append">
- <exclude>project/dist/**</exclude>
- <exclude>project/node/**</exclude>
- <exclude>project/node_modules/**</exclude>
- </excludes>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
- <dependencies>
- <dependency>
- <groupId>org.apache.plc4x</groupId>
- <artifactId>plc4j-api</artifactId>
- <version>0.14.0-SNAPSHOT</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.plc4x</groupId>
- <artifactId>plc4j-tools-ui-backend</artifactId>
- <version>0.14.0-SNAPSHOT</version>
- <scope>provided</scope>
- </dependency>
- </dependencies>
-
-</project>
diff --git a/plc4j/tools/ui/frontend/project/.eslintrc.cjs b/plc4j/tools/ui/frontend/project/.eslintrc.cjs
deleted file mode 100644
index 3bca758..0000000
--- a/plc4j/tools/ui/frontend/project/.eslintrc.cjs
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-module.exports = {
- root: true,
- env: { browser: true, es2020: true },
- extends: [
- 'eslint:recommended',
- 'plugin:@typescript-eslint/recommended',
- 'plugin:react-hooks/recommended',
- ],
- ignorePatterns: ['dist', '.eslintrc.cjs'],
- parser: '@typescript-eslint/parser',
- plugins: ['react-refresh'],
- rules: {
- 'react-refresh/only-export-components': [
- 'warn',
- { allowConstantExport: true },
- ],
- },
-}
diff --git a/plc4j/tools/ui/frontend/project/.gitignore b/plc4j/tools/ui/frontend/project/.gitignore
deleted file mode 100644
index 7ec0259..0000000
--- a/plc4j/tools/ui/frontend/project/.gitignore
+++ /dev/null
@@ -1,26 +0,0 @@
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-lerna-debug.log*
-
-node_modules
-dist
-dist-ssr
-*.local
-
-# Inspect directories and files
-.vscode/*
-!.vscode/extensions.json
-.idea
-.DS_Store
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw?
-/package-lock.json
-/node/
\ No newline at end of file
diff --git a/plc4j/tools/ui/frontend/project/README.md b/plc4j/tools/ui/frontend/project/README.md
deleted file mode 100644
index 8b12d8d..0000000
--- a/plc4j/tools/ui/frontend/project/README.md
+++ /dev/null
@@ -1,49 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- https://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
- -->
-
-# React + TypeScript + Vite
-
-This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
-
-Currently, two official plugins are available:
-
-- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
-- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
-
-## Expanding the ESLint configuration
-
-If you are developing a production application, we recommend updating the configuration to enable type aware lint rules:
-
-- Configure the top-level `parserOptions` property like this:
-
-```js
-export default {
- // other rules...
- parserOptions: {
- ecmaVersion: 'latest',
- sourceType: 'module',
- project: ['./tsconfig.json'],
- tsconfigRootDir: __dirname,
- },
-}
-```
-
-- Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked`
-- Optionally add `plugin:@typescript-eslint/stylistic-type-checked`
-- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list
diff --git a/plc4j/tools/ui/frontend/project/index.html b/plc4j/tools/ui/frontend/project/index.html
deleted file mode 100644
index abc30c4..0000000
--- a/plc4j/tools/ui/frontend/project/index.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- https://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
- -->
-
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="UTF-8" />
- <link rel="icon" type="image/svg+xml" href="/plc4x-favicon.png" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Vite + React + TS</title>
- </head>
- <body>
- <div id="root"></div>
- <script type="module" src="/src/main.tsx"></script>
- </body>
-</html>
diff --git a/plc4j/tools/ui/frontend/project/package.json b/plc4j/tools/ui/frontend/project/package.json
deleted file mode 100644
index a8072d6..0000000
--- a/plc4j/tools/ui/frontend/project/package.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
- "name": "frontend",
- "private": true,
- "version": "0.0.0",
- "type": "module",
- "scripts": {
- "dev": "vite",
- "build": "tsc && vite build",
- "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
- "preview": "vite preview"
- },
- "dependencies": {
- "@emotion/react": "^11.11.1",
- "@emotion/styled": "^11.11.0",
- "@mdi/js": "^7.3.67",
- "@mdi/react": "^1.6.1",
- "@mui/icons-material": "^5.14.19",
- "@mui/material": "^5.15.5",
- "@reduxjs/toolkit": "^2.0.1",
- "axios": "^1.6.2",
- "primeflex": "^3.3.1",
- "primeicons": "^6.0.1",
- "primereact": "10.2.1",
- "react": "^18.2.0",
- "react-dom": "^18.2.0",
- "react-redux": "^9.0.4",
- "react-router-dom": "^6.20.1",
- "react-use-websocket": "^4.5.0"
- },
- "devDependencies": {
- "@types/react": "^18.2.37",
- "@types/react-dom": "^18.2.15",
- "@typescript-eslint/eslint-plugin": "^6.10.0",
- "@typescript-eslint/parser": "^6.10.0",
- "@vitejs/plugin-react": "^4.2.0",
- "eslint": "^8.53.0",
- "eslint-plugin-react-hooks": "^4.6.0",
- "eslint-plugin-react-refresh": "^0.4.4",
- "typescript": "^5.2.2",
- "vite": "^5.0.0"
- },
- "proxy": {
- "/ws": {
- "target": "ws://localhost:8080",
- "ws": true
- },
- "/": {
- "target": "http://localhost:8080"
- }
- }
-}
diff --git a/plc4j/tools/ui/frontend/project/public/plc4x-favicon.png b/plc4j/tools/ui/frontend/project/public/plc4x-favicon.png
deleted file mode 100644
index 9b41571..0000000
Binary files a/plc4j/tools/ui/frontend/project/public/plc4x-favicon.png and /dev/null differ
diff --git a/plc4j/tools/ui/frontend/project/src/App.css b/plc4j/tools/ui/frontend/project/src/App.css
deleted file mode 100644
index 6208455..0000000
--- a/plc4j/tools/ui/frontend/project/src/App.css
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
diff --git a/plc4j/tools/ui/frontend/project/src/App.tsx b/plc4j/tools/ui/frontend/project/src/App.tsx
deleted file mode 100644
index 3cb5846..0000000
--- a/plc4j/tools/ui/frontend/project/src/App.tsx
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import './App.css'
-import axios from 'axios';
-import {createBrowserRouter, RouterProvider} from "react-router-dom";
-import MainLayout from "./layouts/MainLayout.tsx";
-import Inspect from "./pages/Inspect.tsx";
-import OpcUa from "./pages/OpcUa.tsx";
-import Mqtt from "./pages/Mqtt.tsx";
-import Settings from "./pages/Settings.tsx";
-import About from "./pages/About.tsx";
-import useWebSocket from 'react-use-websocket';
-import {useState} from "react";
-import {DeviceEvent, RestApplicationClient} from "./generated/plc4j-tools-ui-frontend.ts";
-import store, {
- addDevice,
- deleteDevice,
- DeviceAction,
- InitializeConnectionsAction,
- initializeLists,
- updateDevice
-} from "./store";
-
-axios.defaults.baseURL = 'http://localhost:8080';
-const restClient = new RestApplicationClient(axios);
-
-// We're actually just using this concept in order to separate the layout for the general page from the content.
-const router = createBrowserRouter([
- {
- path: '/',
- element: <MainLayout/>,
- children: [
- {path: '/inspect', element: <Inspect/>},
- {path: '/opcua', element: <OpcUa/>},
- {path: '/mqtt', element: <Mqtt/>},
- {path: '/settings', element: <Settings/>},
- {path: '/about', element: <About/>},
- ]
- },
-])
-
-function App() {
- const [initialized, setInitialized] = useState(false)
-
- useWebSocket( 'ws://localhost:8080/ws', {
- onOpen: () => {
- console.log('WebSocket connection established.');
- },
- onMessage: event => {
- const deviceEvent = JSON.parse(event.data) as DeviceEvent;
- if(deviceEvent != null) {
- switch (deviceEvent.eventType) {
- case "CREATED": {
- const action:DeviceAction = {device: deviceEvent.source}
- store.dispatch(addDevice(action));
- break;
- }
- case "UPDATED": {
- const action:DeviceAction = {device: deviceEvent.source}
- store.dispatch(updateDevice(action));
- break;
- }
- case "DELETED": {
- const action: DeviceAction = {device: deviceEvent.source}
- store.dispatch(deleteDevice(action));
- break;
- }
- }
- }
- }
- });
-
- // Load the initial list of drivers and connections and initialize the store with that.
- if(!initialized) {
- setInitialized(true);
- restClient.getAllDrivers().then(driverList => {
- restClient.getAllDevices().then(deviceList => {
- const action:InitializeConnectionsAction = {driverList:driverList.data, deviceList: deviceList.data}
- store.dispatch(initializeLists(action))
- })
- })
- }
-
- return (
- <RouterProvider router={router}/>
- )
-}
-
-export default App
diff --git a/plc4j/tools/ui/frontend/project/src/assets/plc4x-logo.svg b/plc4j/tools/ui/frontend/project/src/assets/plc4x-logo.svg
deleted file mode 100644
index b34c1c3..0000000
--- a/plc4j/tools/ui/frontend/project/src/assets/plc4x-logo.svg
+++ /dev/null
@@ -1,1494 +0,0 @@
-<!--
- - Licensed to the Apache Software Foundation (ASF) under one
- - or more contributor license agreements. See the NOTICE file
- - distributed with this work for additional information
- - regarding copyright ownership. The ASF licenses this file
- - to you under the Apache License, Version 2.0 (the
- - "License"); you may not use this file except in compliance
- - with the License. You may obtain a copy of the License at
- -
- - http://www.apache.org/licenses/LICENSE-2.0
- -
- - Unless required by applicable law or agreed to in writing,
- - software distributed under the License is distributed on an
- - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- - KIND, either express or implied. See the License for the
- - specific language governing permissions and limitations
- - under the License.
- -->
-<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 325.53 105.92">
- <defs>
- <style>
- .cls-1{fill:none;}.cls-2{isolation:isolate;}.cls-3{fill:#6d4a54;}.cls-4{fill:#694650;}.cls-5{opacity:0.13;}.cls-15,.cls-5{mix-blend-mode:multiply;}.cls-6{fill:#3c2517;}.cls-7{fill:#644c53;}.cls-8{fill:#a66870;}.cls-9{fill:#f2e8df;}.cls-10{fill:#744a54;}.cls-11{fill:#231f20;}.cls-12{fill:#fff;}.cls-13{fill:#473439;}.cls-14{fill:#f7b2c6;}.cls-15{opacity:0.15;}.cls-16{fill:#3e362f;}.cls-17{fill:#f4f0d2;}.cls-18{fill:#97646d;}.cls-19{fill:#96636a;}.cls-20{fill:#8f8280;}.cls-21{fi [...]
- </style>
- <clipPath id="clip-path">
- <path class="cls-1"
- d="M47.35,58a1.74,1.74,0,0,1,.92-.09V58s0-.14,0-.16l-2.63-1.61a1.4,1.4,0,0,1-.27.58c.66.41,1.31.79,2,1.2Z"/>
- </clipPath>
- <clipPath id="clip-path-2">
- <path class="cls-1" d="M26.79,35.08c0,.12,0,.24,0,.37h0C26.78,35.32,26.79,35.2,26.79,35.08Z"/>
- </clipPath>
- <linearGradient id="linear-gradient" x1="251.28" y1="114.16" x2="251.58" y2="28.41"
- gradientUnits="userSpaceOnUse">
- <stop offset="0.32" stop-color="#9d2064"/>
- <stop offset="0.63" stop-color="#c92039"/>
- <stop offset="0.75" stop-color="#cd2035"/>
- <stop offset="1" stop-color="#e77927"/>
- </linearGradient>
- <linearGradient id="New_Gradient_Swatch_3" x1="300.05" y1="114.33" x2="300.35" y2="28.58"
- xlink:href="#linear-gradient"/>
- <linearGradient id="New_Gradient_Swatch_6" x1="-7176.48" y1="-1345.82" x2="-7167.47" y2="-1335.28"
- gradientTransform="translate(-4822.37 -5452.12) rotate(-142)" gradientUnits="userSpaceOnUse">
- <stop offset="0" stop-color="#f49624"/>
- <stop offset="0.31" stop-color="#f79823"/>
- <stop offset="0.84" stop-color="#e77927"/>
- </linearGradient>
- <linearGradient id="New_Gradient_Swatch_3-2" x1="-7243.18" y1="-1346.98" x2="-7178.89" y2="-1346.98"
- gradientTransform="translate(-4822.37 -5452.12) rotate(-142)" xlink:href="#linear-gradient"/>
- <linearGradient id="New_Gradient_Swatch_5" x1="-7235.42" y1="-1340.53" x2="-7197.11" y2="-1340.53"
- gradientTransform="translate(-4822.37 -5452.12) rotate(-142)" gradientUnits="userSpaceOnUse">
- <stop offset="0" stop-color="#272761"/>
- <stop offset="0.1" stop-color="#66318b"/>
- <stop offset="0.79" stop-color="#9f2065"/>
- <stop offset="0.95" stop-color="#cd2032"/>
- </linearGradient>
- <linearGradient id="New_Gradient_Swatch_3-3" x1="-7239.57" y1="-1347.58" x2="-7175.28" y2="-1347.58"
- gradientTransform="translate(-4822.37 -5452.12) rotate(-142)" xlink:href="#linear-gradient"/>
- <linearGradient id="New_Gradient_Swatch_5-2" x1="-7234.74" y1="-1347.22" x2="-7201.18" y2="-1347.22"
- xlink:href="#New_Gradient_Swatch_5"/>
- <linearGradient id="New_Gradient_Swatch_3-4" x1="-7239.57" y1="-1340.92" x2="-7175.28" y2="-1340.92"
- gradientTransform="translate(-4822.37 -5452.12) rotate(-142)" xlink:href="#linear-gradient"/>
- <linearGradient id="New_Gradient_Swatch_3-5" x1="-7243.56" y1="-1341.26" x2="-7179.26" y2="-1341.26"
- gradientTransform="translate(-4822.37 -5452.12) rotate(-142)" xlink:href="#linear-gradient"/>
- <linearGradient id="New_Gradient_Swatch_3-6" x1="-7239.57" y1="-1338.95" x2="-7175.28" y2="-1338.95"
- gradientTransform="translate(-4822.37 -5452.12) rotate(-142)" xlink:href="#linear-gradient"/>
- <linearGradient id="New_Gradient_Swatch_3-7" x1="-7239.57" y1="-1339.17" x2="-7175.28" y2="-1339.17"
- gradientTransform="translate(-4822.37 -5452.12) rotate(-142)" xlink:href="#linear-gradient"/>
- <linearGradient id="New_Gradient_Swatch_3-8" x1="-7203.45" y1="-1339.22" x2="-7189.24" y2="-1339.22"
- gradientTransform="translate(-4822.37 -5452.12) rotate(-142)" xlink:href="#linear-gradient"/>
- </defs>
- <title>Asset 1</title>
- <g class="cls-2">
- <g id="Layer_2" data-name="Layer 2">
- <g id="Layer_1-2" data-name="Layer 1">
- <path class="cls-3"
- d="M134.89,46.77c0,12.19-7.6,19-19.47,19h-9.29V79c0,2.39-.83,3.24-3.19,3.24H94.26c-2.36,0-3.19-.85-3.19-3.24V30.73c0-2.39.83-3.24,3.19-3.24h21.08C127.13,27.49,134.89,34.51,134.89,46.77ZM119.3,46.7c0-3.4-2.06-5.71-5.63-5.71h-7.54V52.33h7.54A5.25,5.25,0,0,0,119.3,46.7Z"/>
- <path class="cls-3"
- d="M153.46,30.73v38h18.26c2.44,0,3.27.78,3.27,3.24v7c0,2.39-.83,3.24-3.27,3.24H141.59c-2.36,0-3.2-.85-3.2-3.24V30.73c0-2.39.84-3.24,3.2-3.24h8.67C152.62,27.49,153.46,28.34,153.46,30.73Z"/>
- <path class="cls-3"
- d="M200.75,26.34c11.72,0,19.1,4.85,22.22,13.49.84,2.24.23,3.4-2.05,4.17l-8.15,2.93c-2.35.69-3.19.31-4.1-2.08-1.3-3.47-3.58-5-7.92-5-5.93,0-8.29,2.62-8.29,8v14c0,5.4,2.36,8,8.29,8,4.26,0,6.7-1.7,8-5,.84-2.39,1.83-2.93,4.11-2.08l8.07,2.93c2.28.77,2.89,1.92,2.05,4.16-3.12,8.64-10.5,13.5-22.22,13.5-14.91,0-23.36-8.25-23.36-21.6V47.93C177.39,34.59,185.84,26.34,200.75,26.34Z"/>
- <path class="cls-4"
- d="M281.15,20.75h-.29c-.23,0-.3,0-.35-.18l-.73-1.87H276.7L276,20.57c0,.14-.12.18-.35.18h-.26c-.16,0-.19-.07-.14-.19l2.64-6.66a.21.21,0,0,1,.25-.17h.3c.14,0,.2,0,.25.16l2.63,6.67C281.33,20.68,281.3,20.75,281.15,20.75Zm-2.76-5.66a2.57,2.57,0,0,1-.14-.68h-.05a3.14,3.14,0,0,1-.12.68l-1.18,3h2.67Z"/>
- <path class="cls-4"
- d="M289.79,15.94a2,2,0,0,1-2.22,2.18h-2.12v2.43c0,.15-.05.2-.2.2h-.32c-.15,0-.2-.05-.2-.2V14c0-.15,0-.2.2-.2h2.64A2,2,0,0,1,289.79,15.94Zm-.76,0a1.4,1.4,0,0,0-1.54-1.51h-2.05v3h2.05A1.4,1.4,0,0,0,289,15.94Z"/>
- <path class="cls-4"
- d="M298.19,20.75h-.29c-.23,0-.3,0-.35-.18l-.73-1.87h-3.08L293,20.57c-.05.14-.11.18-.35.18h-.26c-.15,0-.18-.07-.13-.19l2.63-6.66a.21.21,0,0,1,.25-.17h.3c.14,0,.2,0,.25.16l2.64,6.67C298.38,20.68,298.35,20.75,298.19,20.75Zm-2.76-5.66a2.82,2.82,0,0,1-.13-.68h-.05a2.82,2.82,0,0,1-.13.68l-1.18,3h2.68Z"/>
- <path class="cls-4"
- d="M304.12,13.62a2.38,2.38,0,0,1,2.62,1.68c.05.15,0,.21-.13.26l-.31.11c-.13,0-.19,0-.24-.12a1.73,1.73,0,0,0-1.94-1.27c-1.31,0-2,.67-2,1.8v2.34c0,1.13.7,1.8,2,1.8a1.74,1.74,0,0,0,1.95-1.29c.06-.14.12-.17.25-.13l.31.12c.14,0,.17.1.12.24a2.39,2.39,0,0,1-2.63,1.72c-1.74,0-2.71-.93-2.71-2.47V16.09C301.41,14.56,302.36,13.62,304.12,13.62Z"/>
- <path class="cls-4"
- d="M315.62,14v6.59c0,.15-.05.2-.2.2h-.32c-.15,0-.2-.05-.2-.2v-3h-3.74v3c0,.15-.05.2-.2.2h-.32c-.15,0-.2-.05-.2-.2V14c0-.15.05-.2.2-.2H311c.15,0,.2.05.2.2v2.91h3.74V14c0-.15.05-.2.2-.2h.32C315.57,13.76,315.62,13.81,315.62,14Z"/>
- <path class="cls-4"
- d="M324.09,14v.27c0,.15,0,.2-.2.2h-3.47v2.44h3c.14,0,.19.05.19.2v.27c0,.15-.05.2-.19.2h-3v2.54H324c.13,0,.18.05.18.19v.28c0,.15-.05.2-.18.2H319.9c-.15,0-.19-.05-.19-.2V14c0-.15,0-.2.19-.2h4C324,13.76,324.09,13.81,324.09,14Z"/>
- <g class="cls-5">
- <path class="cls-6"
- d="M90.45,87.94s2.46,8-7.72,13.13c-14.94,7.5-25,5.06-34,1-1.17-.52-2,.19-3.07-7.68s2.64,3.24,3.21,3.31,23.75-.42,23.75-.42Z"/>
- </g>
- <path class="cls-7"
- d="M90.87,88.31a1.76,1.76,0,0,1,0,.48l0,.36a6.21,6.21,0,0,1-.13.73,10.36,10.36,0,0,1-.4,1.42,12.7,12.7,0,0,1-3.22,5A16.1,16.1,0,0,1,82,99.69l-.71.31-.74.25c-.48.18-1,.29-1.48.43-1,.23-2.06.41-3,.59l-3,1.22a18.53,18.53,0,0,1-3.56,1.23c-1.21.29-2.43.53-3.65.71s-2.45.34-3.67.45l-1.84.15-.31,0h-.53l-.18,0-.9-.13a65.47,65.47,0,0,1-7.17-1.22,14.85,14.85,0,0,1-3.4-1.37c-.53-.29-1-.6-1.55-.93l-.45-.31L45.7,101s0,.08,0,.11v.16c0,.49,0,1,0,1.48l.07,2.6L44.69,103c-.52-1.08-1-2 [...]
- <path class="cls-8"
- d="M90.14,88.49a1,1,0,0,1,0,.21l-.05.34a5.09,5.09,0,0,1-.12.68,10.14,10.14,0,0,1-.39,1.33,12,12,0,0,1-3.07,4.7,15.53,15.53,0,0,1-4.84,3.18l-.68.28-.7.23c-.46.17-1,.28-1.42.41-1,.21-1.92.36-3,.57l-3.17,1.25h0a18.09,18.09,0,0,1-3.4,1.13c-1.16.28-2.36.5-3.56.68l-1.45.19c.13-.25.3-.58.5-1s.49-1,.73-1.55a5.19,5.19,0,0,0,.46-1.93,3.85,3.85,0,0,0-.25-2,4.18,4.18,0,0,0-1.06-1.36,3,3,0,0,0-.66-.44,35.84,35.84,0,0,0,6.35-2.19c2.68-1.18,5.48-2.68,8.47-4.21.76-.37,1.51-.77,2.29 [...]
- <path class="cls-7"
- d="M88,7.18a18.2,18.2,0,0,1-.09,2,22.89,22.89,0,0,1-.78,4.09,21.5,21.5,0,0,1-1.48,3.82,8.88,8.88,0,0,1-.88,1.45c0-.06,0-.09,0-.09a.79.79,0,0,0,0,.14h0s-.07.05-.09,0a7.62,7.62,0,0,1,.54-1.75,29.25,29.25,0,0,0,1-3.84,25.11,25.11,0,0,0,.48-3.95c0-1.09,0-1.82,0-1.87a11.5,11.5,0,0,0,0-1.16c-.05-.63-.18-1.59-.84-1.91a2.89,2.89,0,0,0-1.36-.23,15.37,15.37,0,0,0-1.63.14c-.54.07-1.08.11-1.58.16h-.48l-.46,0c.17.27.3.49.39.65s.22.4.19.43-.17-.08-.38-.27S80,4.6,79.66,4.2l.23.06c [...]
- <path class="cls-9"
- d="M86.7,7.22s.06.78,0,1.87A25.11,25.11,0,0,1,86.24,13a29.25,29.25,0,0,1-1,3.84,7.62,7.62,0,0,0-.54,1.75s0,0,.09,0c0,.31,0,1.08,0,1.84,0,.5-.06,1-.1,1.38s-.07.63-.07.65,0,.27-.08.64-.11.76-.2,1.19c0-.09,0-.19,0-.3,0-.29,0-.63,0-1a7.16,7.16,0,0,0-.42-1.35,5,5,0,0,0-1-1.34A7.31,7.31,0,0,0,81.41,19a6.82,6.82,0,0,0-3.92-.93,4.21,4.21,0,0,0-2,.82A6.4,6.4,0,0,0,74,20.35a5.3,5.3,0,0,0-.85,1.74c-.18.57-.31,1.11-.42,1.62a32.86,32.86,0,0,0-.55,3.49c0,.08-.16,1.47-.21,3.51a15. [...]
- <path class="cls-7"
- d="M86.37,27l-.22.33c-.26.37-.62.88-1.06,1.46l-.69.91c-.11.16-.24.32-.36.48a1.94,1.94,0,0,0-.13.2l.15.08.47.27,1.65,1-2.52.84s-.26-.26-.51-.53l-.21.76.72-.23h0c0,.15-.06.26-.08.35v0c-.08.32-.09.37-.1.39l-.09.06s-.12.06-.26.16l-.24.19a4.89,4.89,0,0,0-.72.85c-.5.81-1.17,2-2,3.11a9.16,9.16,0,0,1-1.36,1.48,4.41,4.41,0,0,1-.78.52c-.25.14-.5.26-.72.37a4,4,0,0,1-1.58.54,12.63,12.63,0,0,1,1.39-.88,7.12,7.12,0,0,0,1.32-1,8.35,8.35,0,0,0,1.16-1.48c.71-1.09,1.26-2.25,1.78-3.18 [...]
- <path class="cls-10" d="M86,27.13l.13.2-.37.05Z"/>
- <path class="cls-7"
- d="M85.93,5.27a3.52,3.52,0,0,1,.09.85,4.77,4.77,0,0,1-.32,1.66,13.38,13.38,0,0,1-.94,1.93l-.14-.26h0c.06-.43.24-1.16.41-1.87a4.49,4.49,0,0,0,.09-1.42l0-.22a.2.2,0,0,1,.08,0,.38.38,0,0,1,.09.08l-.07,0v0h0l.06,0a0,0,0,0,1,0,0,.57.57,0,0,1,.11-.1l-.12.07v0l.7-.38a.77.77,0,0,0-.67-.23h-.14l.28-.12C85.68,5.23,85.92,5.21,85.93,5.27Z"/>
- <path class="cls-7"
- d="M86,5.68l-.7.38A.38.38,0,0,0,85.17,6a.2.2,0,0,0-.08,0,3.17,3.17,0,0,0-.1-.38s.06,0,.15-.1h.15A.77.77,0,0,1,86,5.68Z"/>
- <path class="cls-7"
- d="M85.64,12.47a6.33,6.33,0,0,1-.18,1.31,5.29,5.29,0,0,1-.56,1.76,9.48,9.48,0,0,1,.1-1.82,7.64,7.64,0,0,0,0-1.22,4.42,4.42,0,0,0-.1-.54s0-.24-.11-.57-.2-.76-.35-1.19a11.42,11.42,0,0,1-.56-1.74c.07,0,.38.4.7,1h0c0,.22,0,.35,0,.37s.07,0,.13-.11c0,.1.1.21.16.31a9.92,9.92,0,0,1,.49,1.21c.12.34.17.59.18.6A6.26,6.26,0,0,1,85.64,12.47Z"/>
- <path class="cls-7" d="M85.27,6.09,85.39,6a.57.57,0,0,0-.11.1A0,0,0,0,0,85.27,6.09Z"/>
- <path class="cls-11" d="M85.26,6.06v0l-.06,0h0v0Z"/>
- <path class="cls-7"
- d="M85.14,5.46c-.09,0-.15.08-.15.1a3.17,3.17,0,0,1,.1.38A1.71,1.71,0,0,0,84,6.05a2.85,2.85,0,0,0-1.1.74,1.39,1.39,0,0,0-.24.35l-.5-.72a2.49,2.49,0,0,0,.44-.09,11.1,11.1,0,0,0,1.32-.49A5.33,5.33,0,0,1,85.14,5.46Z"/>
- <path class="cls-9"
- d="M85.71,27.38c-.28.29-.62.65-1,1.06s-.49.56-.76.85l-.4.46-.66.76-.28-.09c.29-1,.59-2.12.81-2.93C83.53,27.52,85,27.45,85.71,27.38Z"/>
- <path class="cls-7"
- d="M84.93,20.44c0,.5,0,1,0,1.39s-.06.65-.06.67,0,.27-.1.65-.18.88-.31,1.36-.32,1-.46,1.31a3.35,3.35,0,0,1-.26.57,14.12,14.12,0,0,1,.43-1.68c0,.13,0,.19,0,.19s0-.22,0-.61.16-.85.2-1.19.07-.63.08-.64,0-.27.07-.65.08-.88.1-1.38c0-.76,0-1.53,0-1.84h0l.05,0A12.72,12.72,0,0,1,84.93,20.44Z"/>
- <path class="cls-7"
- d="M84.23,42.73c.44.18.69.36.67.4a3.54,3.54,0,0,1-.75-.15,15.35,15.35,0,0,0-1.64-.3c-.6-.08-1.21-.15-1.67-.19l-.8-.06-.79-.1a5.52,5.52,0,0,0-1.61,0,13.16,13.16,0,0,0-1.43.34V42.4a8.88,8.88,0,0,1,1.33-.48,5.75,5.75,0,0,1,.92-.18,5.87,5.87,0,0,1,.83,0l.82,0s.34,0,.81.12,1.07.19,1.68.34A11,11,0,0,1,84.23,42.73Z"/>
- <path class="cls-11" d="M84.79,18.53l-.05,0a.79.79,0,0,1,0-.14S84.78,18.47,84.79,18.53Z"/>
- <path class="cls-7" d="M84.62,9.45l.14.26c-.06.08-.11.12-.13.11S84.59,9.67,84.62,9.45Z"/>
- <path class="cls-9"
- d="M84.25,31.42l-.15,0h0l-.28.08-1.11.31-.51.14c.13-.37.29-.94.47-1.56l.28.09,1.2.78Z"/>
- <path class="cls-7"
- d="M84.24,24c0,.11,0,.21,0,.3a.85.85,0,0,0,0,.17l-.06.25c0-.16-.07-.39-.11-.7s-.08-.63-.13-1a10.2,10.2,0,0,0-.47-1.21,4.69,4.69,0,0,0-1-1.17,6.62,6.62,0,0,0-1.33-1.08,6.21,6.21,0,0,0-3.58-.71,3.61,3.61,0,0,0-1.61.73,5.45,5.45,0,0,0-1.25,1.29A4.39,4.39,0,0,0,74,22.34l0,.09a3.44,3.44,0,0,0-.71.65s.21-.15.63-.36c0,0,0,0,0,.06-.86.76-1.1,1.77-1.2,4a11.17,11.17,0,0,0,.24,3.6h0a3.25,3.25,0,0,0,0,.33c0,.36,0,.74,0,1.13a.27.27,0,0,0-.15.18.32.32,0,0,0,.15.35A14.36,14.36,0,0 [...]
- <path class="cls-10" d="M84.25,24.29c0,.39,0,.62,0,.61s0-.06,0-.19l.06-.25A.85.85,0,0,1,84.25,24.29Z"/>
- <path class="cls-8"
- d="M84,24c0,.31.08.54.11.7a14.12,14.12,0,0,0-.43,1.68v0h0a.3.3,0,0,1,0,.11.39.39,0,0,1,0,.13s0,.06,0,.1,0,.18-.08.28a1.21,1.21,0,0,1,0,.18,1.8,1.8,0,0,1,0,.19s0,0,0,0a.42.42,0,0,0,0,.06,0,0,0,0,1,0,0c-.16.57-.37,1.26-.6,1.85l-1.35-.11a7.18,7.18,0,0,0,.15-2.11,4.53,4.53,0,0,0-.64-2,11.8,11.8,0,0,0-1.13-1.66,4.19,4.19,0,0,0-1.46-1.21,5,5,0,0,0-4.1,0l-.32.2,0-.09a4.39,4.39,0,0,1,.69-1.51,5.45,5.45,0,0,1,1.25-1.29,3.61,3.61,0,0,1,1.61-.73,6.21,6.21,0,0,1,3.58.71,6.62,6. [...]
- <path class="cls-10" d="M83.43,27.47v0h0A0,0,0,0,0,83.43,27.47Z"/>
- <path class="cls-7" d="M83.66,32.5l-.72.23.21-.76C83.4,32.24,83.63,32.48,83.66,32.5Z"/>
- <path class="cls-7"
- d="M83.34,41.11A14.82,14.82,0,0,1,81.12,41a10.13,10.13,0,0,0-1.52.06c-.41,0-.69.1-.7.1l-.72.09c-.42.06-1,.15-1.51.28l-.6.13c0-.13-.07-.26-.11-.38l.59-.2a14,14,0,0,1,1.52-.43l.73-.15s.32,0,.76,0a10.16,10.16,0,0,1,1.59.09A7.06,7.06,0,0,1,83.34,41.11Z"/>
- <path class="cls-8"
- d="M81.47,29.23l1.35.11c-.06.17-.13.34-.19.49-.53,1.21-.65,2.28-1,2.71s-.56.71-.56.71c-.44.36-1.08.88-1.86,1.48s-1.71,1.31-2.71,2c-.5.36-1,.74-1.55,1.09l-.41.26-.14.07-.15,0c-.05,0-.11,0-.12-.07L74.06,38l-.1-.22a13.5,13.5,0,0,1-1-3.66,14.36,14.36,0,0,1-.13-1.69.54.54,0,0,0,.17.07,3.86,3.86,0,0,0,1.09,0,15.52,15.52,0,0,0,2.54-.42A14,14,0,0,0,80,30.75a6.71,6.71,0,0,0,.84-.59,4.54,4.54,0,0,0,.38-.38,1.25,1.25,0,0,0,.09-.12l.09-.16C81.42,29.41,81.45,29.31,81.47,29.23Z"/>
- <path class="cls-10" d="M82,32l.16-.05c0,.06-.05.12-.07.17Z"/>
- <path class="cls-7"
- d="M81.62,27.12a7.18,7.18,0,0,1-.15,2.11c0,.08,0,.18-.08.27l-.09.16a1.25,1.25,0,0,1-.09.12,4.54,4.54,0,0,1-.38.38,6.71,6.71,0,0,1-.84.59,14,14,0,0,1-3.33,1.35,15.52,15.52,0,0,1-2.54.42,3.86,3.86,0,0,1-1.09,0,.54.54,0,0,1-.17-.07,4.68,4.68,0,0,1,0-.53.4.4,0,0,1,.29-.05,3.21,3.21,0,0,0,.81.06h0a2.69,2.69,0,0,0,1.72.23,3.31,3.31,0,0,0,1.76-.88,11.78,11.78,0,0,0,2.26-1,5.84,5.84,0,0,0,.77-.53,2.46,2.46,0,0,0,.33-.31l.07-.08s0,0,0-.06a.65.65,0,0,0,.07-.21,7,7,0,0,0,.18-1 [...]
- <path class="cls-12"
- d="M81.16,27.14A7,7,0,0,1,81,29.09a.65.65,0,0,1-.07.21s0,0,0,.06l-.07.08a2.46,2.46,0,0,1-.33.31,5.84,5.84,0,0,1-.77.53,11.78,11.78,0,0,1-2.26,1,5.92,5.92,0,0,0,1.7-4.14c.09-2.17-1.34-4.54-2.93-5h.5a4.3,4.3,0,0,1,1.53.45,3.85,3.85,0,0,1,1.31,1.15A6.79,6.79,0,0,1,81.16,27.14Z"/>
- <path class="cls-10" d="M80.05,4c.16.17.21.27.18.32s-.15,0-.34,0l-.23-.06q-.14-.13-.27-.3l.47-.09Z"/>
- <path class="cls-7"
- d="M79.86,3.81l-.47.09q.14.16.27.3c-.3-.08-.72-.23-1.23-.42S77,3.21,76.17,2.92A16.23,16.23,0,0,0,74,2.38a2.93,2.93,0,0,1,.9-.32L74.49,1l0-.06a14.46,14.46,0,0,1,2.14.87A24.26,24.26,0,0,1,78.8,3.07C79.25,3.36,79.6,3.61,79.86,3.81Z"/>
- <path class="cls-7"
- d="M78.17,43.57c.6.25,1.15.62,1.1.7A5.18,5.18,0,0,1,78,44l-.84-.17-.38,0-.38,0H76a3.49,3.49,0,0,0,.18-.57,4.09,4.09,0,0,1,.7,0l.13,0,.33.07A9.1,9.1,0,0,1,78.17,43.57Z"/>
- <path class="cls-13"
- d="M76.22,22.06c1.59.5,3,2.87,2.93,5a5.92,5.92,0,0,1-1.7,4.14c-.33.11-.64.2-.94.27a15.51,15.51,0,0,1-2.44.38H74a2.34,2.34,0,0,1-1-1.47h0c.1-1.82.25-3,.26-3.11s.1-1.45.46-3.41c.06-.36.15-.73.24-1.11a.36.36,0,0,1,.11-.1h0a5.88,5.88,0,0,1,2.18-.61Z"/>
- <path class="cls-7"
- d="M76.51,31.51c.3-.07.61-.16.94-.27a3.31,3.31,0,0,1-1.76.88A2.69,2.69,0,0,1,74,31.89h.1A15.51,15.51,0,0,0,76.51,31.51Z"/>
- <path class="cls-7" d="M76.21,42.4v.31l-.56.16a1.7,1.7,0,0,1,0-.22A4.25,4.25,0,0,1,76.21,42.4Z"/>
- <path class="cls-7"
- d="M76.17,42.09a2.91,2.91,0,0,1,0,.31,4.25,4.25,0,0,0-.52.25,2.18,2.18,0,0,0,0-.51c0-.12,0-.25,0-.37l.41-.11C76.11,41.8,76.14,41.94,76.17,42.09Z"/>
- <path class="cls-7" d="M76.21,42.71a3.7,3.7,0,0,1-.06.48,4,4,0,0,0-.65.14,3.1,3.1,0,0,0,.15-.46Z"/>
- <path class="cls-7"
- d="M76.15,43.19a3.49,3.49,0,0,1-.18.57h0l-.41,0-.32,0a2.7,2.7,0,0,0,.17-.31l.09-.18A4,4,0,0,1,76.15,43.19Z"/>
- <path class="cls-7" d="M76,41.28c0,.12.08.25.11.38l-.41.11c0-.12,0-.24,0-.35Z"/>
- <path class="cls-7"
- d="M76,41.28l-.35.14c0-.29-.1-.55-.16-.77a1.23,1.23,0,0,0-.17-.42c-.07-.08-.14-.1-.14-.13s.08-.05.22,0a1.1,1.1,0,0,1,.33.45h0A5.14,5.14,0,0,1,76,41.28Z"/>
- <path class="cls-7"
- d="M74.69,22.21a1.81,1.81,0,0,1,1.52-.15,5.88,5.88,0,0,0-2.18.61h0A4.26,4.26,0,0,1,74.69,22.21Z"/>
- <path class="cls-7"
- d="M75.56,43.79l.41,0a4.13,4.13,0,0,1-.38.71,6.18,6.18,0,0,1-.52.59,7,7,0,0,1-1.28,1,2.41,2.41,0,0,1-.56.22,3,3,0,0,1-1,.07c-.43-.05-.7-.15-.7-.2s.3,0,.7,0a2.76,2.76,0,0,0,1.36-.44,7.27,7.27,0,0,0,1.09-1c.27-.31.41-.54.43-.55s.07-.1.18-.27Z"/>
- <path class="cls-7"
- d="M75.69,42.65a1.7,1.7,0,0,0,0,.22c-.23.06-.36.09-.37.06S75.42,42.79,75.69,42.65Z"/>
- <path class="cls-7" d="M75.61,41.42c0,.11,0,.23,0,.35-.65.16-1.15.31-1.17.23A4,4,0,0,1,75.61,41.42Z"/>
- <path class="cls-7" d="M75.5,43.33l-.09.18a2.7,2.7,0,0,1-.17.31c-.5.07-.93.16-.95.09s.54-.4,1.18-.58Z"/>
- <path class="cls-7"
- d="M75,42.81a.77.77,0,0,1,0,.38c-.06.14-.15.22-.27.2a.33.33,0,0,1-.23-.23.37.37,0,0,1,0-.38s.08,0,.14.08c-.12.11,0,.43.13.4s.22-.54.14-.51a2.65,2.65,0,0,0-.27.11s.06-.07.21-.14.09,0,.12,0A.17.17,0,0,1,75,42.81Z"/>
- <path class="cls-7"
- d="M74.49,1l.42,1.09a2.93,2.93,0,0,0-.9.32l-.69-.13L73,2.19,73.22,2A9.11,9.11,0,0,1,74.49,1Z"/>
- <path class="cls-7"
- d="M74.61,42.87a.55.55,0,0,0,.06.08h0v0s0,0,0,0,0,.07.06,0l0-.09s0,0,0-.06,0,0,0,0A.36.36,0,0,1,74.61,42.87Zm.25-.12c.08,0,0,.49-.14.51s-.25-.29-.13-.4A2.65,2.65,0,0,1,74.86,42.75Z"/>
- <path class="cls-7"
- d="M74.79,42.87s0,.05,0,.06l0,.09s-.07,0-.06,0,0,0,0,0v0h0a.55.55,0,0,1-.06-.08.36.36,0,0,0,.14,0S74.79,42.85,74.79,42.87Z"/>
- <path class="cls-7"
- d="M74.51.91l0,.06a9.11,9.11,0,0,0-1.27,1L73,2.19a3.64,3.64,0,0,1-.44-.07l-.41-.05a1.48,1.48,0,0,0-.31,0,8.43,8.43,0,0,0-1.47.11c-.31,0-.62.1-.92.15l0,0a4.35,4.35,0,0,0-.7-1,1.22,1.22,0,0,0-.45-.3L68.16.37c.63-.07,1.29-.15,2-.18A10.33,10.33,0,0,1,72,.24c.16,0,.34.07.51.1l.4.11.79.21Z"/>
- <path class="cls-7"
- d="M74.37,41.41a.5.5,0,0,1-.21.35.48.48,0,0,1-.4.09.19.19,0,0,1-.13-.24.56.56,0,0,1,.13-.24l.06-.08s.08,0,.14.1c-.27.26-.24.39,0,.33s.46-.46.23-.39l-.23.06s.08-.07.25-.12a.13.13,0,0,1,.13,0A.17.17,0,0,1,74.37,41.41Z"/>
- <path class="cls-7"
- d="M74.19,41.33c.23-.07,0,.35-.23.39s-.27-.07,0-.33a.46.46,0,0,1,.11.12s0,0,0,0,0,.05,0,0a.46.46,0,0,0,.07-.07s0-.11,0-.09-.16,0-.17,0Z"/>
- <path class="cls-7"
- d="M74.18,43.17a.69.69,0,0,1-.22.62c-.32.22-.44.26-.54.74a.57.57,0,0,1-.23.3.51.51,0,0,1-.16.09s-.09,0-.12,0,0,0,0,0a.83.83,0,0,1,.06-.21.36.36,0,0,0,0-.11s0,0,0-.22c0,0,0,0,0,0h0l-.08,0-.14,0c-.08,0-.13,0-.13,0s0,0,.09-.1a.55.55,0,0,1,.38-.14c.1.09,0,.21,0,.31s.06,0,.09,0l.08-.08a.38.38,0,0,0,.07-.21v0a.19.19,0,0,1,0-.08.42.42,0,0,1,0-.1.34.34,0,0,1,.07-.11,1.62,1.62,0,0,1,.18-.19l.18-.15c.15-.13.07-.38-.11-.6a1.4,1.4,0,0,0-.32-.28,1.06,1.06,0,0,0-.38-.12,3.17,3.17 [...]
- <path class="cls-7"
- d="M74.13,41.41s.05.05,0,.09a.46.46,0,0,1-.07.07s-.07,0,0,0,0,0,0,0a.46.46,0,0,0-.11-.12S74.06,41.41,74.13,41.41Z"/>
- <path class="cls-7"
- d="M73.32,2.25l.69.13a3.27,3.27,0,0,0-.42.21,6.43,6.43,0,0,0-.73.48,3.69,3.69,0,0,0-.72.78,8.45,8.45,0,0,0-.67,1.2,15.41,15.41,0,0,0-.75,2l-.15.49s0,0,0,0l0-.13,0-.25-.06-.49c-.05-.32-.09-.64-.13-.94a5.8,5.8,0,0,0-.21-.89c-.07-.19-.16-.38-.24-.55a6.8,6.8,0,0,0-1-1.53l-.28-.29.87-.18a12.39,12.39,0,0,1,.83,1.76,5.46,5.46,0,0,1,.21.61,3,3,0,0,1,.1.5q0,.27.06.57l0,.32,0,.16V6.3s0,0,0,0A2.55,2.55,0,0,1,70.77,6c.15-.43.3-.84.43-1.18a13.45,13.45,0,0,1,.62-1.26,4.62,4.62,0, [...]
- <path class="cls-12" d="M73.89,22.72l.1,0a.36.36,0,0,0-.11.1S73.89,22.74,73.89,22.72Z"/>
- <path class="cls-7" d="M74,22.43c0,.1,0,.2-.08.29-.42.21-.6.36-.63.36A3.44,3.44,0,0,1,74,22.43Z"/>
- <path class="cls-12"
- d="M74,31.89a3.21,3.21,0,0,1-.81-.06.4.4,0,0,0-.29.05c0-.39,0-.77,0-1.13a3.25,3.25,0,0,1,0-.33A2.34,2.34,0,0,0,74,31.89Z"/>
- <path class="cls-7"
- d="M74,60.42a.55.55,0,0,1-.14.35,1.17,1.17,0,0,1-.24.21,2.14,2.14,0,0,1-.48.27.83.83,0,0,1-.4,0,.13.13,0,0,0,0-.06.86.86,0,0,0,.34-.09,2.23,2.23,0,0,0,.42-.3c.14-.12.28-.25.26-.41a2,2,0,0,0-.47-.93.61.61,0,0,0-.36-.23.21.21,0,0,1,0-.13v0c0-.09,0-.16.1-.16s.07,0,.18.08a1.17,1.17,0,0,1,.34.28,2.35,2.35,0,0,1,.29.49A1.59,1.59,0,0,1,74,60.42Z"/>
- <path class="cls-9"
- d="M73.8,60.42c0,.16-.12.29-.26.41a2.23,2.23,0,0,1-.42.3.86.86,0,0,1-.34.09,4.88,4.88,0,0,0,.08-.61,6.06,6.06,0,0,0,.06-1c0-.18,0-.34,0-.48h0a.21.21,0,0,0,0,.13.61.61,0,0,1,.36.23A2,2,0,0,1,73.8,60.42Z"/>
- <path class="cls-7"
- d="M73.88,22.78c-.09.38-.18.75-.24,1.11-.36,2-.44,3.33-.46,3.41s-.16,1.29-.26,3.11a11.17,11.17,0,0,1-.24-3.6C72.78,24.55,73,23.54,73.88,22.78Z"/>
- <path class="cls-14"
- d="M73.59,42.9c.18.22.26.47.11.6l-.18.15a1.62,1.62,0,0,0-.18.19.34.34,0,0,0-.07.11.42.42,0,0,0,0,.1.19.19,0,0,0,0,.08v0a.38.38,0,0,1-.07.21l-.08.08s-.09.06-.09,0,.12-.22,0-.31a.55.55,0,0,0-.38.14c-.07.06-.1.09-.09.1s0,0,.13,0l.14,0,.08,0h0s0,0,0,0c0,.2,0,.17,0,.22a.36.36,0,0,1,0,.11.83.83,0,0,0-.06.21s0,0,0,0v0c-.05,0-.09,0-.14,0s-.27.2-.39.27a.58.58,0,0,1-.44.13.16.16,0,0,0,0-.14c0-.09-.09-.09-.09-.08a.3.3,0,0,1,0,.09s-.08.09-.18.13a3.33,3.33,0,0,1-.78.22,1.59,1.59 [...]
- <path class="cls-7"
- d="M73.66,53.78a3,3,0,0,1-.08.71c-.1.39-.26.81-.38,1.27s-.3,1.15-.38,1.5c0-.17,0-.36-.09-.56s0-.28-.07-.42,0-.41.08-.62c.06-.47.2-1,.25-1.28a2,2,0,0,0,0-.4.79.79,0,0,0,0-.14.91.91,0,0,0-.11-.44,1.84,1.84,0,0,0-.94-.61l-.11,0c0-.18-.09-.36-.15-.53l.4.13a2.22,2.22,0,0,1,1.29.7,1.42,1.42,0,0,1,.24.51C73.65,53.7,73.65,53.78,73.66,53.78Z"/>
- <path class="cls-7"
- d="M73.25,46.34s-.07.28-.36.6a2.84,2.84,0,0,1-1.33.85,4.87,4.87,0,0,1-1,.18v0a.33.33,0,0,0-.32-.31l-.49.2v-.4l.12-.09.21,0a4.38,4.38,0,0,0,1.39,0,3.16,3.16,0,0,0,1.28-.58,4.89,4.89,0,0,1,.52-.42Z"/>
- <path class="cls-9"
- d="M73,54a2,2,0,0,1,0,.4c0,.31-.19.81-.25,1.28,0,.21-.06.42-.08.62-.15-.86-.4-1.9-.66-2.93l-.16-.6.11,0a1.84,1.84,0,0,1,.94.61.91.91,0,0,1,.11.44A.79.79,0,0,1,73,54Z"/>
- <path class="cls-7"
- d="M72.92,45c-.06,0-.21.24-.42.45a.76.76,0,0,1-.55.18.47.47,0,0,1-.24-.08.2.2,0,0,0,.09-.06.47.47,0,0,0,.13-.11h0a.58.58,0,0,0,.44-.13c.12-.07.27-.2.39-.27s.09-.06.14,0L73,45A0,0,0,0,1,73,45h0S73,45.06,72.92,45Z"/>
- <path class="cls-7"
- d="M72.92,59.13c0,.14,0,.3,0,.48a6.06,6.06,0,0,1-.06,1,4.88,4.88,0,0,1-.08.61h-.14s0,0,.13.05a15.64,15.64,0,0,1-2,5.16c-.32.55-.68,1.11-1.07,1.68.08-.34.11-.56.06-.59a8.26,8.26,0,0,0-1.23,2l-.28.52v0a5.08,5.08,0,0,1-1.66,1.26,9.59,9.59,0,0,1-2.31.74l-.66.11v-.09c0-.08,0-.14,0-.17v0h-1s0,.18,0,.44h-.07c0-.27,0-.42-.08-.43s-.06.16-.11.45c-.19,0-.38,0-.57,0a14.62,14.62,0,0,1-2.55-.07,9.7,9.7,0,0,1-2.18-.62,4.84,4.84,0,0,0-.26-.43s0,0,0,0S57,71,57,71l-1.24-.44a3.26,3.26 [...]
- <path class="cls-10"
- d="M72.86,31.88a4.68,4.68,0,0,0,0,.53.32.32,0,0,1-.15-.35A.27.27,0,0,1,72.86,31.88Z"/>
- <path class="cls-7"
- d="M72.82,57.26c.07.61.05,1,0,1s-.26-.5-.55-1.28h0a.66.66,0,0,1,0-.15l-.73-2,.14-.14a3.1,3.1,0,0,0,.37-.46.27.27,0,0,0-.16-.38c-.17-.08-.34-.06-.4,0s-.07.11-.2.27c-.06-.17-.12-.34-.19-.52l-.31-.84.11,0,.33-.08L70.81,52a3.28,3.28,0,0,0,1,.73l.16.6c.26,1,.51,2.07.66,2.93a2.62,2.62,0,0,0,0,1.31S72.77,57.47,72.82,57.26Z"/>
- <path class="cls-9"
- d="M72.25,57c.29.78.46,1.29.55,1.28-.07,0,0,.85-.2,2.3a15.37,15.37,0,0,1-2.22,5.6A28.34,28.34,0,0,1,68,69.45a5.89,5.89,0,0,1-3.79,1.9,16.42,16.42,0,0,1-2.35.22,15.88,15.88,0,0,1-2.4-.12,10.2,10.2,0,0,1-4.36-2L54.47,69h0a1.6,1.6,0,0,0,.26-1.3.18.18,0,0,0-.19-.11h-.83l-.21,0,.06.2s0,.12-.21.24l-.14-.13a6.9,6.9,0,0,1-1.1-1.62l-.18-.35q-.15-.32-.27-.63a.24.24,0,0,0,.14,0,.37.37,0,0,0,.27-.31.48.48,0,0,0-.17-.41.36.36,0,0,0-.18-.11,1.48,1.48,0,0,1-.42-.19s0,0-.05,0a23,23 [...]
- <path class="cls-7"
- d="M72.73,56.7c0,.2.06.39.09.56s-.09.33-.11.33a2.62,2.62,0,0,1,0-1.31C72.69,56.42,72.71,56.56,72.73,56.7Z"/>
- <path class="cls-7" d="M72.78,61.22a.13.13,0,0,1,0,.06c-.09,0-.13,0-.13-.05Z"/>
- <path class="cls-8"
- d="M73,2.19l-.42.4a4.62,4.62,0,0,0-.72,1,13.45,13.45,0,0,0-.62,1.26c-.13.34-.28.75-.43,1.18a2.55,2.55,0,0,0-.08.26s0,.07,0,0V6.22l0-.16,0-.32q0-.3-.06-.57a3,3,0,0,0-.1-.5,5.46,5.46,0,0,0-.21-.61,12.39,12.39,0,0,0-.83-1.76c.3,0,.61-.11.92-.15A8.43,8.43,0,0,1,71.8,2a1.48,1.48,0,0,1,.31,0l.41.05A3.64,3.64,0,0,0,73,2.19Z"/>
- <path class="cls-7"
- d="M72.25,57h0a5.47,5.47,0,0,1-2.27.2,5.15,5.15,0,0,1-2.26-.61,5.33,5.33,0,0,1-.56-.32l-.29-.18-.43-.32a9.75,9.75,0,0,1-.74-.64l-.35-.32,0,0v0l0,0-.11-.14c.46.13.94.28,1.29.36s.69.13,1,.17l1,.09a3.82,3.82,0,0,0,1.73-.24,2.71,2.71,0,0,0,1-.68l.08-.1c.09.23.17.45.25.68a3.23,3.23,0,0,1-1.07.67,4.36,4.36,0,0,1-2,.22,10.19,10.19,0,0,1-1.08-.12l-.19,0-.16,0-.08,0,0,.05a.77.77,0,0,0,.13.12l.08.07.24.17c.17.12.35.22.52.33a5.15,5.15,0,0,0,2.09.67,10.19,10.19,0,0,0,1.62.09A4. [...]
- <path class="cls-8"
- d="M72.2,56.83a.66.66,0,0,0,0,.15,4.86,4.86,0,0,0-.63,0A10.19,10.19,0,0,1,70,56.92a5.15,5.15,0,0,1-2.09-.67c-.17-.11-.35-.21-.52-.33l-.24-.17-.08-.07a.77.77,0,0,1-.13-.12l0-.05.08,0,.16,0,.19,0a10.19,10.19,0,0,0,1.08.12,4.36,4.36,0,0,0,2-.22,3.23,3.23,0,0,0,1.07-.67Z"/>
- <path class="cls-7"
- d="M71.82,53.86a.27.27,0,0,1,.16.38,3.1,3.1,0,0,1-.37.46l-.14.14c-.08-.23-.16-.45-.25-.68.13-.16.19-.26.2-.27S71.65,53.78,71.82,53.86Z"/>
- <path class="cls-7"
- d="M71.75,45.41s0,0,0,0a.05.05,0,0,1-.06.06s0,0,0,.05h0a3.42,3.42,0,0,1-.69.28,1.77,1.77,0,0,1-.91,0,.68.68,0,0,1-.31-.18,2.07,2.07,0,0,0,.34-.15l.07,0a1.59,1.59,0,0,0,.76,0,3.33,3.33,0,0,0,.78-.22c.1,0,.17-.09.18-.13a.3.3,0,0,0,0-.09s.06,0,.09.08a.16.16,0,0,1,0,.14h0s-.05,0-.05,0a.3.3,0,0,0-.1.07h0A.08.08,0,0,0,71.75,45.41Z"/>
- <path class="cls-7"
- d="M71.88,45.38s0,0,.05,0a.47.47,0,0,1-.13.11.2.2,0,0,1-.09.06h0s0,0,0-.05a.05.05,0,0,0,.06-.06h0A.3.3,0,0,1,71.88,45.38Z"/>
- <path class="cls-7"
- d="M71.69,52.22c.06.17.1.35.15.53a3.28,3.28,0,0,1-1-.73h0l-.19-.36-.06.07c-.08-.11-.11-.19-.09-.21S71,51.94,71.69,52.22Z"/>
- <path class="cls-7"
- d="M65,82.21h0q.11.44.18.87l1.5.82,2.42,0a2.26,2.26,0,0,0,1.07-.11,1,1,0,0,0,.36-.3l.09-.11a0,0,0,0,0,0,0,.89.89,0,0,1,0,.11h0l.27.19c.08-.1,0-.36-.13-.59l0-.08c.11-.17.21-.33.3-.49l.08-.15a.28.28,0,0,1,0,.07l.3-.13a1.54,1.54,0,0,0-.17-.23.86.86,0,0,0-.14-.13,1.18,1.18,0,0,0-.32-.66.73.73,0,0,0-.73-.28,7.83,7.83,0,0,0-.86.38,9.05,9.05,0,0,1-1.64.62,5.61,5.61,0,0,1-1.34,0c-.36,0-.64,0-.84,0h-.1l.21,0,.16,0h.08V82h0c.14,0,.3,0,.48-.06a6.81,6.81,0,0,0,1.29-.11,9.28,9.2 [...]
- <path class="cls-10" d="M71.77,45.45s0,0,0,0A.08.08,0,0,1,71.77,45.45Z"/>
- <path class="cls-10"
- d="M71.58,82.36l-.3.13a.28.28,0,0,0,0-.07l0-.07c0-.06,0-.06,0-.17s0-.12,0-.18a.86.86,0,0,1,.14.13A1.54,1.54,0,0,1,71.58,82.36Z"/>
- <path class="cls-10"
- d="M71.29,82.18c0,.11,0,.11,0,.17l0,.07a.69.69,0,0,0-.42-.35,1.72,1.72,0,0,0-.5,0,.38.38,0,0,0-.16,0s-.07,0-.08,0,0,0,0,0a.27.27,0,0,1,.17-.09,1.51,1.51,0,0,1,.56-.08.88.88,0,0,1,.41.16C71.28,82.06,71.28,82.12,71.29,82.18Z"/>
- <path class="cls-9"
- d="M71.24,82.42l-.08.15c-.09.16-.19.32-.3.49l0,.08a1.05,1.05,0,0,0-.31-.28,1.38,1.38,0,0,0-.6-.08c-.16,0-.26,0-.26,0s.1.06.25.09a1.51,1.51,0,0,1,.48.16.84.84,0,0,1,.26.35l-.09.11a1,1,0,0,1-.36.3,2.26,2.26,0,0,1-1.07.11l-2.42,0-1.5-.82q-.08-.43-.18-.87h.08l.32-.06h.12c.2,0,.48,0,.84,0a5.61,5.61,0,0,0,1.34,0,9.05,9.05,0,0,0,1.64-.62,7.83,7.83,0,0,1,.86-.38.73.73,0,0,1,.73.28,1.18,1.18,0,0,1,.32.66.88.88,0,0,0-.41-.16,1.51,1.51,0,0,0-.56.08.27.27,0,0,0-.17.09s-.06,0,0, [...]
- <path class="cls-7"
- d="M70.81,52l.35.67-.33.08-.11,0h0c-.12-.31-.23-.63-.35-.93l.06,0,.13-.1a2.64,2.64,0,0,0,.25.29Z"/>
- <path class="cls-7"
- d="M71.07,50c.19.63.41,1.39.62,2.2-.68-.28-1.18-.74-1.23-.7s0,.1.09.21l-.13.1-.06,0-.47-1.26a2.71,2.71,0,0,0,.46-.57,1.65,1.65,0,0,0,.18-.37l-1.06-.17h0a.27.27,0,0,0-.08-.19c0-.16-.1-.28-.12-.33a6,6,0,0,0,1.06-.57.41.41,0,0,0,.19-.24C70.61,48.52,70.86,49.32,71.07,50Z"/>
- <path class="cls-10"
- d="M70.82,83.14c.17.23.21.49.13.59l-.27-.19h0a.89.89,0,0,0,0-.11,0,0,0,0,1,0,0C70.69,83.32,70.76,83.23,70.82,83.14Z"/>
- <path class="cls-7"
- d="M70.2,46.69c.42-.35.62-.71.68-.65a1.07,1.07,0,0,1-.1.24,2.11,2.11,0,0,1-.41.59,2.7,2.7,0,0,1-.53.46h0l-.08,0h0v-.12h-.15l-.09,0h0a.2.2,0,0,0-.09.06.28.28,0,0,0-.13.25v.05c-.3.06-.85.19-1.4.36a7.15,7.15,0,0,1-1.37.28h-.17a4,4,0,0,1-1.07-.17,3.65,3.65,0,0,1-1-.49,15.58,15.58,0,0,1-1.3-1.21l.17-.11.26-.17c.44.38.87.76,1.21,1a2.87,2.87,0,0,0,.58.27l.26.08a4.51,4.51,0,0,0,.92.2,7.36,7.36,0,0,0,2-.12A3.92,3.92,0,0,0,70.2,46.69Z"/>
- <path class="cls-10" d="M70.61,51.66l.19.36a2.64,2.64,0,0,1-.25-.29Z"/>
- <path class="cls-11" d="M70.72,83.58h0s0,0,0,0Z"/>
- <path class="cls-7"
- d="M70.54,47.93v0h-.09s0,0-.11,0A1.36,1.36,0,0,1,70,48a1.48,1.48,0,0,1-.31,0l-.16,0h0s.12,0,.12,0l.07,0h.06v0l.49-.2A.33.33,0,0,1,70.54,47.93Z"/>
- <path class="cls-10" d="M70.45,48h.09a.52.52,0,0,1,0,.18A1.08,1.08,0,0,1,70.45,48Z"/>
- <path class="cls-7"
- d="M70.36,51.87c.12.3.23.62.35.93-.21.06-.48.12-.85.19a6.5,6.5,0,0,1-1.71.12A3.49,3.49,0,0,1,67,52.8a3.18,3.18,0,0,1-.58-.35,2.3,2.3,0,0,1-.52-.6,1.84,1.84,0,0,1-.15-.35s0-.07,0-.08l.09,0,.16,0a4.7,4.7,0,0,1,.71-.14l.61-.1.51-.09a2.28,2.28,0,0,0,1.25-.69,1.92,1.92,0,0,0,.18-.29,1.16,1.16,0,0,0,.18-.51v0h0l.42,1.11a2.94,2.94,0,0,1-1.93.82l-1.08.1-.48,0-.12,0s-.11,0-.07,0a.57.57,0,0,0,.12.23,1.41,1.41,0,0,0,.36.37,2.64,2.64,0,0,0,1.53.43,3.93,3.93,0,0,0,1.47-.4A4.92,4 [...]
- <path class="cls-7" d="M69.47,49.5l1.06.17a1.65,1.65,0,0,1-.18.37,2.71,2.71,0,0,1-.46.57Z"/>
- <path class="cls-7"
- d="M70.45,48a1.08,1.08,0,0,0,.06.18.41.41,0,0,1-.19.24,6,6,0,0,1-1.06.57l0,0c0-.16.2-.4.57-.53a1.51,1.51,0,0,0,.53-.42Z"/>
- <path class="cls-10" d="M70.45,48h-.11C70.4,47.93,70.43,47.92,70.45,48Z"/>
- <path class="cls-7"
- d="M70,48a1.36,1.36,0,0,0,.35,0,1.51,1.51,0,0,1-.53.42c-.37.13-.62.37-.57.53l0,0a6.28,6.28,0,0,1-.66.23,2.79,2.79,0,0,1-1.18,0,1.84,1.84,0,0,1-.47-.15,3.7,3.7,0,0,1-.44-.28,1,1,0,0,1-.19-.14v0h.08a6.07,6.07,0,0,0,.83-.17h0a.34.34,0,0,0,0,.15.9.9,0,0,0,.27.2,1.32,1.32,0,0,0,1,.09,1.66,1.66,0,0,0,.79-.36l.26-.18s.13-.12.13-.22v-.08a.76.76,0,0,0-.2-.16l.16,0A1.48,1.48,0,0,0,70,48Z"/>
- <path class="cls-7"
- d="M70.62,60.14a3.52,3.52,0,0,1-.29.4,1,1,0,0,1-.57.29.39.39,0,0,1-.26-.11.27.27,0,0,1,0-.23c0-.12.09-.17.1-.16s0,.08,0,.17.07.11.16.1a.56.56,0,0,0,.24-.17l.11-.12s0,0,.06,0,0,0-.05,0l-.24-.1A2.64,2.64,0,0,1,69.6,60s.14-.07.3-.05l.27,0A3.56,3.56,0,0,1,70.62,60.14Z"/>
- <path class="cls-7"
- d="M70.21,63.2c.16.18,0,.28,0,.29a.88.88,0,0,1-.2.1l-.3.09-.18.06-.11,0a4.68,4.68,0,0,0-.91.55.84.84,0,0,1-.6.22.9.9,0,0,1-.45-.32.63.63,0,0,1-.18-.34c0-.12.1-.13.1-.12a.15.15,0,0,0,0,.11.78.78,0,0,0,.2.26.8.8,0,0,0,.38.23c.14,0,.29-.11.45-.23a4.78,4.78,0,0,1,.92-.64l.09,0h0l0,0h-.57a5.22,5.22,0,0,0-1,.31,1.25,1.25,0,0,1-.36.09c-.09,0-.14,0-.13,0s0,0,.12,0a1.55,1.55,0,0,0,.32-.14,3.87,3.87,0,0,1,1-.41,1.15,1.15,0,0,1,.31,0l.33,0A1.78,1.78,0,0,1,70.21,63.2Z"/>
- <path class="cls-8"
- d="M69.89,50.61l.47,1.26a4.92,4.92,0,0,1-.67.41,3.93,3.93,0,0,1-1.47.4,2.64,2.64,0,0,1-1.53-.43,1.41,1.41,0,0,1-.36-.37.57.57,0,0,1-.12-.23s0,0,.07,0l.12,0,.48,0,1.08-.1a2.94,2.94,0,0,0,1.93-.82Z"/>
- <path class="cls-7"
- d="M70,45.42a.28.28,0,0,0,.15.15,2.07,2.07,0,0,1-.34.15l-.08-.1s0-.07.11-.13A.21.21,0,0,1,70,45.42Z"/>
- <path class="cls-7"
- d="M69.81,67.53s0,.25-.06.59c-.39.57-.83,1.14-1.29,1.72l-.16.21.28-.52A8.26,8.26,0,0,1,69.81,67.53Z"/>
- <path class="cls-7" d="M69.81,47.32h0l-.12.09v-.09h0v0h0Z"/>
- <path class="cls-7" d="M69.73,47.82v0h0Z"/>
- <path class="cls-7"
- d="M69.72,47.42v.4l0,0h0a1.21,1.21,0,0,0,0-.14.21.21,0,0,1,0-.11s0,0,0,0,0,0,0,0l0,0Z"/>
- <path class="cls-11" d="M69.72,47.3h0v0Z"/>
- <path class="cls-7" d="M69.72,47.33v.09l-.09.06a.47.47,0,0,0,.07-.12Z"/>
- <path class="cls-7"
- d="M69.72,47.32h0l0,0a.47.47,0,0,1-.07.12l-.17.09a.51.51,0,0,0-.23,0v-.05a.28.28,0,0,1,.13-.25.2.2,0,0,1,.09-.06h0l.09,0h.15v.14Z"/>
- <path class="cls-9"
- d="M69.72,48.06v.08c0,.1-.13.22-.13.22l-.26.18a1.66,1.66,0,0,1-.79.36,1.32,1.32,0,0,1-1-.09.9.9,0,0,1-.27-.2.34.34,0,0,1,0-.15h0c.25-.08.49-.17.69-.25a8.55,8.55,0,0,0,1.35-.5c0,.06.07.12.1.13l.06,0,0,0h0A.76.76,0,0,1,69.72,48.06Z"/>
- <path class="cls-7"
- d="M69.65,31.44a14.28,14.28,0,0,1-.16,3.36,12.55,12.55,0,0,1-2,4.7c-.7,1-1.25,1.52-1.3,1.47a3,3,0,0,1,.29-.42c.19-.28.46-.68.76-1.2a13.51,13.51,0,0,0,1.65-4.65,13.85,13.85,0,0,0,0-3.23,34.74,34.74,0,0,0-.39-3.57,11,11,0,0,0-1.17-3.44A7.92,7.92,0,0,0,65,21.83l0,0a8.32,8.32,0,0,0-4.87-1.68,29.13,29.13,0,0,0-4.62.59,16.12,16.12,0,0,0-3.07,1c-.7.31-1.08.56-1.14.58s-.57.33-1.36.94a24.3,24.3,0,0,0-3,2.81,25.21,25.21,0,0,0-1.74,2.1c-.14.2-.29.4-.43.61l-.11.14v0s0,0,0,.05l0 [...]
- <path class="cls-7"
- d="M69.67,47.84h0l-.07,0s-.12,0-.12,0l0,0-.06,0s-.07-.07-.1-.13c.12-.07.19-.11.19-.13l.17-.09,0,0s0,0,0,0,0,0,0,0a.21.21,0,0,0,0,.11A1.21,1.21,0,0,1,69.67,47.84Z"/>
- <path class="cls-10" d="M69.26,47.67a1.24,1.24,0,0,0,.2-.1s-.07.06-.19.13v0Z"/>
- <path class="cls-10" d="M69.46,47.57a1.24,1.24,0,0,1-.2.1.11.11,0,0,1,0-.08A.51.51,0,0,1,69.46,47.57Z"/>
- <path class="cls-9"
- d="M69.39,63.42h0l0,0h0l-.09,0a4.78,4.78,0,0,0-.92.64c-.16.12-.31.24-.45.23a.8.8,0,0,1-.38-.23.78.78,0,0,1-.2-.26.15.15,0,0,1,0-.11s0,0,.13,0a1.25,1.25,0,0,0,.36-.09,5.22,5.22,0,0,1,1-.31h.53Z"/>
- <path class="cls-7"
- d="M69.39,2.28l0,0-.87.18a1.85,1.85,0,0,0-.46-.33c-.06,0-.1,0-.11,0s0-.07,0-.09A.15.15,0,0,1,68,2l.24-1a1.22,1.22,0,0,1,.45.3A4.35,4.35,0,0,1,69.39,2.28Z"/>
- <path class="cls-7"
- d="M69.75,68.12a14.79,14.79,0,0,1-.53,1.69c-.2.56-.42,1.11-.59,1.52s-.3.7-.32.72-.15.28-.4.66a11.06,11.06,0,0,1-1,1.36c-.27.32-.54.61-.79.86a1.41,1.41,0,0,1-.1-.18l-.63.62s0,0,.08,0,0,0,0,.05v.07c-.18.15-.31.23-.33.16a10.11,10.11,0,0,1,1.16-2c.29-.48.55-1,.74-1.38s.31-.67.32-.69.16-.27.37-.65.31-.55.48-.87v0l.16-.21C68.92,69.26,69.36,68.69,69.75,68.12Z"/>
- <path class="cls-7"
- d="M67.46,48.33l-.29-.1s-.15.06-.49.23a2.48,2.48,0,0,0-.59,0s.19.14.23.2a9.28,9.28,0,0,1-2,0,16.2,16.2,0,0,1-3.42-1,1.4,1.4,0,0,0,.17-.1l.52-.35a15.12,15.12,0,0,0,2.81.9,9.52,9.52,0,0,0,1.93.13h.09a8,8,0,0,0,2-.27,4.8,4.8,0,0,0,.78-.28v0a8.55,8.55,0,0,1-1.35.5c-.2.08-.44.17-.69.25,0,0,0-.06.08-.08l.09,0Z"/>
- <path class="cls-7"
- d="M69.26,47.67h0a4.8,4.8,0,0,1-.78.28,8,8,0,0,1-2,.27A7.15,7.15,0,0,0,67.83,48c.55-.17,1.1-.3,1.4-.36A.11.11,0,0,0,69.26,47.67Z"/>
- <path class="cls-7"
- d="M68.79,67.14c.14,0,.35,0,.3.25a2.09,2.09,0,0,1-.13.37,1.74,1.74,0,0,1-.14.27c-.06.07-.15.14-.22.12s-.09,0-.09,0,.13,0,.18-.17,0-.15.07-.25,0-.24,0-.22,0,0,0,0-.07,0-.07,0l-.19.06a4,4,0,0,0-.41.17c-.31.13-.59.29-.62.25s.22-.26.5-.45a3.56,3.56,0,0,1,.62-.34A1,1,0,0,1,68.79,67.14Z"/>
- <path class="cls-8"
- d="M69,31.47a13.85,13.85,0,0,1,0,3.23,13.51,13.51,0,0,1-1.65,4.65c-.3.52-.57.92-.76,1.2a3,3,0,0,0-.29.42s-.13.05-.38.1a5.22,5.22,0,0,1-1.12.1A6.93,6.93,0,0,1,63,41a15.08,15.08,0,0,1-2.18-.67c-1.57-.59-3.37-1.41-5.29-2.33-.48-.22-1-.45-1.45-.7l-.7-.38c-.23-.14-.47-.28-.69-.43a24.1,24.1,0,0,1-2.66-2,48.11,48.11,0,0,1-4.69-4.67l-.52-.6L44.58,29l0,0s0,0,0-.05v0l.11-.14c.14-.21.29-.41.43-.61A25.21,25.21,0,0,1,46.86,26a24.3,24.3,0,0,1,3-2.81c.79-.61,1.31-.89,1.36-.94s.44- [...]
- <path class="cls-7"
- d="M68.16.37l.08.64L68,2A.15.15,0,0,0,68,2s0,.06,0,.09,0,0,.11,0a1.85,1.85,0,0,1,.46.33c-.44.08-.87.18-1.32.25a2.92,2.92,0,0,1-.44.06l-.45,0h-.76l-.58,0c.09-.9.17-1.29.17-1.29l.1-1.1.42,0,.66.05a2.61,2.61,0,0,0,.28,0,1.72,1.72,0,0,0,.31,0C67.32.47,67.72.42,68.16.37Z"/>
- <path class="cls-9"
- d="M68.29,70.07c-.17.32-.34.62-.48.87s-.36.64-.37.65-.14.29-.32.69-.45.9-.74,1.38a10.11,10.11,0,0,0-1.16,2c0,.07.15,0,.33-.16a1.48,1.48,0,0,1,0,.27,25.11,25.11,0,0,0-.33,2.81c-.06,1.31-.06,2.23-.08,2.83,0,.32,0,.54,0,.69a.13.13,0,0,1,0,.06v0H65L64.36,79c0-.17-.07-.33-.11-.5l0-.25-.08-.29c0-.29-.06-.57-.08-.84-.05-.62-.1-1.2-.14-1.73-.09-1.07-.15-1.95-.2-2.56,0-.25,0-.46,0-.61l.66-.11a9.59,9.59,0,0,0,2.31-.74A5.08,5.08,0,0,0,68.29,70.07Z"/>
- <path class="cls-7"
- d="M67.74,30.65a3.9,3.9,0,0,1-.18,2s0-.75,0-.76a13.61,13.61,0,0,0-.48-1.77l0-.21s0-.1,0-.15c-.43-1.11-.53-1.34-.86-2.07l-.4-.8a5.25,5.25,0,0,0-1.66-2.12l-.29-.18h-.29l-.66-.32a4.94,4.94,0,0,0-3.44-.5,8.38,8.38,0,0,0-3.31,2.09,10.46,10.46,0,0,0-2.48,3.28,6.91,6.91,0,0,0-.37.95c-.05.16-.09.32-.13.48l0,.24v.09l.28.22.41.32.84.59,0,0a9.23,9.23,0,0,0,2.41,1.09,25,25,0,0,0,2.47.64,15.7,15.7,0,0,0,2.66.35l.3.16a.24.24,0,0,1,.17-.07c.35,0,.7-.06,1.05-.07l.06-.06h.16l.14,0A2 [...]
- <path class="cls-12"
- d="M67.54,31.84s0,.75,0,.76a9.45,9.45,0,0,1-.92.58c-.18.1-.39.2-.62.3a5.74,5.74,0,0,0,1-3.41A13.61,13.61,0,0,1,67.54,31.84Z"/>
- <path class="cls-7"
- d="M67.46,48.33H67.4l-.09,0s-.08.05-.08.08a6.07,6.07,0,0,1-.83.17h-.08c0-.06-.23-.15-.23-.2a2.48,2.48,0,0,1,.59,0c.34-.17.49-.23.49-.23Z"/>
- <path class="cls-7"
- d="M67.08,29.86l0,.21a21.9,21.9,0,0,0-1.45-3.34l-.08-.15-.24-.45L65.17,26a4.12,4.12,0,0,0-.85-1,6.68,6.68,0,0,0-.78-.47h.29l.29.18a5.25,5.25,0,0,1,1.66,2.12l.4.8c.33.73.43,1,.86,2.07C67.06,29.76,67.06,29.82,67.08,29.86Z"/>
- <path class="cls-13"
- d="M67.06,30.07a5.74,5.74,0,0,1-1,3.41c-.23.09-.48.18-.76.26l.14-.11a10.05,10.05,0,0,1-2.5.35H62a5.25,5.25,0,0,1-1.9-4.7c.14-2.6,1.6-4.63,3.4-4.74a6.68,6.68,0,0,1,.78.47,4.12,4.12,0,0,1,.85,1l.12.15.24.45.08.15A21.9,21.9,0,0,1,67.06,30.07Z"/>
- <path class="cls-7"
- d="M66.85,42.55a.2.2,0,0,1-.08.24.37.37,0,0,1-.23.05l-.32,0-.29,0,0,0,.67,0c.3,0,.16-.28-.11-.48s-.38.34-.38.34-.15-.05-.15-.07a.83.83,0,0,1,.18-.34.3.3,0,0,1,.22-.11h0a.41.41,0,0,1,.24.1A.85.85,0,0,1,66.85,42.55Z"/>
- <path class="cls-7"
- d="M66.47,42.26c.27.2.41.48.11.48l-.67,0s0,0,0,0l.27-.06.31,0a.16.16,0,0,0,.1,0s0,0,0-.06a.84.84,0,0,0-.19-.18c-.08,0,0,0-.07,0a.62.62,0,0,0-.09.23s-.08,0-.17,0S66.21,42.06,66.47,42.26Z"/>
- <path class="cls-7"
- d="M66.43,45.15a.58.58,0,0,1,.25.49.73.73,0,0,1-1.11.38.58.58,0,0,1-.07-.61,1.86,1.86,0,0,1,.3-.45s.09,0,.15.06c-.22.26-.51.64-.27.91s1,0,.9-.45A.74.74,0,0,0,66,45S66.17,45,66.43,45.15Z"/>
- <path class="cls-7"
- d="M66.61,42.57s0,0,0,.06a.16.16,0,0,1-.1,0l-.31,0-.27.06.16-.15c.09,0,.17,0,.17,0a.62.62,0,0,1,.09-.23s0,0,.07,0A.84.84,0,0,1,66.61,42.57Z"/>
- <path class="cls-7"
- d="M66.58,45.48c.15.42-.66.72-.9.45s0-.65.27-.91A.74.74,0,0,1,66.58,45.48Zm-.08.13a.45.45,0,0,0-.16-.36A1,1,0,0,0,66,45c.07.06.1.11.09.14a1.3,1.3,0,0,0-.27.36.29.29,0,0,0,0,.32c0,.07.23.08.39,0A.44.44,0,0,0,66.5,45.61Z"/>
- <path class="cls-7"
- d="M66.34,45.25a.34.34,0,0,1-.17.63c-.16,0-.35,0-.39,0a.29.29,0,0,1,0-.32,1.3,1.3,0,0,1,.27-.36s0-.08-.09-.14A1,1,0,0,1,66.34,45.25Z"/>
- <path class="cls-9"
- d="M66.43,48.23h-.06a9.52,9.52,0,0,1-1.93-.13,15.12,15.12,0,0,1-2.81-.9l1.3-.85a15.58,15.58,0,0,0,1.3,1.21,3.65,3.65,0,0,0,1,.49,4,4,0,0,0,1.07.17Z"/>
- <path class="cls-9"
- d="M64.74,41.44l1.6.64a.3.3,0,0,0-.22.11.83.83,0,0,0-.18.34s.07,0,.15.07l-.16.15s0,0,0,0l0,0-.46.79A15.13,15.13,0,0,0,63.2,44l-.09-.75s0,0,0,0a4.16,4.16,0,0,0-1.24-.48l-.62-.16.38-1.42a9.31,9.31,0,0,0,1.26.28A7.51,7.51,0,0,0,64.74,41.44Z"/>
- <path class="cls-7"
- d="M66.2,75.05a.8.8,0,0,1,0,.44,2.38,2.38,0,0,1-.16.4,7,7,0,0,0-.65,2.7,9.46,9.46,0,0,0,.25,2.8,3.66,3.66,0,0,0,.19.57,4,4,0,0,1-.6.09s0,0,0,0l.14,0h0l-.32.06h0v0a.13.13,0,0,0,0-.06c0-.15,0-.37,0-.69,0-.6,0-1.52.08-2.83a25.11,25.11,0,0,1,.33-2.81,1.48,1.48,0,0,0,0-.27l.28-.25.32-.32Z"/>
- <path class="cls-7"
- d="M66.05,74.75a1.41,1.41,0,0,0,.1.18l-.32.32-.28.25v-.07c0-.06,0,0,0-.05s-.08,0-.08,0Z"/>
- <path class="cls-7"
- d="M66,33.48l-.17.16a5.65,5.65,0,0,1-.65.15l.06,0C65.54,33.66,65.79,33.57,66,33.48Z"/>
- <path class="cls-7"
- d="M65.67,97.26a3.85,3.85,0,0,1,.25,2,5.19,5.19,0,0,1-.46,1.93c-.24.58-.51,1.1-.73,1.55s-.37.7-.5,1l-.77.09c0-.07.08-.17.14-.28s.35-.62.59-1,.52-.93.77-1.47a6.78,6.78,0,0,0,.33-.85,5,5,0,0,0,.17-.92,3.55,3.55,0,0,0-.13-1.79,4.16,4.16,0,0,0-.9-1.32,2.52,2.52,0,0,0-.75-.57c.09,0,.17,0,.27-.06a3,3,0,0,1,.66.44A4.18,4.18,0,0,1,65.67,97.26Z"/>
- <path class="cls-10" d="M65.89,82h0v0l0,0h0V82Z"/>
- <path class="cls-10" d="M65.88,82v0h-.08l-.16,0-.21,0h0l-.14,0s-.07-.06,0,0a4,4,0,0,0,.6-.09h0Z"/>
- <path class="cls-7"
- d="M65.47,43.58c.07,0,.11,0,.11,0s-1.5.47-3,1l-.69.23-.48-.41,1-.27c.25-.06.49-.12.74-.16A15.13,15.13,0,0,1,65.47,43.58Z"/>
- <path class="cls-9"
- d="M65.33,97.41a3.55,3.55,0,0,1,.13,1.79,5,5,0,0,1-.17.92A6.78,6.78,0,0,1,65,101c-.25.54-.53,1-.77,1.47s-.44.8-.59,1-.1.21-.14.28l-1.4.14c-.6,0-1.21.1-1.81.13l-.32,0h-.3l-.19,0-.9-.14c-1.61-.25-3.22-.45-4.78-.74,0,0,0,0,0,0,.14-.2.37-.47.64-.8a8.93,8.93,0,0,0,1.69-2.72,5.16,5.16,0,0,0,.08-3.17,1.82,1.82,0,0,0-.56-.8l1,.17a18.79,18.79,0,0,0,6.09-.11c.31,0,.63-.11,1-.19a2.52,2.52,0,0,1,.75.57A4.16,4.16,0,0,1,65.33,97.41Z"/>
- <path class="cls-13"
- d="M65.4,33.63l-.14.11-.34.1h0a15.44,15.44,0,0,1-2,.14A10.05,10.05,0,0,0,65.4,33.63Z"/>
- <path class="cls-7"
- d="M65.26.42l-.1,1.1H64a11.34,11.34,0,0,1,.22,1.25L63,2.73l-.24-.39A8,8,0,0,0,62,1.39l-.26-.28.16-1c.41,0,1.32.13,2.5.27Z"/>
- <path class="cls-13" d="M65.26,33.74l-.06,0-.28.05Z"/>
- <path class="cls-7"
- d="M64.92,33.84l.28-.05A1.88,1.88,0,0,1,65,34a2.23,2.23,0,0,1-.89,0,6.6,6.6,0,0,0,.84-.16Z"/>
- <path class="cls-7" d="M64,1.53h1.17s-.08.39-.17,1.29l-.74,0h0A11.34,11.34,0,0,0,64,1.53Z"/>
- <polygon class="cls-10" points="65.02 82.2 65.02 82.21 65.02 82.21 65.02 82.2"/>
- <path class="cls-7"
- d="M64.35,45.15c.44-.12.74-.09.75,0s-.29.11-.66.29-.68.41-1.08.68L63,45.76A9.59,9.59,0,0,1,64.35,45.15Z"/>
- <path class="cls-7"
- d="M65,2.81a45.57,45.57,0,0,0-.18,4.74s0-.24-.1-.46-.15-.68-.24-1c-.07-1.51-.17-2.59-.26-3.32h0Z"/>
- <path class="cls-11" d="M64.81,7.55v0l-.29,0v0Z"/>
- <path class="cls-10"
- d="M64.81,7.55l-.3,0c0-.53,0-1,0-1.48q.14.47.24,1C64.76,7.31,64.81,7.52,64.81,7.55Z"/>
- <path class="cls-7"
- d="M62.78,64s0,0,0,0,.49-.14.84-.26a1,1,0,0,0,.36-.2,3.94,3.94,0,0,0-.6,0c-.35,0-.53.41-.6.5S62.78,63.94,62.78,64Zm1.71-.72a.18.18,0,0,1,.06.23c0,.07-.06.06-.09.08a.11.11,0,0,1-.06,0l-.07,0a1.63,1.63,0,0,1-.62.28,2.44,2.44,0,0,1-.94.07s0-.13.06-.3a.81.81,0,0,1,.52-.46,3.24,3.24,0,0,1,.67,0h.32S64.35,63.17,64.49,63.23Zm-.12.18s0,0,0,0a.21.21,0,0,1-.06-.1s0,0,0,0l-.13.07a.53.53,0,0,1-.14.12l.28,0h0A.49.49,0,0,1,64.37,63.41Z"/>
- <path class="cls-7"
- d="M64.47,6.1c0,.46,0,1,0,1.48,0-.07,0-.24-.08-.43a8.67,8.67,0,0,0-2.17-4.3l-.17-.15.93,0A13.48,13.48,0,0,1,64.47,6.1Z"/>
- <path class="cls-9"
- d="M64.39,63.38s0,0,0,0a.49.49,0,0,0,0,.11h0l-.28,0a.53.53,0,0,0,.14-.12l.13-.07s0,0,0,0A.21.21,0,0,0,64.39,63.38Z"/>
- <path class="cls-13"
- d="M64.91,33.84a6.6,6.6,0,0,1-.84.16H64a.29.29,0,0,0-.24,0h-.05l-.5,0-.55,0a3.85,3.85,0,0,1-.48,0L62,34h.86A15.44,15.44,0,0,0,64.91,33.84Z"/>
- <path class="cls-8" d="M64.21,2.78c.09.73.19,1.81.26,3.32A13.48,13.48,0,0,0,63,2.73Z"/>
- <path class="cls-7"
- d="M64.23,103.68l-.06.12-.2.41c0,.09-.21.1-.38,0s-.27-.21-.22-.32a1.63,1.63,0,0,0,.09-.16Z"/>
- <path class="cls-13" d="M64.07,34l-.14,0h-.16A.29.29,0,0,1,64,34Z"/>
- <path class="cls-7"
- d="M64,95.46c-.1,0-.18.05-.27.06l-.17-.06a1.06,1.06,0,0,0-.42,0s.13-.15.44-.12A1.26,1.26,0,0,1,64,95.46Z"/>
- <path class="cls-7"
- d="M63.72,34.05h.05l-.06.06c-.35,0-.7,0-1.05.07a.24.24,0,0,0-.17.07l-.3-.16a3.85,3.85,0,0,0,.48,0l.55,0Z"/>
- <path class="cls-9"
- d="M64,63.47a1,1,0,0,1-.36.2c-.35.12-.73.21-.84.26.07-.09.25-.46.6-.5A3.94,3.94,0,0,1,64,63.47Z"/>
- <path class="cls-7"
- d="M63.66,72.09v.09c-.32,0-.65.09-1,.12,0-.26,0-.4,0-.44h1v0S63.65,72,63.66,72.09Z"/>
- <path class="cls-7"
- d="M63.4,66.3c.11,0,.24.15.23.28a.5.5,0,0,1-.1.19l-.09.1a3.25,3.25,0,0,1-.42.31,1.18,1.18,0,0,1-.77,0s.34-.08.68-.22c.09-.08.23-.21.33-.32a.5.5,0,0,0,.07-.08v0l0,0a2.92,2.92,0,0,0-.45-.08l-.35,0a.73.73,0,0,0-.59.17,2.13,2.13,0,0,0-.52.88,1.22,1.22,0,0,1,.36-1,1,1,0,0,1,.78-.31l.36,0A2.15,2.15,0,0,1,63.4,66.3Z"/>
- <path class="cls-7" d="M63.36,46.07l-.26.17-.17.11-.29-.29a.46.46,0,0,0-.07-.07l.3-.16.14-.07Z"/>
- <path class="cls-9"
- d="M63.11,43.2l.09.75c-.25,0-.49.1-.74.16l-1,.27c-.47-.39-.81-.64-.86-.58a6.65,6.65,0,0,0,.58.66l-.8.25c-.58.19-1,.36-1,.37a8.64,8.64,0,0,0-1,.5l-.41.28c-1.2-.39-2.46-.76-3.71-1.11-.23-.07-.49-.13-.67-.2L53,44.27l-1.32-.59-.15-.07c.7-.19,1.36-.35,1.9-.47.78-.17,1.32-.22,1.35-.23s.56-.1,1.36-.19A20.23,20.23,0,0,1,59,42.65a23,23,0,0,1,2.86.31C62.52,43.08,63,43.2,63.11,43.2Z"/>
- <path class="cls-7"
- d="M63.14,43.19s0,0,0,0-.59-.12-1.27-.24A23,23,0,0,0,59,42.65a20.23,20.23,0,0,0-2.88.07c-.8.09-1.33.17-1.36.19s-.57.06-1.35.23c-.54.12-1.2.28-1.9.47l-.68-.31c.88-.31,1.74-.56,2.44-.75a13.73,13.73,0,0,1,1.39-.29,11.45,11.45,0,0,1,1.4-.14,18.9,18.9,0,0,1,3,.06,19.94,19.94,0,0,1,2.27.37l.62.16A4.16,4.16,0,0,1,63.14,43.19Z"/>
- <path class="cls-12"
- d="M62.88,24.22l.66.32c-1.8.11-3.26,2.14-3.4,4.74A5.25,5.25,0,0,0,62,34l.15.1a15.7,15.7,0,0,1-2.66-.35,25,25,0,0,1-2.47-.64A9.23,9.23,0,0,1,54.65,32l0,0-.84-.59-.41-.32-.28-.22v-.09l0-.24c0-.16.08-.32.13-.48a6.91,6.91,0,0,1,.37-.95,10.46,10.46,0,0,1,2.48-3.28,8.38,8.38,0,0,1,3.31-2.09A4.94,4.94,0,0,1,62.88,24.22Z"/>
- <path class="cls-7" d="M63,45.76l-.14.07-.3.16-1-1.08.35-.12,1.07.94Z"/>
- <path class="cls-7" d="M62.64,46.06l.29.29-1.3.85-.73-.29.53-.3L62.57,46A.46.46,0,0,1,62.64,46.06Z"/>
- <path class="cls-7"
- d="M62.78,2.34l.24.39-.93,0a3.36,3.36,0,0,0-.69-.49l-.29-.14.66-1,.26.28A8,8,0,0,1,62.78,2.34Z"/>
- <path class="cls-11" d="M62.78,64s0,0,0,0S62.79,64,62.78,64Z"/>
- <path class="cls-7"
- d="M61.64,77.81l0,0,0,0,0,.07h0v-.07l0-.26c.22-1.44.43-2.87.58-3.94l.21-1.34.19,0a52.52,52.52,0,0,1-.29,5.39l0,.28v.08a1.94,1.94,0,0,1-.06.22h0s0,0,0,0l0,0h0l0,0,0,0h0s0,0,0,0l-.1-.09h0v0l0,0,0,0,0,0h0A.8.8,0,0,0,61.64,77.81Z"/>
- <path class="cls-7" d="M62.62,72.3l-.19,0c0-.29.08-.45.11-.45S62.61,72,62.62,72.3Z"/>
- <path class="cls-9"
- d="M61.86,72.35c.19,0,.38,0,.57,0l-.21,1.34c-.15,1.07-.36,2.5-.58,3.94l0,.26v.07h0s0,0,0,0l0,.09-.21.5c-.14.34-.26.66-.39,1l-.69,1.76c-.2.52-.37,1-.48,1.27,0,.08-.06.15-.08.22v0l0,.07s0,0,0,0l0,0c0,.09,0,.13,0,.14l-.51,1.63c-.33.27-.71.6-1.12.93l-1.39,1.19-.18.16-.09.07,0,0h0a2.8,2.8,0,0,1-.14-.25A.6.6,0,0,1,56,86.6a.36.36,0,0,1,0-.12.61.61,0,0,1,.19-.38,3.53,3.53,0,0,1,.28-.37c-.09-.21-.89.56-.79.71a.82.82,0,0,0,.21.57l.11.12L55.13,87l-.45-.07-.19,0a.76.76,0,0,1,0- [...]
- <path class="cls-10" d="M62.23,78.28s0,0,0,0l0,0h0Z"/>
- <path class="cls-7"
- d="M62.22,78.31l-.18.51c-.11.34-.23.68-.34,1l-.59,1.79c-.18.52-.32,1-.43,1.28l0,0c-.18,0-.51.09-.51.1h-.52s0-.06,0-.09,0,0,0,0l0-.07v0c0-.07.05-.14.08-.22.11-.32.28-.75.48-1.27l.69-1.76c.13-.33.25-.65.39-1l.21-.5,0-.09s0,0,0,0,0,.12.07.11,0-.12.07-.08h.12l0,0,0,0,0,0v0h0l.1.09s0,0,0,0h0l0,0,0,0h0Z"/>
- <path class="cls-7"
- d="M61.93.07l-.16,1-.66,1,.29.14a3.36,3.36,0,0,1,.69.49l-.57,0-.9-.08c-.52,0-1.27-.11-2.15-.13l-1,0c-.1-.29-.19-.54-.29-.77s-.12-.25-.18-.36a1.51,1.51,0,0,0-.3-.36L56.41.66,56.16.43l0-.21C57,.12,57.75.06,58.46,0c.94,0,1.73,0,2.31,0l.93,0Z"/>
- <path class="cls-7" d="M61.9,44.79l-.35.12c-.13-.14-.24-.27-.36-.39l0-.06.28-.08Z"/>
- <path class="cls-10"
- d="M61.66,77.83l0,0a.8.8,0,0,1,.17.15h-.08c-.06,0-.07.07-.07.08s-.06-.07-.07-.11l0-.07Z"/>
- <path class="cls-9"
- d="M61.55,44.91l1,1.08-1.14.62-.53.3-1.12-.44-1.06-.37c.5-.26.87-.41.9-.42s.38-.18.93-.4Z"/>
- <path class="cls-7" d="M61.42,44.38l-.28.08a6.65,6.65,0,0,1-.58-.66C60.61,43.74,61,44,61.42,44.38Z"/>
- <path class="cls-7"
- d="M61.19,44.52c.12.12.23.25.36.39l-1,.37c-.55.22-.92.39-.93.4s-.4.16-.9.42c-.24-.08-.48-.17-.73-.24l.41-.28a8.64,8.64,0,0,1,1-.5s.41-.18,1-.37l.8-.25Z"/>
- <path class="cls-7" d="M60.9,46.91l.73.29-.52.35a1.4,1.4,0,0,1-.17.1l-.73-.26.36-.27.19-.12Z"/>
- <path class="cls-7"
- d="M60.21,47.39l.73.26-.45.3c-.36.24-.82.6-1.27,1a15.19,15.19,0,0,1-1.8,1.48h0a8.94,8.94,0,0,1,1.49-1.81,13.14,13.14,0,0,1,1.21-1.12Z"/>
- <path class="cls-7"
- d="M60.9,46.91l-.14.09-.19.12-.36.27-.67-.22c-.55-.18-1.11-.35-1.69-.52h0l.44-.3.39-.24h0l1.06.37Z"/>
- <path class="cls-10" d="M60.68,82.89a.06.06,0,0,0,0,0h0Z"/>
- <path class="cls-11" d="M60.66,82.93a.19.19,0,0,1,0,.08h0l0,0Z"/>
- <path class="cls-10" d="M60.66,82.93l0,.11h-.47S60.48,83,60.66,82.93Z"/>
- <polygon class="cls-10" points="60.64 83.01 60.62 83.08 60.62 83.06 60.62 83.04 60.64 83.01"/>
- <path class="cls-7"
- d="M60.62,83.08h0v0h0v.13a1.47,1.47,0,0,0,0,.17l-.18.52c-.12.33-.3.8-.49,1.36L57,87.43l-.43.34a.2.2,0,0,1-.09,0h0l-.08,0h-.2l-.3,0L55,87.62l-.45-.1-.24-.06-.17,0s-.12,0-.14-.08c-.19-.3-.37-.59-.55-.86v-.23a.86.86,0,0,1,0-.16,2.14,2.14,0,0,1,.06-.31,2.37,2.37,0,0,1,.18-.55,1.34,1.34,0,0,1,.68-.72,1.43,1.43,0,0,1,.81,0h0a1,1,0,0,0-.7.18,1.14,1.14,0,0,0-.45.64,3.12,3.12,0,0,0-.1.48,2.45,2.45,0,0,0,0,.27v.21l.29.39a.06.06,0,0,0,0,0c0,.3.27.48.3.45s0-.15-.07-.31l.19,0,.4 [...]
- <path class="cls-9"
- d="M60.21,47.39l-.09.07a13.14,13.14,0,0,0-1.21,1.12,8.94,8.94,0,0,0-1.49,1.81l-1.7.25a3.84,3.84,0,0,1-.8-.43,2.34,2.34,0,0,1-.38-.28c-.09-.07-.16-.16-.24-.23a3.46,3.46,0,0,1-.42-.57l.33-.19a20.84,20.84,0,0,0,2.69-1.65l1-.64c.58.17,1.14.34,1.69.52Z"/>
- <path class="cls-7"
- d="M60.18,69.06a.26.26,0,0,1-.07.24.58.58,0,0,1-.25.12l-.19,0a1.16,1.16,0,0,1-.4,0l-.1,0s0,0,0,0,0,0,0,0,0,0,0,0a.23.23,0,0,0,0-.07s-.11-.06-.05-.07a.49.49,0,0,0,.19,0,1.49,1.49,0,0,0,.46-.07s0,0,0,0,0,0,0-.06a.86.86,0,0,0-.28-.11c-.09,0-.14,0-.16,0s.26-.19.57,0A.4.4,0,0,1,60.18,69.06Zm-.93.26c.06.09,0,0,0,0Z"/>
- <path class="cls-11" d="M59.23,69.29s.08.12,0,0Z"/>
- <path class="cls-7"
- d="M59.11,76.62a24.51,24.51,0,0,1,.13,3.16,9.25,9.25,0,0,1-.26,3,.08.08,0,0,0,0-.06s.11-.25-.11-.2c-.1-.49-.22-1.59-.34-2.71-.09-.75-.18-1.51-.26-2.07,0-.28-.07-.51-.1-.68s0-.25,0-.27-.06-.37-.2-.92-.33-1.28-.54-2c-.25-.88-.52-1.73-.67-2.29h0l0-.07.37.16c.27.51.62,1.24.93,2s.57,1.42.76,2S59.1,76.6,59.11,76.62Z"/>
- <path class="cls-10" d="M58.89,82.52c.22,0,.08.15.11.2a.08.08,0,0,1,0,.06h0s-.06-.1-.09-.27Z"/>
- <path class="cls-7"
- d="M58.89,82.52c0,.17.06.27.09.27a12.54,12.54,0,0,1-1.75,1.15s-1.93.78-2,.62h0a2.9,2.9,0,0,1,.78-.34c.77-.46,1.21-.77,2-1.3l.56-.29A1.41,1.41,0,0,1,58.89,82.52Z"/>
- <path class="cls-7"
- d="M58.84,7.31c0,.08.07.27,0,.11a2.52,2.52,0,0,0-.74-.52l-.25-.23c-.2-.17-.39-.32-.58-.46l-.45-.34c-.3-.22-.59-.41-.86-.6a10.61,10.61,0,0,0-1.59-.91,11.74,11.74,0,0,0-2.58-.83l-.54-.1.28-.12.4-.16L52.27,3l.11,0a20.13,20.13,0,0,1,2.06.95,13.29,13.29,0,0,1,1.62,1l.88.65.45.34.36.28.15.13c.3.25.55.5.58.53s0,0,0-.12l-.09-.27c-.06-.16-.1-.27-.12-.31-.23-.64-.65-1.76-1-2.46-.22-.51-.42-.94-.61-1.28h.82c.12.33.24.71.37,1.13.26.87.58,1.93.95,3.18a1.11,1.11,0,0,0,0,.3A2.46,2 [...]
- <path class="cls-7"
- d="M58.72,46.1h0l-.39.24-.44.3h0l-.65-.18.35-.27.42-.33h0C58.24,45.93,58.48,46,58.72,46.1Z"/>
- <path class="cls-8"
- d="M58.47,6.77c0,.08.11.28,0,.12s-.28-.28-.58-.53l-.15-.13L57.39,6l-.45-.34L56.06,5a13.29,13.29,0,0,0-1.62-1A20.13,20.13,0,0,0,52.38,3a14.93,14.93,0,0,1,3.11-.49c.41,0,.81,0,1.2,0,.19.34.39.77.61,1.28.31.7.73,1.82,1,2.46,0,0,.06.15.12.31Z"/>
- <path class="cls-7"
- d="M58,45.86h0l-.42.33-.35.27c-1-.29-2.09-.55-3.16-.82-.25-.06-.47-.11-.74-.2h0l.07-.14-1.18-.58-.11.23-.84-.35L50,44.06l.61-.19.92-.26.15.07,1.32.59.65.28c.18.07.44.13.67.2C55.53,45.1,56.79,45.47,58,45.86Z"/>
- <path class="cls-7" d="M57.2,46.47l.65.18-1,.64a20.84,20.84,0,0,1-2.69,1.65,17.91,17.91,0,0,1,2.42-2Z"/>
- <path class="cls-7"
- d="M55.54,62.68s0,.07,0,.07,0,0-.09-.06,0-.07,0-.08l.06,0,.15,0c.21,0,.47,0,.73-.08a2.63,2.63,0,0,1,.77-.06.81.81,0,0,1,.31.06.37.37,0,0,1,.16.1.2.2,0,0,1,.07.15.24.24,0,0,1,0,.17.59.59,0,0,1-.18.14l-.27.21a.83.83,0,0,1-.42.2.91.91,0,0,1-.43-.11l-.31-.15c-.19-.09-.3-.15-.29-.18a1.21,1.21,0,0,1,.33.06l.34.1a.67.67,0,0,0,.33.05c.19,0,.37-.29.54-.42s0,0,0,0h0l-.19,0a3.23,3.23,0,0,0-.71,0,3.66,3.66,0,0,1-.75,0Z"/>
- <path class="cls-7"
- d="M56.24,1.76s0,0,0,0l0-.05Zm1-.09c.1.23.19.48.29.77h-.82A3.89,3.89,0,0,0,56.44,2l-.17-.23,0,0s0,0,0,0h0l-.05,0-.38-.2-.29-.14.67-1,.25.23.33.29a1.51,1.51,0,0,1,.3.36C57.1,1.42,57.17,1.55,57.22,1.67Z"/>
- <path class="cls-9"
- d="M57.2,46.47l-.57.44a17.91,17.91,0,0,0-2.42,2l-.33.19a3.84,3.84,0,0,1-.23-.45,11,11,0,0,1-.55-1.74c-.07-.3-.12-.54-.18-.75.18-.35.3-.6.37-.74h0c.27.09.49.14.74.2C55.11,45.92,56.17,46.18,57.2,46.47Z"/>
- <path class="cls-7" d="M57.13,71.66l-.37-.16a2.2,2.2,0,0,0,.11-.27A4.84,4.84,0,0,1,57.13,71.66Z"/>
- <path class="cls-7"
- d="M55.72,70.58,57,71s0,.07-.07.19,0,0,0,0c-.12-.2-.21-.31-.26-.29s0,.22.09.53a10.16,10.16,0,0,1-1.09-.56A3.26,3.26,0,0,0,55.72,70.58Z"/>
- <path class="cls-7"
- d="M56.9,54.9l0,0a6.55,6.55,0,0,0-.56.6c-.31.26-.48.47-.79.72l-.74.6c-.45.35-.87.65-1.28.91a10.72,10.72,0,0,1-2.1,1c-.56.19-1,.31-1.22.39l-.12,0c0-.36-.1-.73-.13-1.08h.11a9.74,9.74,0,0,0,1.23-.12,7,7,0,0,0,2.05-.64,17.59,17.59,0,0,0,2.47-1.68l.55-.45,0,0-.34.08-.55.14-.63.07-.82.06a11.87,11.87,0,0,1-1.45,0,7.34,7.34,0,0,1-2.14-.42l-.51-.21a9.46,9.46,0,0,1,.12-1.07,3.29,3.29,0,0,0,.67.53,5.38,5.38,0,0,0,1.85.65,9.68,9.68,0,0,0,1.4.1l.82,0c.34,0,.76-.05,1.16-.09A7.67, [...]
- <path class="cls-7"
- d="M56.87,71.23a2.2,2.2,0,0,1-.11.27.09.09,0,0,1-.06,0c-.08-.31-.12-.51-.09-.53S56.75,71,56.87,71.23Z"/>
- <path class="cls-10" d="M56.76,71.5l0,.07,0-.1A.09.09,0,0,0,56.76,71.5Z"/>
- <path class="cls-7"
- d="M56.73,71.57h0a1,1,0,0,0-.07.15,13,13,0,0,1-1,1.73A26.07,26.07,0,0,1,54,75.63c-.64.75-1.36,1.56-2.12,2.29A29.25,29.25,0,0,0,48,82.07c-.87,1.27-1.11,2.3-1.22,2.28a3.61,3.61,0,0,1,.38-1.69,1,1,0,0,0,.31-.15s-.1,0-.26,0a7.28,7.28,0,0,1,.36-.76,9.44,9.44,0,0,1,1-1.5.89.89,0,0,0,.35-.16.82.82,0,0,0-.26,0c.75-1,1.67-1.94,2.56-2.9.71-.76,1.34-1.55,1.94-2.33a24.19,24.19,0,0,0,1.51-2.14,13.28,13.28,0,0,0,.83-1.59c.05-.12.09-.22.13-.3a10.16,10.16,0,0,0,1.09.56Z"/>
- <path class="cls-7"
- d="M56.44,2a3.89,3.89,0,0,1,.25.42c-.39,0-.79,0-1.2,0A14.93,14.93,0,0,0,52.38,3l-.5-.19c-.68-.24-1.17-.39-1.49-.48l-.47-.14h0c.26-.16.53-.31.8-.46l.41-.21.46-.22A15.68,15.68,0,0,1,55.25.33l.88-.11,0,.21-.67,1,.29.14.38.2.05,0h0s0,0,0,0l0,0Z"/>
- <path class="cls-7"
- d="M55.72,86.44c-.1-.15.7-.92.79-.71a3.53,3.53,0,0,0-.28.37.61.61,0,0,0-.19.38.36.36,0,0,0,0,.12.6.6,0,0,0,.09.28,2.8,2.8,0,0,0,.14.25s0,0-.23,0L55.93,87A.82.82,0,0,1,55.72,86.44Z"/>
- <path class="cls-8"
- d="M56.37,55.13l0,0-.55.45a17.59,17.59,0,0,1-2.47,1.68,7,7,0,0,1-2.05.64,9.74,9.74,0,0,1-1.23.12H50q-.06-.6-.09-1.17a14.88,14.88,0,0,1,0-2l.51.21a7.34,7.34,0,0,0,2.14.42,11.87,11.87,0,0,0,1.45,0l.82-.06.63-.07.55-.14Z"/>
- <path class="cls-10"
- d="M56.27,87.13a.65.65,0,0,1,.1.19s-.18,0-.33-.19C56.23,87.14,56.24,87.16,56.27,87.13Z"/>
- <path class="cls-10" d="M56.29,1.68l0,.05s0,0,0,0Z"/>
- <path class="cls-7"
- d="M56.19,96.45a5.16,5.16,0,0,1-.08,3.17,8.93,8.93,0,0,1-1.69,2.72c-.27.33-.5.6-.64.8,0,0,0,0,0,0l-.7-.13a12,12,0,0,1,.9-1.1,8.63,8.63,0,0,0,1.71-2.47A5.24,5.24,0,0,0,56,96.53a1.69,1.69,0,0,0-.6-.93l.11,0,.17,0A1.82,1.82,0,0,1,56.19,96.45Z"/>
- <path class="cls-7"
- d="M56.21,50.87s.11,0,0,.06l-.48.09-.89.16-.81.14-.62.09a6.94,6.94,0,0,1-2,.08,4.78,4.78,0,0,1-.81-.2c.1-.31.2-.62.31-.9a3,3,0,0,0,.72.4,4.77,4.77,0,0,0,1.8.19l.6,0,.51,0,.55-.08.29,0c.1,0,0,0-.05,0l-.14,0-.09,0a3.66,3.66,0,0,1-.52-.28l-.21-.16a3.11,3.11,0,0,1-.28-.23,4.45,4.45,0,0,1-.81-1c-.39-.68-.63-1.25-.85-1.69,0,0,0,0,0,0l.51-1c.06.21.11.45.18.75a11,11,0,0,0,.55,1.74,3.84,3.84,0,0,0,.23.45,3.46,3.46,0,0,0,.42.57c.08.07.15.16.24.23a2.34,2.34,0,0,0,.38.28,3.84,3 [...]
- <path class="cls-8"
- d="M56,96.53a5.24,5.24,0,0,1-.28,2.94A8.63,8.63,0,0,1,54,101.94a12,12,0,0,0-.9,1.1c-.53-.11-1.06-.23-1.57-.37a13.43,13.43,0,0,1-3.16-1.31c-.18-.09-.35-.19-.52-.29l.68-.25a10.08,10.08,0,0,0,2.88-1.66,3.85,3.85,0,0,0,1-1.49,4.18,4.18,0,0,0,.25-1.53,3.81,3.81,0,0,0-.22-1.39l.43.13,1.59.46.9.26A1.69,1.69,0,0,1,56,96.53Z"/>
- <path class="cls-7" d="M55.63,95.65l-.17,0-.11,0c-.1-.09-.17-.13-.17-.15a.61.61,0,0,1,.37.15Z"/>
- <path class="cls-9"
- d="M55.61,70.91c0,.08-.08.18-.13.3a13.28,13.28,0,0,1-.83,1.59,24.19,24.19,0,0,1-1.51,2.14c-.6.78-1.23,1.57-1.94,2.33-.89,1-1.81,2-2.56,2.9a5.43,5.43,0,0,1-.79.09A7.9,7.9,0,0,1,45.54,80a3.24,3.24,0,0,1-1.08-.5,2.52,2.52,0,0,1-.68-.76,2.58,2.58,0,0,1-.34-1c.59-.73,1.17-1.41,1.72-2a3,3,0,0,0,.88.8,2.43,2.43,0,0,0,1.19.35c.36,0,.59-.17.54-.26s-.2-.1-.43-.24a3.75,3.75,0,0,1-.74-.58,2.57,2.57,0,0,1-.44-.75l-.09-.31.23-.24c.29-.31.57-.6.85-.86a3.46,3.46,0,0,0,.85.86c.89.61 [...]
- <path class="cls-8"
- d="M55.33,50.73s.15,0,.05,0l-.29,0-.55.08-.51,0-.6,0a4.77,4.77,0,0,1-1.8-.19,3,3,0,0,1-.72-.4c.08-.22.17-.42.25-.62.41-.88.85-1.72,1.17-2.38l.08-.18s0,0,0,0c.22.44.46,1,.85,1.69a4.45,4.45,0,0,0,.81,1,3.11,3.11,0,0,0,.28.23l.21.16a3.66,3.66,0,0,0,.52.28l.09,0Z"/>
- <path class="cls-7"
- d="M55.18,85.58s-.19.17-.33.36a2,2,0,0,0-.23.4s0,0-.06.13a.77.77,0,0,0-.08.29.76.76,0,0,0,0,.15h0s-.07,0-.1,0l-.12-.15a1,1,0,0,1,.08-.53.84.84,0,0,1,.1-.15,1.33,1.33,0,0,1,.26-.28C54.9,85.6,55.17,85.53,55.18,85.58Z"/>
- <path class="cls-7"
- d="M54.74,67.67a1.6,1.6,0,0,1-.26,1.3h0l-.23-.18,0,0a1.35,1.35,0,0,0,.2-.91c-.17,0-.46,0-.64,0a.71.71,0,0,1-.27.33L53.36,68c.18-.12.21-.21.21-.24l-.06-.2.21,0h.83A.18.18,0,0,1,54.74,67.67Z"/>
- <path class="cls-10"
- d="M54.49,86.91c0,.16.09.28.07.31s-.26-.15-.3-.45a.06.06,0,0,1,0,0l.12.15s.07,0,.1,0Z"/>
- <path class="cls-9"
- d="M54.48,67.85a1.35,1.35,0,0,1-.2.91l0,0c-.23-.2-.46-.4-.67-.61a.71.71,0,0,0,.27-.33C54,67.86,54.31,67.86,54.48,67.85Z"/>
- <path class="cls-7" d="M54.47,69h0a.42.42,0,0,1-.28.1.57.57,0,0,1-.28-.08l.15-.25a.23.23,0,0,0,.18,0Z"/>
- <path class="cls-7"
- d="M53.06,103l.7.13-.19.29c0,.07-.2.05-.36,0s-.25-.22-.2-.31A.28.28,0,0,1,53.06,103Z"/>
- <path class="cls-7" d="M53.57,68.18l-.09.06L53.32,68l0,0Z"/>
- <path class="cls-7" d="M52.18,44.73l1.18.58-.07.14-.71-.28L52.07,45Z"/>
- <path class="cls-7"
- d="M53.29,45.45c-.07.14-.19.39-.37.74,0-.12-.06-.22-.09-.31a1.06,1.06,0,0,0-.16-.34.82.82,0,0,0-.21-.19l-.53,1a4.45,4.45,0,0,1,.48.83l-.08.18c-.32.66-.76,1.5-1.17,2.38-.08.2-.17.4-.25.62a.94.94,0,0,1-.24-.28l-.81.85a3,3,0,0,0,.74.33,15.28,15.28,0,0,0-.42,1.65c0,.28-.1.57-.13.86a1.11,1.11,0,0,1-.26-.32l-.89.75a4,4,0,0,0,1,.64,14.88,14.88,0,0,0,0,2q0,.57.09,1.17h-.31v0c0-.78-.1-1.54-.14-2.26l-.24-.29-.14-.19a3.52,3.52,0,0,0-.27-.37l-.14-.21c0-.4.06-.78.11-1.15l.88-.55 [...]
- <path class="cls-7"
- d="M52.6,70c.21.34.45.64.4.81s-.57.12-1-.1a4.06,4.06,0,0,1-.57-.35,1.73,1.73,0,0,1-.29-.31l0-.12v0A7.59,7.59,0,0,0,52,68.84s0,.09,0,.12a.66.66,0,0,0,.24.45.48.48,0,0,0,0,.13Z"/>
- <path class="cls-7"
- d="M52.83,45.88c0,.09.06.19.09.31l-.51,1a4.45,4.45,0,0,0-.48-.83l.53-1a.82.82,0,0,1,.21.19A1.06,1.06,0,0,1,52.83,45.88Z"/>
- <path class="cls-7"
- d="M52.65,96.14a4.18,4.18,0,0,1-.25,1.53,3.85,3.85,0,0,1-1,1.49,10.08,10.08,0,0,1-2.88,1.66l-.68.25c-.24-.14-.48-.28-.71-.44l.16,0c.25-.07.6-.18,1-.33a9.58,9.58,0,0,0,2.79-1.45,3.65,3.65,0,0,0,1.34-2.67,9.38,9.38,0,0,0,0-1.39h.06A3.81,3.81,0,0,1,52.65,96.14Z"/>
- <path class="cls-7"
- d="M52.45,67.7a.76.76,0,0,1-.12.61,7,7,0,0,1-.84-1.15c.4-.68.44-1,.5-.87A8.22,8.22,0,0,0,52.45,67.7Z"/>
- <path class="cls-10" d="M52.43,94.75h-.06s0-.06,0-.06S52.4,94.71,52.43,94.75Z"/>
- <path class="cls-9"
- d="M52.37,94.74a9.38,9.38,0,0,1,0,1.39,3.65,3.65,0,0,1-1.34,2.67,9.58,9.58,0,0,1-2.79,1.45c-.41.15-.76.26-1,.33l-.16,0h0l-.22-.15-.35-.24c-.18-.13-.42-.3-.62-.47-.43-.33-.9-.78-1.34-1.17,0,.53,0,1,0,1.56l-.8-1.7-.4-.84-.56.74-.6.77-.08.1s0,.06,0,0v-.06l-.06-.3L41.62,97c-.06-.31-.13-.61-.2-.92l-.1-.47a3,3,0,0,0-.16-.56c-.08-.17-.27-.8-.48-1.5.22,0,.49.08.78.11a6.4,6.4,0,0,0,1.57,0,5.69,5.69,0,0,0,1.68-.54A3,3,0,0,0,46,92.25a3.87,3.87,0,0,0,.58-.93c.08-.24.16-.46.23-. [...]
- <path class="cls-7"
- d="M52.38,3l-.11,0-.37.13-.4.16-.28.12a9.5,9.5,0,0,0-1-.09h-.46l.12-1.15h0l.47.14c.32.09.81.24,1.49.48Z"/>
- <path class="cls-7"
- d="M49.82,59.63h0l0-.49c0-.38,0-.75-.08-1.11h0l.13,1.16.27-.07c.1.72.22,1.46.38,2.2a23,23,0,0,0,.76,2.84A1.05,1.05,0,0,0,51,64c-.11,0-.19,0-.18,0s.07,0,.13.08l.21.24a.67.67,0,0,0,.25.2,6.44,6.44,0,0,0,.24.61s0,0,0,0h0q.12.32.27.63l.18.35-.13.07c-.06-.11-.1.19-.5.87-.17-.28-.32-.56-.46-.85a21.2,21.2,0,0,1-1.6-4.74c-.06-.23-.1-.46-.15-.68a1,1,0,0,0,.47-.43.8.8,0,0,0,.1-.45.78.78,0,0,0,0-.22l0-.07,0,0h0l0,0v0Z"/>
- <path class="cls-7"
- d="M52.33,68.31a2.77,2.77,0,0,1-.31.53c0-.3,0-.63-.14-.72s-.56.2-.75.71a1.49,1.49,0,0,0-.1.8,1,1,0,0,0,.06.28l0,0-.65.61a1.77,1.77,0,0,1-.36-.26L50,70.16l-.44-.49,0,0,.17-.19c.3-.28.48-.45.51-.49a12.34,12.34,0,0,0,1.33-1.81A7,7,0,0,0,52.33,68.31Z"/>
- <path class="cls-7"
- d="M51.91,64.51a.48.48,0,0,1,.17.41.37.37,0,0,1-.27.31.24.24,0,0,1-.14,0,0,0,0,0,1,0,0c.06-.06.23-.16.2-.29a.23.23,0,0,0-.13-.16.26.26,0,0,0-.1,0,1,1,0,0,1-.21-.11c0-.14-.11-.28-.15-.42,0,0,0,0,.05,0a1.48,1.48,0,0,0,.42.19A.36.36,0,0,1,51.91,64.51Z"/>
- <path class="cls-7"
- d="M51.47,72.61c.32.23.55.35.54.43s-.32.14-.74,0a4.64,4.64,0,0,1-.69-.23l-.38-.17a1.87,1.87,0,0,1-.39-.23,1.7,1.7,0,0,1-.62-.75l1.23-1.16a.05.05,0,0,0,0,0h0l0,.07a2,2,0,0,0-.16.3.75.75,0,0,0,.13.82,3,3,0,0,0,.25.24l.3.23C51.13,72.36,51.31,72.5,51.47,72.61Z"/>
- <path class="cls-7"
- d="M51.88,68.12c.12.09.1.42.14.72a7.59,7.59,0,0,1-.93,1.07,1,1,0,0,1-.06-.28,1.49,1.49,0,0,1,.1-.8C51.32,68.32,51.74,68,51.88,68.12Z"/>
- <path class="cls-11" d="M51.65,65.2a0,0,0,0,0,0,0h0S51.64,65.21,51.65,65.2Z"/>
- <path class="cls-7" d="M51.49,43.61l-.92.26-.61.19-.54-.24c.32-.14.66-.27,1-.39l.38-.13h0Z"/>
- <path class="cls-7"
- d="M51.26,64.17c0,.14.1.28.15.42a.67.67,0,0,1-.25-.2L51,64.15c-.06-.05-.12-.05-.13-.08s.07-.07.18,0A1.05,1.05,0,0,1,51.26,64.17Z"/>
- <path class="cls-7"
- d="M47.19,89.26a2.24,2.24,0,0,0-.17.33l-.1-.19a6.53,6.53,0,0,1-.51-2,.28.28,0,0,1,0-.09c.13-.07.18-.12.17-.14l-.17.07a5.07,5.07,0,0,1,.37-2.64h0a14.28,14.28,0,0,0,.1,2.73,6.25,6.25,0,0,0,.6,1.76,7.06,7.06,0,0,0,.47.75l.46.78c.28.45.66,1,1.08,1.59a8.81,8.81,0,0,0,1.26,1.39c.38.34.68.52.66.57s0,0,0,0a2.27,2.27,0,0,1-.79-.37,7.72,7.72,0,0,1-1.46-1.31A18.44,18.44,0,0,1,47.9,91c-.31-.44-.51-.75-.53-.77s-.12-.21-.29-.54A1.34,1.34,0,0,0,47.19,89.26Z"/>
- <path class="cls-7"
- d="M51.22,3.43l-.51.22c-.52.23-1,.48-1.49.74A20.75,20.75,0,0,0,46.73,6l-.24.18a.9.9,0,0,0-.21.08,3.63,3.63,0,0,0-.46.34,1.67,1.67,0,0,0-.06-1c.09-.1.18-.21.28-.31a15.45,15.45,0,0,1,2.4-2.07c.45-.34,1-.65,1.46-1l-.12,1.15h.46A9.5,9.5,0,0,1,51.22,3.43Z"/>
- <path class="cls-7"
- d="M50.81,43.3l-.38.13c-.35.12-.69.25-1,.39l-.79-.35c-1.69-.76-3.27-1.5-4.61-2.18-.66-.35-1.28-.68-1.82-1s-1-.64-1.38-.88l-1.24-.82L37.19,37l-2.51-1.64c-.17-.13-.42-.28-.6-.44l-.22-.26a2.36,2.36,0,0,1-.15-.25c-.06-.09,0-.21,0-.28s0-.18.13-.28a1.12,1.12,0,0,1,.27-.26l.34-.24a3.36,3.36,0,0,1,.48-.28l.15-.07L35,33l-.05,0-.18,0-.59-.17-3.4-1,2.59-1.66.84-.54.21-.13.07,0,.16-.1.15-.09s-.08-.05-.13-.07L34.45,29l-.26-.12-.44-.18s-.22-.08-.31-.14a1,1,0,0,1-.28-.23.92.92,0,0 [...]
- <path class="cls-7"
- d="M50.91,50.39c-.11.28-.21.59-.31.9a3,3,0,0,1-.74-.33l.81-.85A.94.94,0,0,0,50.91,50.39Z"/>
- <path class="cls-7"
- d="M50.44,49.58c0,.06-.31.33-.82.73.06-.19.13-.37.19-.55C50.17,49.6,50.42,49.53,50.44,49.58Z"/>
- <path class="cls-7"
- d="M50.06,70.28a1.77,1.77,0,0,0,.36.26L49.19,71.7s0-.07,0-.11a1.89,1.89,0,0,1,0-1,3,3,0,0,1,.19-.61l.08-.16s0,0,0,0,0,0,0-.06a.35.35,0,0,1,.08-.1l.44.49Z"/>
- <path class="cls-7"
- d="M50.05,53.8a9.46,9.46,0,0,0-.12,1.07,4,4,0,0,1-1-.64l.89-.75A1.11,1.11,0,0,0,50.05,53.8Z"/>
- <path class="cls-7" d="M50,58.05c0,.35.08.72.13,1.08l-.27.07L49.72,58H50Z"/>
- <path class="cls-7"
- d="M49.42,43.82l.54.24a17.15,17.15,0,0,0-2.08.81,9.81,9.81,0,0,0-1.13.66s.31-.47,1-.88A13,13,0,0,1,49.42,43.82Z"/>
- <path class="cls-7"
- d="M48.61,73.81c.54.64,1.4,1.07,1.33,1.25s-1,.06-1.94-.55a3.46,3.46,0,0,1-.85-.86c.31-.31.62-.6.9-.87l0,.1A2.72,2.72,0,0,0,48.61,73.81Z"/>
- <path class="cls-11" d="M49.92,2.18h0Z"/>
- <path class="cls-7"
- d="M49.85,60a.8.8,0,0,1-.1.45,1,1,0,0,1-.47.43l-.15-.78a.08.08,0,0,0,0-.07v0l.14-.08h0l.05,0h0l0,0,0,0a.06.06,0,0,0,0,0l.13-.07h0l.12,0h0l0,0,0,.07A.78.78,0,0,1,49.85,60Z"/>
- <path class="cls-10" d="M49.82,59.63l0,0h0Z"/>
- <path class="cls-7"
- d="M49.81,49.76c-.06.18-.13.36-.19.55-.27.2-.59.45-.91.72-.48.38-1,.79-1.42,1.18l-.6.56-.25.24-.11.11-.07.08s0,0,0,.06a1.23,1.23,0,0,0,.06.21,2.61,2.61,0,0,0,.27.52c.25.39.92.85,1.43,1.53a3.19,3.19,0,0,1,.53,1.12,4.3,4.3,0,0,1,.1,1c0,.15,0,.29,0,.41a1.13,1.13,0,0,1,0,.18.19.19,0,0,1,0,.09.09.09,0,0,1,0,.06h0l-.11-.09h0s0,0,0,0h0s0,0,0,0l-.05,0s0-.07,0-.12-.05-.23-.08-.37A3.2,3.2,0,0,0,47.51,56c-.46-.51-1.14-.87-1.6-1.4a4.26,4.26,0,0,1-.45-.71c-.08-.19-.12-.33-.13-.3 [...]
- <path class="cls-10" d="M49.79,59.65v0l0,0h0Z"/>
- <path class="cls-7"
- d="M49.79,59.64h0l-.12.06h0l-.13.07a.06.06,0,0,1,0,0l0,0,0,0h0l-.05,0h0l-.14,0h0a.45.45,0,0,1,0-.17s0,0,0,0L49,59.21l-.12-1.12c-.06-.64-.12-1.26-.17-1.84a11.37,11.37,0,0,1,0-1.55l.14.21a3.52,3.52,0,0,1,.27.37l.14.19.24.29c0,.72.09,1.48.14,2.26v0c0,.36.06.73.08,1.11Z"/>
- <path class="cls-10" d="M49.78,59.66h0l-.12,0Z"/>
- <path class="cls-7"
- d="M49.18,52.18l.56.82-.88.55c0-.28.08-.56.13-.83l.09-.47h0A.34.34,0,0,0,49.18,52.18Z"/>
- <path class="cls-9"
- d="M49.62,50.31a15.8,15.8,0,0,0-.54,1.93h0l-1,.65-.27.18c-.18.13-.42.25-.48.45a1,1,0,0,0,.06.68c.06.14.08.17.12.25l.12.2a8.57,8.57,0,0,0,.52.76l.29.39.16.19.07.08h0a.88.88,0,0,0,0,.16c0,.22,0,.46,0,.7,0,.63.1,1.27.19,1.91h0a.47.47,0,0,0-.12-.23,1.81,1.81,0,0,0-.24-.24h0a.09.09,0,0,0,0-.06.19.19,0,0,0,0-.09,1.13,1.13,0,0,0,0-.18c0-.12,0-.26,0-.41a4.3,4.3,0,0,0-.1-1,3.19,3.19,0,0,0-.53-1.12c-.51-.68-1.18-1.14-1.43-1.53a2.61,2.61,0,0,1-.27-.52,1.23,1.23,0,0,1-.06-.21s0 [...]
- <path class="cls-7"
- d="M49.48,69.65l0,0a.35.35,0,0,0-.08.1s0,.06,0,.06,0,0,0,0l-.08.16a3,3,0,0,0-.19.61,1.89,1.89,0,0,0,0,1s0,.07,0,.11l-.42.4-.72.68c0-.1,0-.18-.06-.25a.82.82,0,0,0-.09-.26l-.77.42-.13.07-.16.08-.1,0h0l-.07-.05C47.61,71.76,48.53,70.69,49.48,69.65Z"/>
- <path class="cls-7"
- d="M49.13,60.11l.15.78-.19.07a2.46,2.46,0,0,1-.65.08A9.23,9.23,0,0,1,47.26,61a4.84,4.84,0,0,1-1.12-.28,1.5,1.5,0,0,1-.92-.83,1.07,1.07,0,0,1,0-.64,4.7,4.7,0,0,1,.18-.47,6.14,6.14,0,0,1,.4-.86,1.48,1.48,0,0,1,.29-.36l.33-.27a1.68,1.68,0,0,1,.36-.28c.11,0,.24-.11.35,0s.15.43.2.63,0,.17.05.25a.3.3,0,0,1,0,.21l-.23.07.1-.11c0-.07,0-.2-.07-.34s0-.27-.15-.39-.16,0-.22.08l-.18.19-.26.25a1.08,1.08,0,0,0-.21.29,8.29,8.29,0,0,0-.32.82,4.29,4.29,0,0,0-.13.44.59.59,0,0,0,0,.35, [...]
- <path class="cls-10" d="M49.14,60l.14,0-.14.08h0Z"/>
- <path class="cls-10" d="M49.14,60v0a.08.08,0,0,1,0,.07c0-.11,0-.21,0-.31a.45.45,0,0,0,0,.17h0Z"/>
- <path class="cls-9"
- d="M49.09,59.8c0,.1,0,.2,0,.31v0c0,.12-.38.24-.71.24a7.76,7.76,0,0,1-1.08,0,4.52,4.52,0,0,1-1-.2,1.07,1.07,0,0,1-.64-.48.59.59,0,0,1,0-.35,4.29,4.29,0,0,1,.13-.44,8.29,8.29,0,0,1,.32-.82,1.08,1.08,0,0,1,.21-.29l.26-.25.18-.19c.06-.05.15-.13.22-.08s.08.27.15.39.11.27.07.34l-.1.11,0,0a1.08,1.08,0,0,0-.54.38.41.41,0,0,0,0,.34.62.62,0,0,0,.12.2,1,1,0,0,0,.13.14s.11,0,.15-.09.08-.15.06-.17l-.1-.08c0-.07-.1-.14-.07-.21s.2-.17.38-.26a1.52,1.52,0,0,1,.57-.18.85.85,0,0,1,.54 [...]
- <path class="cls-10"
- d="M49,59.21l.07.58q-.09-.47-.15-.93c-.09-.64-.15-1.28-.19-1.91,0-.24,0-.48,0-.7.05.58.11,1.2.17,1.84Z"/>
- <path class="cls-7"
- d="M49.08,52.25l-.09.47c-.05.27-.1.55-.13.83l-.28.18-.27.17h0v0l.05.12.09.15c.09.17.2.33.31.51a11.37,11.37,0,0,0,0,1.55.88.88,0,0,1,0-.16h0L48.63,56l-.16-.19-.29-.39a8.57,8.57,0,0,1-.52-.76l-.12-.2c0-.08-.06-.11-.12-.25a1,1,0,0,1-.06-.68c.06-.2.3-.32.48-.45l.27-.18Z"/>
- <path class="cls-7"
- d="M48.94,58.86a.35.35,0,0,1,0,.18.35.35,0,0,1-.07.14s.11-.25-.12-.47-.28-.21-.44-.33a.85.85,0,0,0-.54-.19,1.52,1.52,0,0,0-.57.18c-.18.09-.35.18-.38.26s0,.14.07.21l.1.08s0,.1-.06.17-.12.11-.15.09a1,1,0,0,1-.13-.14.62.62,0,0,1-.12-.2.41.41,0,0,1,0-.34,1.08,1.08,0,0,1,.54-.38l0,0c-.08.09-.15.13-.14.15s.14,0,.35-.19c0,0,0,0,0,0a1.29,1.29,0,0,1,.4-.07.94.94,0,0,1,.55.2v.07a.32.32,0,0,0,0,.09s0,.09.16.12a.2.2,0,0,0,.09,0,1.81,1.81,0,0,1,.24.24A.47.47,0,0,1,48.94,58.86Z"/>
- <path class="cls-7" d="M48.64,80.17a.82.82,0,0,1,.26,0,.89.89,0,0,1-.35.16Z"/>
- <path class="cls-7"
- d="M48.64,80.17l-.09.13a5.51,5.51,0,0,1-.69.14,7.09,7.09,0,0,1-2.39-.11,3.52,3.52,0,0,1-1.23-.51,2.69,2.69,0,0,1-.83-.86,3.21,3.21,0,0,1-.34-.72c.08-.11.17-.21.25-.31l.12-.15a2.58,2.58,0,0,0,.34,1,2.52,2.52,0,0,0,.68.76,3.24,3.24,0,0,0,1.08.5,7.9,7.9,0,0,0,2.31.26A5.43,5.43,0,0,0,48.64,80.17Z"/>
- <path class="cls-7"
- d="M48.47,58.3l.11.09a.2.2,0,0,1-.09,0c-.17,0-.13-.09-.16-.12a.32.32,0,0,1,0-.09v-.07l.1.07h0v0l0,0s0,0,0,0Z"/>
- <path class="cls-10" d="M48.49,58.26s0,0,0,0l-.07-.06h0v0l.05,0s0,0,0,0Z"/>
- <path class="cls-10" d="M48.47,58.29h0v0s0,0,0,0l0,0v0h0Z"/>
- <path class="cls-7" d="M48.4,58.22h0l-.1-.07h0s0,0,.07,0h0Z"/>
- <path class="cls-8"
- d="M47.86,80.44a5.51,5.51,0,0,0,.69-.14,9.44,9.44,0,0,0-1,1.5,7.28,7.28,0,0,0-.36.76c-.2,0-.52.13-.91.2a6.19,6.19,0,0,1-2.55,0,3.4,3.4,0,0,1-2.05-1.35,2.85,2.85,0,0,1-.37-.66q.21-.39.45-.75c.41-.63.86-1.22,1.3-1.79a3.21,3.21,0,0,0,.34.72,2.69,2.69,0,0,0,.83.86,3.52,3.52,0,0,0,1.23.51A7.09,7.09,0,0,0,47.86,80.44Z"/>
- <path class="cls-7"
- d="M48,72.53c0,.07,0,.15.06.25-.28.27-.59.56-.9.87a2,2,0,0,1-.17-.27c-.1-.19-.17-.35-.21-.44l0-.06h0l.1,0,.16-.08.13-.07.77-.42A.82.82,0,0,1,48,72.53Z"/>
- <path class="cls-7"
- d="M47.77,76.63c0,.09-.18.27-.54.26A2.43,2.43,0,0,1,46,76.54a3,3,0,0,1-.88-.8l.91-1,.09.31a2.57,2.57,0,0,0,.44.75,3.75,3.75,0,0,0,.74.58C47.57,76.53,47.73,76.55,47.77,76.63Z"/>
- <path class="cls-7"
- d="M47.81,101.07l-.37.13-.41.13a.13.13,0,0,1-.13-.06c0-.07-.06-.14-.13-.2a.17.17,0,0,1,0-.24.15.15,0,0,1,.09-.13l.25-.07h0C47.33,100.79,47.57,100.93,47.81,101.07Z"/>
- <path class="cls-7" d="M47.2,82.56c.16,0,.25-.07.26,0a1,1,0,0,1-.31.15A.47.47,0,0,1,47.2,82.56Z"/>
- <path class="cls-7" d="M47.35,58s0,0,0,0c-.21.19-.34.19-.35.19s.06-.06.14-.15Z"/>
- <path class="cls-7"
- d="M47.2,82.56a.47.47,0,0,0-.05.1,6.1,6.1,0,0,1-.81.28,6.18,6.18,0,0,1-2.67.18,3.68,3.68,0,0,1-2.33-1.42,2.41,2.41,0,0,1-.28-.43c.08-.16.16-.33.26-.49a2.85,2.85,0,0,0,.37.66,3.4,3.4,0,0,0,2.05,1.35,6.19,6.19,0,0,0,2.55,0C46.68,82.69,47,82.61,47.2,82.56Z"/>
- <path class="cls-7" d="M47.19,89.26a1.34,1.34,0,0,1-.11.44L47,89.59A2.24,2.24,0,0,1,47.19,89.26Z"/>
- <path class="cls-7"
- d="M47,89.59l.06.11c-.07.24-.18.57-.32,1-.07.2-.15.42-.23.66a3.87,3.87,0,0,1-.58.93,3,3,0,0,1-1.24.86,5.69,5.69,0,0,1-1.68.54,6.4,6.4,0,0,1-1.57,0c-.29,0-.56-.07-.78-.11l-.15-.5a8.75,8.75,0,0,0,1,.17,5.82,5.82,0,0,0,1.46,0,5.93,5.93,0,0,0,1.6-.46,3.62,3.62,0,0,0,1.36-.93,2.74,2.74,0,0,0,.39-.64c.1-.23.18-.45.27-.65C46.77,90.16,46.91,89.83,47,89.59Z"/>
- <path class="cls-7"
- d="M47,73.38a2,2,0,0,0,.17.27c-.28.26-.56.55-.85.86l-.23.24a.73.73,0,0,0,0-.08,1.87,1.87,0,0,0-.64.16,2,2,0,0,0-.6.27,3.81,3.81,0,0,0,.28.54l.07.1c-.55.63-1.13,1.31-1.72,2a.08.08,0,0,1,0,0,.24.24,0,0,0-.26-.18.22.22,0,0,0-.2.26,1.93,1.93,0,0,0,.1.41c-.44.57-.89,1.16-1.3,1.79q-.24.36-.45.75l0-.07a2.69,2.69,0,0,1-.11-.33.16.16,0,0,0-.09-.12h0c.15-.35.32-.69.48-1l.08-.11c.38-.54.7-1.11,1-1.68l.82-1.19c.43-.48.86-1,1.32-1.41.64-.65,1.26-1.34,1.87-2l.07.05h0l0,.06C46.81, [...]
- <path class="cls-8"
- d="M46.92,89.4l.1.19c-.11.24-.25.57-.43,1-.09.2-.17.42-.27.65a2.74,2.74,0,0,1-.39.64,3.62,3.62,0,0,1-1.36.93,5.93,5.93,0,0,1-1.6.46,5.82,5.82,0,0,1-1.46,0,8.75,8.75,0,0,1-1-.17c-.25-.82-.49-1.62-.57-1.81l-.13-.34h0a11.84,11.84,0,0,1-.41-2.9c0-.27,0-.55,0-.83a2.08,2.08,0,0,0,.41.35,4.1,4.1,0,0,0,2.8.74,14.86,14.86,0,0,0,2.79-.51,3.91,3.91,0,0,0,1-.4.28.28,0,0,0,0,.09A6.53,6.53,0,0,0,46.92,89.4Z"/>
- <path class="cls-9"
- d="M46.77,84.35v.3a5.07,5.07,0,0,0-.37,2.64,1.56,1.56,0,0,0-.15.06c-.21.07-.51.15-.88.24a20.91,20.91,0,0,1-2.75.35,3.89,3.89,0,0,1-2.53-.76,3.19,3.19,0,0,1-.64-.65,5,5,0,0,1,.16-1,27.15,27.15,0,0,1,.87-3c.18-.43.37-.84.58-1.24a2.41,2.41,0,0,0,.28.43,3.68,3.68,0,0,0,2.33,1.42,6.18,6.18,0,0,0,2.67-.18,6.1,6.1,0,0,0,.81-.28A3.61,3.61,0,0,0,46.77,84.35Z"/>
- <rect class="cls-11" x="46.74" y="72.88" width="0.01" height="0.01"/>
- <path class="cls-7" d="M46.57,87.22s0,.07-.17.14,0,0,0-.07Z"/>
- <path class="cls-7"
- d="M46.4,87.29s0,0,0,.07a3.91,3.91,0,0,1-1,.4,14.86,14.86,0,0,1-2.79.51,4.1,4.1,0,0,1-2.8-.74,2.08,2.08,0,0,1-.41-.35c0-.22,0-.44,0-.65a3.19,3.19,0,0,0,.64.65,3.89,3.89,0,0,0,2.53.76,20.91,20.91,0,0,0,2.75-.35c.37-.09.67-.17.88-.24A1.56,1.56,0,0,1,46.4,87.29Z"/>
- <path class="cls-7"
- d="M46.05,74.67a.73.73,0,0,1,0,.08l-.91,1-.07-.1a3.81,3.81,0,0,1-.28-.54,2,2,0,0,1,.6-.27A1.87,1.87,0,0,1,46.05,74.67Z"/>
- <path class="cls-7"
- d="M45.76,5.53a1.67,1.67,0,0,1,.06,1c-.2.17-.38.36-.56.54s-.11.12-.17.19a3.83,3.83,0,0,1-.28.29h-.05a.27.27,0,0,1-.12-.15.29.29,0,0,1,0-.11,1.24,1.24,0,0,1,.07-.27A6.56,6.56,0,0,1,45.76,5.53Z"/>
- <path class="cls-11" d="M45.82,6.58h0c-.19.17-.37.36-.56.54C45.44,6.94,45.62,6.75,45.82,6.58Z"/>
- <path class="cls-7"
- d="M45.56,5.37a.31.31,0,0,1,.2.16,6.56,6.56,0,0,0-1,1.53,1.24,1.24,0,0,0-.07.27.29.29,0,0,0,0,.11.27.27,0,0,0,.12.15h.05l-.22.23-1-.26c-.81-.2-2-.48-3.32-.72a13.41,13.41,0,0,0-2.07-.24c-.74,0-1.59.1-2.45.2s-1.75.24-2.64.4l-.66.13-.54.13c-.08,0-.14,0-.19.07a.49.49,0,0,0-.08.18v.07a.66.66,0,0,0,0,.14c0,.1,0,.2,0,.31s0,.42,0,.64a11.6,11.6,0,0,0,.18,1.3,12.83,12.83,0,0,0,.29,1.26c.07.21.13.41.2.6l.05.13v0l0,.07.15.29a32,32,0,0,0,2.47,4c1.76,2.14,3,3.61,2.85,3.75s-.64-.3 [...]
- <path class="cls-7"
- d="M43.43,77.75a.08.08,0,0,0,0,0l-.12.15c-.08.1-.17.2-.25.31a1.93,1.93,0,0,1-.1-.41.22.22,0,0,1,.2-.26A.24.24,0,0,1,43.43,77.75Z"/>
- <path class="cls-7"
- d="M42.8,9.82c0,.08-.6.58-1.17,1.18a9.63,9.63,0,0,0-.73.85c-.19.24-.3.42-.31.42l-.32.42a6.13,6.13,0,0,0-.58.94c-.38.72-.45,1.54-.54,1.54s-.1-.21-.09-.54a3.59,3.59,0,0,1,.2-1.17,5.39,5.39,0,0,1,.5-1.1l.3-.48s.15-.19.38-.43a9,9,0,0,1,.82-.75h0l.56-.18c.37-.12.59-.39.52-.55C42.6,9.85,42.78,9.78,42.8,9.82Z"/>
- <path class="cls-10"
- d="M42.35,10c.07.16-.15.43-.52.55l-.56.18a.12.12,0,0,1,0,0A7.84,7.84,0,0,1,42.35,10Z"/>
- <path class="cls-7"
- d="M42.34,10h0a7.84,7.84,0,0,0-1,.68.12.12,0,0,0,0,0h0c-.08,0-.12,0-.13,0a1.43,1.43,0,0,0-.1-.16,1.31,1.31,0,0,0-.4-.32A3.36,3.36,0,0,0,38.72,10a8.12,8.12,0,0,1-3.36-.27c0-.22,1.65-.38,3.23-.73a4.34,4.34,0,0,1,2.6.08A2.51,2.51,0,0,1,42.34,10Z"/>
- <path class="cls-7"
- d="M41.29,80.71l0,.07c-.1.16-.18.33-.26.49a2.75,2.75,0,0,1-.23-.45c0-.09.07-.17.1-.25a0,0,0,0,0,0,0l.13-.28h0a.16.16,0,0,1,.09.12A2.69,2.69,0,0,0,41.29,80.71Z"/>
- <path class="cls-11" d="M41.07,80.26h0l-.13.28.13-.28Z"/>
- <path class="cls-11" d="M40.93,80.57c0,.08-.06.16-.1.25h0Z"/>
- <path class="cls-7"
- d="M40.83,80.82a2.75,2.75,0,0,0,.23.45c-.21.4-.4.81-.58,1.24a27.15,27.15,0,0,0-.87,3,5,5,0,0,0-.16,1,2.57,2.57,0,0,1-.19-.29l0,0c0-.29.1-.57.17-.89A24.6,24.6,0,0,1,40.83,80.82Z"/>
- <path class="cls-7" d="M40.53,93.06l.15.5-.1,0-.12-.49Z"/>
- <circle class="cls-9" cx="74.66" cy="26.13" r="0.81"/>
- <circle class="cls-9" cx="62.2" cy="27.25" r="0.91"/>
- <circle class="cls-9" cx="62.76" cy="28.68" r="0.18"/>
- <circle class="cls-9" cx="73.86" cy="27.51" r="0.19"/>
- <path class="cls-7"
- d="M64.13,43.12l.07,0a.29.29,0,0,0-.16-.56h0c-.1,0-.18.12-.21.2v0c-.09.37.47.53.56.16v0l-.21.2h0L64,42.54l-.06,0c-.35.14-.2.7.15.56Z"/>
- <path class="cls-7" d="M63.92,46.39l0,0a.29.29,0,0,0,.41.41l0,0a.29.29,0,0,0-.41-.41Z"/>
- <path class="cls-8"
- d="M90.14,88.49a1,1,0,0,1,0,.21l-.05.34a5.09,5.09,0,0,1-.12.68,10.14,10.14,0,0,1-.39,1.33,12,12,0,0,1-3.07,4.7,15.53,15.53,0,0,1-4.84,3.18l-.68.28-.7.23c-.46.17-1,.28-1.42.41-1,.21-1.92.36-3,.57l-3.17,1.25h0a18.09,18.09,0,0,1-3.4,1.13c-1.16.28-2.36.5-3.56.68l-1.45.19c.13-.25.3-.58.5-1s.49-1,.73-1.55a5.19,5.19,0,0,0,.46-1.93,3.85,3.85,0,0,0-.25-2,4.18,4.18,0,0,0-1.06-1.36,3,3,0,0,0-.66-.44,35.84,35.84,0,0,0,6.35-2.19c2.68-1.18,5.48-2.68,8.47-4.21.76-.37,1.51-.77,2.29 [...]
- <path class="cls-9"
- d="M86.7,7.22s.06.78,0,1.87A25.11,25.11,0,0,1,86.24,13a29.25,29.25,0,0,1-1,3.84,7.62,7.62,0,0,0-.54,1.75s0,0,.09,0c0,.31,0,1.08,0,1.84,0,.5-.06,1-.1,1.38s-.07.63-.07.65,0,.27-.08.64-.11.76-.2,1.19c0-.09,0-.19,0-.3,0-.29,0-.63,0-1a7.16,7.16,0,0,0-.42-1.35,5,5,0,0,0-1-1.34A7.31,7.31,0,0,0,81.41,19a6.82,6.82,0,0,0-3.92-.93,4.21,4.21,0,0,0-2,.82A6.4,6.4,0,0,0,74,20.35a5.3,5.3,0,0,0-.85,1.74c-.18.57-.31,1.11-.42,1.62a32.86,32.86,0,0,0-.55,3.49c0,.08-.16,1.47-.21,3.51a15. [...]
- <path class="cls-11" d="M85.26,6.06v0l-.06,0h0v0Z"/>
- <path class="cls-9"
- d="M85.71,27.38c-.28.29-.62.65-1,1.06s-.49.56-.76.85l-.4.46-.66.76-.28-.09c.29-1,.59-2.12.81-2.93C83.53,27.52,85,27.45,85.71,27.38Z"/>
- <path class="cls-11" d="M84.79,18.53l-.05,0a.79.79,0,0,1,0-.14S84.78,18.47,84.79,18.53Z"/>
- <path class="cls-9"
- d="M84.25,31.42l-.15,0h0l-.28.08-1.11.31-.51.14c.13-.37.29-.94.47-1.56l.28.09,1.2.78Z"/>
- <path class="cls-10" d="M84.25,24.29c0,.39,0,.62,0,.61s0-.06,0-.19l.06-.25A.85.85,0,0,1,84.25,24.29Z"/>
- <path class="cls-8"
- d="M84,24c0,.31.08.54.11.7a14.12,14.12,0,0,0-.43,1.68v0h0a.3.3,0,0,1,0,.11.39.39,0,0,1,0,.13s0,.06,0,.1,0,.18-.08.28a1.21,1.21,0,0,1,0,.18,1.8,1.8,0,0,1,0,.19s0,0,0,0a.42.42,0,0,0,0,.06,0,0,0,0,1,0,0c-.16.57-.37,1.26-.6,1.85l-1.35-.11a7.18,7.18,0,0,0,.15-2.11,4.53,4.53,0,0,0-.64-2,11.8,11.8,0,0,0-1.13-1.66,4.19,4.19,0,0,0-1.46-1.21,5,5,0,0,0-4.1,0l-.32.2,0-.09a4.39,4.39,0,0,1,.69-1.51,5.45,5.45,0,0,1,1.25-1.29,3.61,3.61,0,0,1,1.61-.73,6.21,6.21,0,0,1,3.58.71,6.62,6. [...]
- <path class="cls-10" d="M83.43,27.47v0h0A0,0,0,0,0,83.43,27.47Z"/>
- <path class="cls-8"
- d="M81.47,29.23l1.35.11c-.06.17-.13.34-.19.49-.53,1.21-.65,2.28-1,2.71s-.56.71-.56.71c-.44.36-1.08.88-1.86,1.48s-1.71,1.31-2.71,2c-.5.36-1,.74-1.55,1.09l-.41.26-.14.07-.15,0c-.05,0-.11,0-.12-.07L74.06,38l-.1-.22a13.5,13.5,0,0,1-1-3.66,14.36,14.36,0,0,1-.13-1.69.54.54,0,0,0,.17.07,3.86,3.86,0,0,0,1.09,0,15.52,15.52,0,0,0,2.54-.42A14,14,0,0,0,80,30.75a6.71,6.71,0,0,0,.84-.59,4.54,4.54,0,0,0,.38-.38,1.25,1.25,0,0,0,.09-.12l.09-.16C81.42,29.41,81.45,29.31,81.47,29.23Z"/>
- <path class="cls-10" d="M82,32l.16-.05c0,.06-.05.12-.07.17Z"/>
- <path class="cls-12"
- d="M81.16,27.14A7,7,0,0,1,81,29.09a.65.65,0,0,1-.07.21s0,0,0,.06l-.07.08a2.46,2.46,0,0,1-.33.31,5.84,5.84,0,0,1-.77.53,11.78,11.78,0,0,1-2.26,1,5.92,5.92,0,0,0,1.7-4.14c.09-2.17-1.34-4.54-2.93-5h.5a4.3,4.3,0,0,1,1.53.45,3.85,3.85,0,0,1,1.31,1.15A6.79,6.79,0,0,1,81.16,27.14Z"/>
- <path class="cls-13"
- d="M76.22,22.06c1.59.5,3,2.87,2.93,5a5.92,5.92,0,0,1-1.7,4.14c-.33.11-.64.2-.94.27a15.51,15.51,0,0,1-2.44.38H74a2.34,2.34,0,0,1-1-1.47h0c.1-1.82.25-3,.26-3.11s.1-1.45.46-3.41c.06-.36.15-.73.24-1.11a.36.36,0,0,1,.11-.1h0a5.88,5.88,0,0,1,2.18-.61Z"/>
- <path class="cls-12" d="M73.89,22.72l.1,0a.36.36,0,0,0-.11.1S73.89,22.74,73.89,22.72Z"/>
- <path class="cls-12"
- d="M74,31.89a3.21,3.21,0,0,1-.81-.06.4.4,0,0,0-.29.05c0-.39,0-.77,0-1.13a3.25,3.25,0,0,1,0-.33A2.34,2.34,0,0,0,74,31.89Z"/>
- <path class="cls-9"
- d="M73.8,60.42c0,.16-.12.29-.26.41a2.23,2.23,0,0,1-.42.3.86.86,0,0,1-.34.09,4.88,4.88,0,0,0,.08-.61,6.06,6.06,0,0,0,.06-1c0-.18,0-.34,0-.48h0a.21.21,0,0,0,0,.13.61.61,0,0,1,.36.23A2,2,0,0,1,73.8,60.42Z"/>
- <path class="cls-14"
- d="M73.59,42.9c.18.22.26.47.11.6l-.18.15a1.62,1.62,0,0,0-.18.19.34.34,0,0,0-.07.11.42.42,0,0,0,0,.1.19.19,0,0,0,0,.08v0a.38.38,0,0,1-.07.21l-.08.08s-.09.06-.09,0,.12-.22,0-.31a.55.55,0,0,0-.38.14c-.07.06-.1.09-.09.1s0,0,.13,0l.14,0,.08,0h0s0,0,0,0c0,.2,0,.17,0,.22a.36.36,0,0,1,0,.11.83.83,0,0,0-.06.21s0,0,0,0v0c-.05,0-.09,0-.14,0s-.27.2-.39.27a.58.58,0,0,1-.44.13.16.16,0,0,0,0-.14c0-.09-.09-.09-.09-.08a.3.3,0,0,1,0,.09s-.08.09-.18.13a3.33,3.33,0,0,1-.78.22,1.59,1.59 [...]
- <path class="cls-9"
- d="M73,54a2,2,0,0,1,0,.4c0,.31-.19.81-.25,1.28,0,.21-.06.42-.08.62-.15-.86-.4-1.9-.66-2.93l-.16-.6.11,0a1.84,1.84,0,0,1,.94.61.91.91,0,0,1,.11.44A.79.79,0,0,1,73,54Z"/>
- <path class="cls-9"
- d="M72.25,57c.29.78.46,1.29.55,1.28-.07,0,0,.85-.2,2.3a15.37,15.37,0,0,1-2.22,5.6A28.34,28.34,0,0,1,68,69.45a5.89,5.89,0,0,1-3.79,1.9,16.42,16.42,0,0,1-2.35.22,15.88,15.88,0,0,1-2.4-.12,10.2,10.2,0,0,1-4.36-2L54.47,69h0a1.6,1.6,0,0,0,.26-1.3.18.18,0,0,0-.19-.11h-.83l-.21,0,.06.2s0,.12-.21.24l-.14-.13a6.9,6.9,0,0,1-1.1-1.62l-.18-.35q-.15-.32-.27-.63a.24.24,0,0,0,.14,0,.37.37,0,0,0,.27-.31.48.48,0,0,0-.17-.41.36.36,0,0,0-.18-.11,1.48,1.48,0,0,1-.42-.19s0,0-.05,0a23,23 [...]
- <path class="cls-8"
- d="M73,2.19l-.42.4a4.62,4.62,0,0,0-.72,1,13.45,13.45,0,0,0-.62,1.26c-.13.34-.28.75-.43,1.18a2.55,2.55,0,0,0-.08.26s0,.07,0,0V6.22l0-.16,0-.32q0-.3-.06-.57a3,3,0,0,0-.1-.5,5.46,5.46,0,0,0-.21-.61,12.39,12.39,0,0,0-.83-1.76c.3,0,.61-.11.92-.15A8.43,8.43,0,0,1,71.8,2a1.48,1.48,0,0,1,.31,0l.41.05A3.64,3.64,0,0,0,73,2.19Z"/>
- <path class="cls-8"
- d="M72.2,56.83a.66.66,0,0,0,0,.15,4.86,4.86,0,0,0-.63,0A10.19,10.19,0,0,1,70,56.92a5.15,5.15,0,0,1-2.09-.67c-.17-.11-.35-.21-.52-.33l-.24-.17-.08-.07a.77.77,0,0,1-.13-.12l0-.05.08,0,.16,0,.19,0a10.19,10.19,0,0,0,1.08.12,4.36,4.36,0,0,0,2-.22,3.23,3.23,0,0,0,1.07-.67Z"/>
- <path class="cls-10" d="M71.77,45.45s0,0,0,0A.08.08,0,0,1,71.77,45.45Z"/>
- <g id="_Group_" data-name="<Group>">
- <path class="cls-9"
- d="M70.82,83.14a1.05,1.05,0,0,0-.31-.28,1.38,1.38,0,0,0-.6-.08c-.16,0-.25,0-.25,0s.09.06.24.09a1.66,1.66,0,0,1,.49.16.82.82,0,0,1,.25.35l-.09.11a1,1,0,0,1-.36.3,2.26,2.26,0,0,1-1.07.11l-2.42,0-1.49-.82L65,82.21h.07l.32-.06h.12c.2,0,.48,0,.84,0a5.7,5.7,0,0,0,1.35,0,9.26,9.26,0,0,0,1.63-.62,7.83,7.83,0,0,1,.86-.38.72.72,0,0,1,.73.28,1.18,1.18,0,0,1,.32.66.89.89,0,0,0-.4-.16,1.53,1.53,0,0,0-.57.08.3.3,0,0,0-.17.09s0,0,0,0,0,0,.08,0a.38.38,0,0,1,.16,0,2.13,2.13,0,0, [...]
- </g>
- <path class="cls-8"
- d="M69.89,50.61l.47,1.26a4.92,4.92,0,0,1-.67.41,3.93,3.93,0,0,1-1.47.4,2.64,2.64,0,0,1-1.53-.43,1.41,1.41,0,0,1-.36-.37.57.57,0,0,1-.12-.23s0,0,.07,0l.12,0,.48,0,1.08-.1a2.94,2.94,0,0,0,1.93-.82Z"/>
- <path class="cls-11" d="M69.72,47.3h0v0Z"/>
- <path class="cls-9"
- d="M69.72,48.06v.08c0,.1-.13.22-.13.22l-.26.18a1.66,1.66,0,0,1-.79.36,1.32,1.32,0,0,1-1-.09.9.9,0,0,1-.27-.2.34.34,0,0,1,0-.15h0c.25-.08.49-.17.69-.25a8.55,8.55,0,0,0,1.35-.5c0,.06.07.12.1.13l.06,0,0,0h0A.76.76,0,0,1,69.72,48.06Z"/>
- <path class="cls-10" d="M69.26,47.67a1.24,1.24,0,0,0,.2-.1s-.07.06-.19.13v0Z"/>
- <path class="cls-9"
- d="M69.39,63.42h0l0,0h0l-.09,0a4.78,4.78,0,0,0-.92.64c-.16.12-.31.24-.45.23a.8.8,0,0,1-.38-.23.78.78,0,0,1-.2-.26.15.15,0,0,1,0-.11s0,0,.13,0a1.25,1.25,0,0,0,.36-.09,5.22,5.22,0,0,1,1-.31h.53Z"/>
- <path class="cls-8"
- d="M69,31.47a13.85,13.85,0,0,1,0,3.23,13.51,13.51,0,0,1-1.65,4.65c-.3.52-.57.92-.76,1.2a3,3,0,0,0-.29.42s-.13.05-.38.1a5.22,5.22,0,0,1-1.12.1A6.93,6.93,0,0,1,63,41a15.08,15.08,0,0,1-2.18-.67c-1.57-.59-3.37-1.41-5.29-2.33-.48-.22-1-.45-1.45-.7l-.7-.38c-.23-.14-.47-.28-.69-.43a24.1,24.1,0,0,1-2.66-2,48.11,48.11,0,0,1-4.69-4.67l-.52-.6L44.58,29l0,0s0,0,0-.05v0l.11-.14c.14-.21.29-.41.43-.61A25.21,25.21,0,0,1,46.86,26a24.3,24.3,0,0,1,3-2.81c.79-.61,1.31-.89,1.36-.94s.44- [...]
- <path class="cls-9"
- d="M68.29,70.07c-.17.32-.34.62-.48.87s-.36.64-.37.65-.14.29-.32.69-.45.9-.74,1.38a10.11,10.11,0,0,0-1.16,2c0,.07.15,0,.33-.16a1.48,1.48,0,0,1,0,.27,25.11,25.11,0,0,0-.33,2.81c-.06,1.31-.06,2.23-.08,2.83,0,.32,0,.54,0,.69a.13.13,0,0,1,0,.06v0H65L64.36,79c0-.17-.07-.33-.11-.5l0-.25-.08-.29c0-.29-.06-.57-.08-.84-.05-.62-.1-1.2-.14-1.73-.09-1.07-.15-1.95-.2-2.56,0-.25,0-.46,0-.61l.66-.11a9.59,9.59,0,0,0,2.31-.74A5.08,5.08,0,0,0,68.29,70.07Z"/>
- <path class="cls-12"
- d="M67.54,31.84s0,.75,0,.76a9.45,9.45,0,0,1-.92.58c-.18.1-.39.2-.62.3a5.74,5.74,0,0,0,1-3.41A13.61,13.61,0,0,1,67.54,31.84Z"/>
- <path class="cls-13"
- d="M67.06,30.07a5.74,5.74,0,0,1-1,3.41c-.23.09-.48.18-.76.26l.14-.11a10.05,10.05,0,0,1-2.5.35H62a5.25,5.25,0,0,1-1.9-4.7c.14-2.6,1.6-4.63,3.4-4.74a6.68,6.68,0,0,1,.78.47,4.12,4.12,0,0,1,.85,1l.12.15.24.45.08.15A21.9,21.9,0,0,1,67.06,30.07Z"/>
- <path class="cls-9"
- d="M66.43,48.23h-.06a9.52,9.52,0,0,1-1.93-.13,15.12,15.12,0,0,1-2.81-.9l1.3-.85a15.58,15.58,0,0,0,1.3,1.21,3.65,3.65,0,0,0,1,.49,4,4,0,0,0,1.07.17Z"/>
- <path class="cls-9"
- d="M64.74,41.44l1.6.64a.3.3,0,0,0-.22.11.83.83,0,0,0-.18.34s.07,0,.15.07l-.16.15s0,0,0,0l0,0-.46.79A15.13,15.13,0,0,0,63.2,44l-.09-.75s0,0,0,0a4.16,4.16,0,0,0-1.24-.48l-.62-.16.38-1.42a9.31,9.31,0,0,0,1.26.28A7.51,7.51,0,0,0,64.74,41.44Z"/>
- <path class="cls-9"
- d="M65.33,97.41a3.55,3.55,0,0,1,.13,1.79,5,5,0,0,1-.17.92A6.78,6.78,0,0,1,65,101c-.25.54-.53,1-.77,1.47s-.44.8-.59,1-.1.21-.14.28l-1.4.14c-.6,0-1.21.1-1.81.13l-.32,0h-.3l-.19,0-.9-.14c-1.61-.25-3.22-.45-4.78-.74,0,0,0,0,0,0,.14-.2.37-.47.64-.8a8.93,8.93,0,0,0,1.69-2.72,5.16,5.16,0,0,0,.08-3.17,1.82,1.82,0,0,0-.56-.8l1,.17a18.79,18.79,0,0,0,6.09-.11c.31,0,.63-.11,1-.19a2.52,2.52,0,0,1,.75.57A4.16,4.16,0,0,1,65.33,97.41Z"/>
- <path class="cls-13"
- d="M65.4,33.63l-.14.11-.34.1h0a15.44,15.44,0,0,1-2,.14A10.05,10.05,0,0,0,65.4,33.63Z"/>
- <path class="cls-13" d="M65.26,33.74l-.06,0-.28.05Z"/>
- <path class="cls-11" d="M64.81,7.55v0l-.29,0v0Z"/>
- <path class="cls-9"
- d="M64.39,63.38s0,0,0,0a.49.49,0,0,0,0,.11h0l-.28,0a.53.53,0,0,0,.14-.12l.13-.07s0,0,0,0A.21.21,0,0,0,64.39,63.38Z"/>
- <path class="cls-13"
- d="M64.91,33.84a6.6,6.6,0,0,1-.84.16H64a.29.29,0,0,0-.24,0h-.05l-.5,0-.55,0a3.85,3.85,0,0,1-.48,0L62,34h.86A15.44,15.44,0,0,0,64.91,33.84Z"/>
- <path class="cls-8" d="M64.21,2.78c.09.73.19,1.81.26,3.32A13.48,13.48,0,0,0,63,2.73Z"/>
- <path class="cls-13" d="M64.07,34l-.14,0h-.16A.29.29,0,0,1,64,34Z"/>
- <path class="cls-9"
- d="M64,63.47a1,1,0,0,1-.36.2c-.35.12-.73.21-.84.26.07-.09.25-.46.6-.5A3.94,3.94,0,0,1,64,63.47Z"/>
- <path class="cls-9"
- d="M63.11,43.2l.09.75c-.25,0-.49.1-.74.16l-1,.27c-.47-.39-.81-.64-.86-.58a6.65,6.65,0,0,0,.58.66l-.8.25c-.58.19-1,.36-1,.37a8.64,8.64,0,0,0-1,.5l-.41.28c-1.2-.39-2.46-.76-3.71-1.11-.23-.07-.49-.13-.67-.2L53,44.27l-1.32-.59-.15-.07c.7-.19,1.36-.35,1.9-.47.78-.17,1.32-.22,1.35-.23s.56-.1,1.36-.19A20.23,20.23,0,0,1,59,42.65a23,23,0,0,1,2.86.31C62.52,43.08,63,43.2,63.11,43.2Z"/>
- <path class="cls-12"
- d="M62.88,24.22l.66.32c-1.8.11-3.26,2.14-3.4,4.74A5.25,5.25,0,0,0,62,34l.15.1a15.7,15.7,0,0,1-2.66-.35,25,25,0,0,1-2.47-.64A9.23,9.23,0,0,1,54.65,32l0,0-.84-.59-.41-.32-.28-.22v-.09l0-.24c0-.16.08-.32.13-.48a6.91,6.91,0,0,1,.37-.95,10.46,10.46,0,0,1,2.48-3.28,8.38,8.38,0,0,1,3.31-2.09A4.94,4.94,0,0,1,62.88,24.22Z"/>
- <path class="cls-11" d="M62.78,64s0,0,0,0S62.79,64,62.78,64Z"/>
- <path class="cls-9"
- d="M61.86,72.35c.19,0,.38,0,.57,0l-.21,1.34c-.15,1.07-.36,2.5-.58,3.94l0,.26v.07h0s0,0,0,0l0,.09-.21.5c-.14.34-.26.66-.39,1l-.69,1.76c-.2.52-.37,1-.48,1.27,0,.08-.06.15-.08.22v0l0,.07s0,0,0,0l0,0c0,.09,0,.13,0,.14l-.51,1.63c-.33.27-.71.6-1.12.93l-1.39,1.19-.18.16-.09.07,0,0h0a2.8,2.8,0,0,1-.14-.25A.6.6,0,0,1,56,86.6a.36.36,0,0,1,0-.12.61.61,0,0,1,.19-.38,3.53,3.53,0,0,1,.28-.37c-.09-.21-.89.56-.79.71a.82.82,0,0,0,.21.57l.11.12L55.13,87l-.45-.07-.19,0a.76.76,0,0,1,0- [...]
- <path class="cls-9"
- d="M61.55,44.91l1,1.08-1.14.62-.53.3-1.12-.44-1.06-.37c.5-.26.87-.41.9-.42s.38-.18.93-.4Z"/>
- <path class="cls-9"
- d="M60.21,47.39l-.09.07a13.14,13.14,0,0,0-1.21,1.12,8.94,8.94,0,0,0-1.49,1.81l-1.7.25a3.84,3.84,0,0,1-.8-.43,2.34,2.34,0,0,1-.38-.28c-.09-.07-.16-.16-.24-.23a3.46,3.46,0,0,1-.42-.57l.33-.19a20.84,20.84,0,0,0,2.69-1.65l1-.64c.58.17,1.14.34,1.69.52Z"/>
- <path class="cls-11" d="M59.23,69.29s.08.12,0,0Z"/>
- <path class="cls-8"
- d="M58.47,6.77c0,.08.11.28,0,.12s-.28-.28-.58-.53l-.15-.13L57.39,6l-.45-.34L56.06,5a13.29,13.29,0,0,0-1.62-1A20.13,20.13,0,0,0,52.38,3a14.93,14.93,0,0,1,3.11-.49c.41,0,.81,0,1.2,0,.19.34.39.77.61,1.28.31.7.73,1.82,1,2.46,0,0,.06.15.12.31Z"/>
- <path class="cls-9"
- d="M57.2,46.47l-.57.44a17.91,17.91,0,0,0-2.42,2l-.33.19a3.84,3.84,0,0,1-.23-.45,11,11,0,0,1-.55-1.74c-.07-.3-.12-.54-.18-.75.18-.35.3-.6.37-.74h0c.27.09.49.14.74.2C55.11,45.92,56.17,46.18,57.2,46.47Z"/>
- <path class="cls-10" d="M56.76,71.5l0,.07,0-.1A.09.09,0,0,0,56.76,71.5Z"/>
- <path class="cls-8"
- d="M56.37,55.13l0,0-.55.45a17.59,17.59,0,0,1-2.47,1.68,7,7,0,0,1-2.05.64,9.74,9.74,0,0,1-1.23.12H50q-.06-.6-.09-1.17a14.88,14.88,0,0,1,0-2l.51.21a7.34,7.34,0,0,0,2.14.42,11.87,11.87,0,0,0,1.45,0l.82-.06.63-.07.55-.14Z"/>
- <path class="cls-10" d="M56.29,1.68l0,.05s0,0,0,0Z"/>
- <path class="cls-8"
- d="M56,96.53a5.24,5.24,0,0,1-.28,2.94A8.63,8.63,0,0,1,54,101.94a12,12,0,0,0-.9,1.1c-.53-.11-1.06-.23-1.57-.37a13.43,13.43,0,0,1-3.16-1.31c-.18-.09-.35-.19-.52-.29l.68-.25a10.08,10.08,0,0,0,2.88-1.66,3.85,3.85,0,0,0,1-1.49,4.18,4.18,0,0,0,.25-1.53,3.81,3.81,0,0,0-.22-1.39l.43.13,1.59.46.9.26A1.69,1.69,0,0,1,56,96.53Z"/>
- <path class="cls-9"
- d="M55.61,70.91c0,.08-.08.18-.13.3a13.28,13.28,0,0,1-.83,1.59,24.19,24.19,0,0,1-1.51,2.14c-.6.78-1.23,1.57-1.94,2.33-.89,1-1.81,2-2.56,2.9a5.43,5.43,0,0,1-.79.09A7.9,7.9,0,0,1,45.54,80a3.24,3.24,0,0,1-1.08-.5,2.52,2.52,0,0,1-.68-.76,2.58,2.58,0,0,1-.34-1c.59-.73,1.17-1.41,1.72-2a3,3,0,0,0,.88.8,2.43,2.43,0,0,0,1.19.35c.36,0,.59-.17.54-.26s-.2-.1-.43-.24a3.75,3.75,0,0,1-.74-.58,2.57,2.57,0,0,1-.44-.75l-.09-.31.23-.24c.29-.31.57-.6.85-.86a3.46,3.46,0,0,0,.85.86c.89.61 [...]
- <path class="cls-8"
- d="M55.33,50.73s.15,0,.05,0l-.29,0-.55.08-.51,0-.6,0a4.77,4.77,0,0,1-1.8-.19,3,3,0,0,1-.72-.4c.08-.22.17-.42.25-.62.41-.88.85-1.72,1.17-2.38l.08-.18s0,0,0,0c.22.44.46,1,.85,1.69a4.45,4.45,0,0,0,.81,1,3.11,3.11,0,0,0,.28.23l.21.16a3.66,3.66,0,0,0,.52.28l.09,0Z"/>
- <path class="cls-9"
- d="M54.48,67.85a1.35,1.35,0,0,1-.2.91l0,0c-.23-.2-.46-.4-.67-.61a.71.71,0,0,0,.27-.33C54,67.86,54.31,67.86,54.48,67.85Z"/>
- <path class="cls-10" d="M52.43,94.75h-.06s0-.06,0-.06S52.4,94.71,52.43,94.75Z"/>
- <path class="cls-9"
- d="M52.37,94.74a9.38,9.38,0,0,1,0,1.39,3.65,3.65,0,0,1-1.34,2.67,9.58,9.58,0,0,1-2.79,1.45c-.41.15-.76.26-1,.33l-.16,0h0l-.22-.15-.35-.24c-.18-.13-.42-.3-.62-.47-.43-.33-.9-.78-1.34-1.17,0,.53,0,1,0,1.56l-.8-1.7-.4-.84-.56.74-.6.77-.08.1s0,.06,0,0v-.06l-.06-.3L41.62,97c-.06-.31-.13-.61-.2-.92l-.1-.47a3,3,0,0,0-.16-.56c-.08-.17-.27-.8-.48-1.5.22,0,.49.08.78.11a6.4,6.4,0,0,0,1.57,0,5.69,5.69,0,0,0,1.68-.54A3,3,0,0,0,46,92.25a3.87,3.87,0,0,0,.58-.93c.08-.24.16-.46.23-. [...]
- <path class="cls-11" d="M51.65,65.2a0,0,0,0,0,0,0h0S51.64,65.21,51.65,65.2Z"/>
- <path class="cls-11" d="M49.92,2.18h0Z"/>
- <path class="cls-10" d="M49.82,59.63l0,0h0Z"/>
- <path class="cls-10" d="M49.79,59.65v0l0,0h0Z"/>
- <path class="cls-10" d="M49.78,59.66h0l-.12,0Z"/>
- <path class="cls-9"
- d="M49.62,50.31a15.8,15.8,0,0,0-.54,1.93h0l-1,.65-.27.18c-.18.13-.42.25-.48.45a1,1,0,0,0,.06.68c.06.14.08.17.12.25l.12.2a8.57,8.57,0,0,0,.52.76l.29.39.16.19.07.08h0a.88.88,0,0,0,0,.16c0,.22,0,.46,0,.7,0,.63.1,1.27.19,1.91h0a.47.47,0,0,0-.12-.23,1.81,1.81,0,0,0-.24-.24h0a.09.09,0,0,0,0-.06.19.19,0,0,0,0-.09,1.13,1.13,0,0,0,0-.18c0-.12,0-.26,0-.41a4.3,4.3,0,0,0-.1-1,3.19,3.19,0,0,0-.53-1.12c-.51-.68-1.18-1.14-1.43-1.53a2.61,2.61,0,0,1-.27-.52,1.23,1.23,0,0,1-.06-.21s0 [...]
- <path class="cls-10" d="M49.14,60l.14,0-.14.08h0Z"/>
- <path class="cls-10" d="M49.14,60v0a.08.08,0,0,1,0,.07c0-.11,0-.21,0-.31a.45.45,0,0,0,0,.17h0Z"/>
- <path class="cls-9"
- d="M49.09,59.8c0,.1,0,.2,0,.31v0c0,.12-.38.24-.71.24a7.76,7.76,0,0,1-1.08,0,4.52,4.52,0,0,1-1-.2,1.07,1.07,0,0,1-.64-.48.59.59,0,0,1,0-.35,4.29,4.29,0,0,1,.13-.44,8.29,8.29,0,0,1,.32-.82,1.08,1.08,0,0,1,.21-.29l.26-.25.18-.19c.06-.05.15-.13.22-.08s.08.27.15.39.11.27.07.34l-.1.11,0,0a1.08,1.08,0,0,0-.54.38.41.41,0,0,0,0,.34.62.62,0,0,0,.12.2,1,1,0,0,0,.13.14s.11,0,.15-.09.08-.15.06-.17l-.1-.08c0-.07-.1-.14-.07-.21s.2-.17.38-.26a1.52,1.52,0,0,1,.57-.18.85.85,0,0,1,.54 [...]
- <path class="cls-10"
- d="M49,59.21l.07.58q-.09-.47-.15-.93c-.09-.64-.15-1.28-.19-1.91,0-.24,0-.48,0-.7.05.58.11,1.2.17,1.84Z"/>
- <path class="cls-10" d="M48.49,58.26s0,0,0,0l-.07-.06h0v0l.05,0s0,0,0,0Z"/>
- <path class="cls-10" d="M48.47,58.29h0v0s0,0,0,0l0,0v0h0Z"/>
- <path class="cls-8"
- d="M47.86,80.44a5.51,5.51,0,0,0,.69-.14,9.44,9.44,0,0,0-1,1.5,7.28,7.28,0,0,0-.36.76c-.2,0-.52.13-.91.2a6.19,6.19,0,0,1-2.55,0,3.4,3.4,0,0,1-2.05-1.35,2.85,2.85,0,0,1-.37-.66q.21-.39.45-.75c.41-.63.86-1.22,1.3-1.79a3.21,3.21,0,0,0,.34.72,2.69,2.69,0,0,0,.83.86,3.52,3.52,0,0,0,1.23.51A7.09,7.09,0,0,0,47.86,80.44Z"/>
- <path class="cls-8"
- d="M46.92,89.4l.1.19c-.11.24-.25.57-.43,1-.09.2-.17.42-.27.65a2.74,2.74,0,0,1-.39.64,3.62,3.62,0,0,1-1.36.93,5.93,5.93,0,0,1-1.6.46,5.82,5.82,0,0,1-1.46,0,8.75,8.75,0,0,1-1-.17c-.25-.82-.49-1.62-.57-1.81l-.13-.34h0a11.84,11.84,0,0,1-.41-2.9c0-.27,0-.55,0-.83a2.08,2.08,0,0,0,.41.35,4.1,4.1,0,0,0,2.8.74,14.86,14.86,0,0,0,2.79-.51,3.91,3.91,0,0,0,1-.4.28.28,0,0,0,0,.09A6.53,6.53,0,0,0,46.92,89.4Z"/>
- <path class="cls-9"
- d="M46.77,84.35v.3a5.07,5.07,0,0,0-.37,2.64,1.56,1.56,0,0,0-.15.06c-.21.07-.51.15-.88.24a20.91,20.91,0,0,1-2.75.35,3.89,3.89,0,0,1-2.53-.76,3.19,3.19,0,0,1-.64-.65,5,5,0,0,1,.16-1,27.15,27.15,0,0,1,.87-3c.18-.43.37-.84.58-1.24a2.41,2.41,0,0,0,.28.43,3.68,3.68,0,0,0,2.33,1.42,6.18,6.18,0,0,0,2.67-.18,6.1,6.1,0,0,0,.81-.28A3.61,3.61,0,0,0,46.77,84.35Z"/>
- <rect class="cls-11" x="46.74" y="72.88" width="0.01" height="0.01"/>
- <path class="cls-11" d="M45.82,6.58h0c-.19.17-.37.36-.56.54C45.44,6.94,45.62,6.75,45.82,6.58Z"/>
- <path class="cls-11" d="M41.07,80.26h0l-.13.28.13-.28Z"/>
- <path class="cls-11" d="M40.93,80.57c0,.08-.06.16-.1.25h0Z"/>
- <circle class="cls-9" cx="74.66" cy="26.13" r="0.81"/>
- <circle class="cls-9" cx="62.2" cy="27.25" r="0.91"/>
- <circle class="cls-9" cx="62.76" cy="28.68" r="0.18"/>
- <circle class="cls-9" cx="73.86" cy="27.51" r="0.19"/>
- <path class="cls-7"
- d="M70.82,83.14c-.06.09-.13.18-.18.27a.84.84,0,0,0-.26-.35,1.51,1.51,0,0,0-.48-.16c-.15,0-.25-.07-.25-.09s.1,0,.26,0a1.38,1.38,0,0,1,.6.08A1.05,1.05,0,0,1,70.82,83.14Z"/>
- <g class="cls-15">
- <path class="cls-16"
- d="M62,78.53c-.61,0-1.23-.08-1.85-.1-.18,4.39-4.9,5.19-6,9C59.4,89.88,62.24,83.56,62,78.53Z"/>
- </g>
- <path class="cls-17" d="M64.57,78.76l-.2,0,.09.42C64.5,79,64.54,78.89,64.57,78.76Z"/>
- <g class="cls-15">
- <path class="cls-16"
- d="M64.7,84.59c1.51.89,3.08.4,5.35-.19C67.22,83,65.16,82,64.46,79.16,63.88,81.24,63.73,83.12,64.7,84.59Z"/>
- </g>
- <path class="cls-18"
- d="M70.3,93.27A35.84,35.84,0,0,1,64,95.46a3,3,0,0,1,.66.44,5.22,5.22,0,0,1,.63.68A36.81,36.81,0,0,0,77.4,89.76C74.92,91,72.56,92.27,70.3,93.27Z"/>
- <path class="cls-8"
- d="M81.74,95.5a17.57,17.57,0,0,1,5.85-2.33c-1.17,0-2.34-.59-1.76-1.76a17.83,17.83,0,0,1,4.27-3L89.83,88a5.17,5.17,0,0,0-.42-.51,4.33,4.33,0,0,0-1-.81A4.17,4.17,0,0,0,86,86.22a8.86,8.86,0,0,0-2.52.62c-.8.31-1.58.72-2.37,1.09s-1.53.76-2.29,1.13l-1.37.7a36.81,36.81,0,0,1-12.16,6.82,3.29,3.29,0,0,1,.43.68,3.85,3.85,0,0,1,.25,2,5.19,5.19,0,0,1-.46,1.93c-.24.58-.51,1.1-.73,1.55s-.37.7-.5,1l1.45-.19c.87-.13,1.73-.29,2.59-.47,4.9-2.2,9.71-4.79,14.64-6.35C81.74,96.67,81.15,9 [...]
- <path class="cls-19"
- d="M90.12,88.42a17.83,17.83,0,0,0-4.27,3c-.58,1.17.58,1.76,1.75,1.76a17.39,17.39,0,0,0-5.84,2.33c-.59.59,0,1.17,1.17,1.17C78,98.22,73.19,100.81,68.29,103l1-.21a18.09,18.09,0,0,0,3.4-1.13h0l3.17-1.25c1.09-.21,2-.36,3-.58a14.28,14.28,0,0,0,1.42-.4L81,99.2l.69-.28a15.82,15.82,0,0,0,4.84-3.18A12.22,12.22,0,0,0,89.58,91,10.61,10.61,0,0,0,90,89.71c.06-.22.08-.45.12-.68l0-.34a1,1,0,0,0,0-.21Z"/>
- <path class="cls-19"
- d="M67.64,103.22l.62-.28c1.39-.63,2.81-1.3,4.17-1.94a88.63,88.63,0,0,1,10.1-4.29,1.23,1.23,0,0,1-1-.56.66.66,0,0,1,.22-.71,16.8,16.8,0,0,1,5.43-2.24,1.92,1.92,0,0,1-1.38-.72,1.13,1.13,0,0,1,0-1.11l0,0a18.14,18.14,0,0,1,4.29-3l.06,0,.09.15s0,.08,0,.11a1,1,0,0,0,0,.12l0,.34a2,2,0,0,0,0,.24,3.54,3.54,0,0,1-.08.45l-.1.37a6.74,6.74,0,0,1-.29,1,12.26,12.26,0,0,1-3.09,4.72A15.7,15.7,0,0,1,81.7,99l-.69.28-.7.24c-.33.12-.69.21-1,.3l-.39.1c-.69.16-1.36.28-2.07.4l-.95.18-.83.3 [...]
- <path class="cls-20"
- d="M40.06,11.88s.15-.19.38-.43a9,9,0,0,1,.82-.75c-.08,0-.12,0-.13,0a1.43,1.43,0,0,0-.1-.16,1.31,1.31,0,0,0-.4-.32A3.36,3.36,0,0,0,38.72,10l-.47,0a7.66,7.66,0,0,1,1.18,3,6.75,6.75,0,0,1,.33-.66Z"/>
- <path class="cls-9" d="M70.37,46.87a2.7,2.7,0,0,1-.53.46l.21,0,.14,0c.07-.19.14-.38.22-.57Z"/>
- <path class="cls-9" d="M82.08,32.15a1.16,1.16,0,0,1-.06.15l.23.05Z"/>
- <path class="cls-21"
- d="M71.44,47.34a3.37,3.37,0,0,0,1.28-.58,4.89,4.89,0,0,1,.52-.42v-.06a3,3,0,0,1-1,.07c-.43-.05-.7-.15-.7-.2s.3,0,.7,0a2.76,2.76,0,0,0,1.36-.44,7.27,7.27,0,0,0,1.09-1c.27-.31.41-.54.43-.55s.07-.1.18-.27c-.5.07-.93.16-.95.09s.54-.4,1.18-.58h0a3.1,3.1,0,0,0,.15-.46c-.23.06-.36.09-.37.06s.14-.14.41-.28a2.18,2.18,0,0,0,0-.51c0-.12,0-.25,0-.37-.65.16-1.15.31-1.17.23a4,4,0,0,1,1.12-.58c0-.29-.1-.55-.16-.77a1.23,1.23,0,0,0-.17-.42c-.07-.08-.14-.1-.14-.13s.08-.05.22,0a1.1,1. [...]
- <path class="cls-9"
- d="M74,2.39l-.38.2a6.43,6.43,0,0,0-.73.48,3.69,3.69,0,0,0-.72.78,8.45,8.45,0,0,0-.67,1.2,15.41,15.41,0,0,0-.75,2l-.15.49s0,0,0,0l0-.13,0-.25-.06-.49c-.05-.32-.09-.64-.13-.94a5.8,5.8,0,0,0-.21-.89c-.07-.19-.16-.38-.24-.55a6.8,6.8,0,0,0-1-1.53l-.28-.29-.19,0c-1,1.2-2.84,1.58-3.51,2.75q0,1,0,2.28v0l-.29,0v0c0-.07,0-.24-.08-.43a8.67,8.67,0,0,0-2.17-4.3l-.17-.15-.57,0-.9-.08-.14,0a5.47,5.47,0,0,0-1.92,3.28q.13.44.27.9a1.11,1.11,0,0,0,0,.3,2.46,2.46,0,0,0,0,.26c0,.08.07.2 [...]
- <path class="cls-9"
- d="M68.35,2.52c-.37.07-.75.15-1.13.21a2.92,2.92,0,0,1-.44.06l-.45,0h-.76l-.58,0c-.06.59-.12,1.4-.15,2.46C65.51,4.1,67.39,3.72,68.35,2.52Z"/>
- <path class="cls-9"
- d="M60.48,2.57c-.51,0-1.2-.09-2-.11l-1,0c.12.33.24.71.37,1.13.2.66.42,1.41.68,2.28A5.47,5.47,0,0,1,60.48,2.57Z"/>
- <path class="cls-21"
- d="M37.31,34.71a15.68,15.68,0,0,0,3.51-2.93c-1.76,0-3.51,0-4.09-1.17,0-1.16,1.75-1.75,2.33-2.92-4.93-.49-2-4.73-2.31-8.14l-.41-.36a10,10,0,0,1,0,2.16,15.55,15.55,0,0,1-.63,2.93A11.13,11.13,0,0,1,35,26a5.62,5.62,0,0,1-.51.83c-.09.13-.19.27-.3.4l-.16.2-.15.16a.24.24,0,0,0,0,.36.15.15,0,0,0,.09.06L34,28l.45.17,1.38.52.38.15.19.07.09,0,0,0,0,0-.67.45-2,1.39-.42.28-.14.1-.2.15.32.07,1,.27,3.61,1-1.61.89-.76.44-.28.17-.08,0h0s-.06,0-.05.07l.12.07L37.87,36c1.45.9,2.36,1.5, [...]
- <path class="cls-21"
- d="M85.19,10.64a4.89,4.89,0,0,1,.22.59c.12.34.17.59.18.6a6.26,6.26,0,0,1,0,.64,6.33,6.33,0,0,1-.18,1.31,5.29,5.29,0,0,1-.56,1.76,9.48,9.48,0,0,1,.1-1.82,7.64,7.64,0,0,0,0-1.22,4.42,4.42,0,0,0-.1-.54s0-.24-.11-.57-.2-.76-.35-1.19c-.23-.71-.51-1.4-.56-1.64C83.55,8,83.09,7.51,82.68,7a.92.92,0,0,0-.07.13l-.5-.72h.11a4.11,4.11,0,0,1-.48-.93,4.11,4.11,0,0,0,.48.93l.33-.08a11.1,11.1,0,0,0,1.32-.49,5.33,5.33,0,0,1,1.27-.38h0l.28-.12c.25-.11.49-.13.5-.07a3.52,3.52,0,0,1,.09. [...]
- <path class="cls-20"
- d="M83.92,8.46c.07,0,.38.4.7,1,.06-.43.24-1.16.41-1.87a4.49,4.49,0,0,0,.09-1.42l0-.22A1.71,1.71,0,0,0,84,6.05a2.85,2.85,0,0,0-1.1.74,1.91,1.91,0,0,0-.17.22c.41.5.87,1,1.24,1.55A.16.16,0,0,1,83.92,8.46Z"/>
- <path class="cls-11" d="M85.26,6.06v0l-.06,0h0v0Z"/>
- <path class="cls-9"
- d="M85.71,27.38c-.28.29-.62.65-1,1.06s-.49.56-.76.85l-.4.46-.66.76-.28-.09c.29-1,.59-2.12.81-2.93C83.53,27.52,85,27.45,85.71,27.38Z"/>
- <path class="cls-11" d="M84.79,18.53l-.05,0a.79.79,0,0,1,0-.14S84.78,18.47,84.79,18.53Z"/>
- <path class="cls-9"
- d="M84.25,31.42l-.15,0h0l-.28.08-1.11.31-.51.14c.13-.37.29-.94.47-1.56l.28.09,1.2.78Z"/>
- <path class="cls-10" d="M74,22.34l0,.09h0c.09-.3.19-.59.3-.88A4.89,4.89,0,0,0,74,22.34Z"/>
- <path class="cls-4"
- d="M79.22,18.87a6.68,6.68,0,0,0-1.67-.06,3.61,3.61,0,0,0-1.61.73,5.45,5.45,0,0,0-1.25,1.29,4.81,4.81,0,0,0-.42.72c-.11.29-.21.58-.3.88l.32-.2A3.78,3.78,0,0,1,76,21.8,7.14,7.14,0,0,1,79.22,18.87Z"/>
- <path class="cls-10"
- d="M84.15,24.71c0-.16-.07-.39-.11-.7s-.08-.63-.13-1a10.2,10.2,0,0,0-.47-1.21,4.69,4.69,0,0,0-1-1.17,6.62,6.62,0,0,0-1.33-1.08,5.54,5.54,0,0,0-1.91-.65A7.14,7.14,0,0,0,76,21.8a6.12,6.12,0,0,1,.74,0,4.52,4.52,0,0,1,1.65.42,4.19,4.19,0,0,1,1.46,1.21A11.8,11.8,0,0,1,81,25.1a4.53,4.53,0,0,1,.64,2,7.18,7.18,0,0,1-.15,2.11l1.35.11c.23-.59.44-1.28.6-1.85a0,0,0,0,0,0,0,.42.42,0,0,1,0-.06s0,0,0,0a1.8,1.8,0,0,0,0-.19,1.21,1.21,0,0,0,0-.18c0-.1,0-.2.08-.28s0-.07,0-.1a.39.39,0,0 [...]
- <path class="cls-4"
- d="M74.12,32.52a3.86,3.86,0,0,1-1.09,0,.54.54,0,0,1-.17-.07A14.36,14.36,0,0,0,73,34.1a13.5,13.5,0,0,0,1,3.66l.1.22.08.16c0,.07.07.08.12.07l.15,0,.14-.07.41-.26c.53-.35,1.05-.73,1.55-1.09l.52-.38a14.39,14.39,0,0,1-2.43-3.91Z"/>
- <path class="cls-10"
- d="M81.47,29.23c0,.08,0,.18-.08.27l-.09.16a1.25,1.25,0,0,1-.09.12,4.54,4.54,0,0,1-.38.38,6.71,6.71,0,0,1-.84.59,14,14,0,0,1-3.33,1.35,13.35,13.35,0,0,1-2.06.37A14.39,14.39,0,0,0,77,36.38c.8-.59,1.54-1.15,2.19-1.65s1.42-1.12,1.86-1.48c0,0,.21-.28.56-.71s.46-1.5,1-2.71c.06-.15.13-.32.19-.49Z"/>
- <path class="cls-12"
- d="M79.3,23.34a3.92,3.92,0,0,0-1-.83,4.3,4.3,0,0,0-1.53-.45h-.5c1.59.5,3,2.87,2.93,5a5.92,5.92,0,0,1-1.7,4.14,12.06,12.06,0,0,0,2.08-.86C80.62,28.42,80,25.69,79.3,23.34Z"/>
- <path class="cls-9"
- d="M81.16,27.14a6.79,6.79,0,0,0-1.6-3.48,4,4,0,0,0-.26-.32c.73,2.35,1.32,5.08.23,7l.18-.1a5.84,5.84,0,0,0,.77-.53,2.46,2.46,0,0,0,.33-.31l.07-.08s0,0,0-.06a.65.65,0,0,0,.07-.21A7,7,0,0,0,81.16,27.14Z"/>
- <path class="cls-12" d="M73.89,22.72l.1,0a.36.36,0,0,0-.11.1S73.89,22.74,73.89,22.72Z"/>
- <path class="cls-9"
- d="M74,31.89a3.21,3.21,0,0,1-.81-.06.4.4,0,0,0-.29.05c0-.39,0-.77,0-1.13a3.25,3.25,0,0,1,0-.33A2.34,2.34,0,0,0,74,31.89Z"/>
- <path class="cls-9"
- d="M73.71,60.12a2.19,2.19,0,0,0-.38-.63.61.61,0,0,0-.36-.23.21.21,0,0,1,0-.13h0c0,.14,0,.3,0,.48s0,.43,0,.67A1.75,1.75,0,0,0,73.71,60.12Z"/>
- <path class="cls-21"
- d="M72.89,60.28c0,.11,0,.21,0,.33a4.88,4.88,0,0,1-.08.61.86.86,0,0,0,.34-.09,2.23,2.23,0,0,0,.42-.3c.14-.12.28-.25.26-.41a1.71,1.71,0,0,0-.09-.3A1.75,1.75,0,0,1,72.89,60.28Z"/>
- <path class="cls-22"
- d="M70.08,44.3a.28.28,0,0,1,.13,0,1.32,1.32,0,0,1,.57,0,.4.4,0,0,1,.29.21.42.42,0,0,1-.08.38,2,2,0,0,1-.13.18l-.12.12a2,2,0,0,1-.28.23l-.33.2.07,0a1.59,1.59,0,0,0,.76,0,3.33,3.33,0,0,0,.78-.22c.1,0,.17-.09.18-.13a.3.3,0,0,0,0-.09s.06,0,.09.08a.16.16,0,0,1,0,.14.58.58,0,0,0,.44-.13c.12-.07.27-.2.39-.27s.09-.06.14,0v0s0,0,0,0a.83.83,0,0,1,.06-.21.36.36,0,0,0,0-.11s0,0,0-.22c0,0,0,0,0,0h0l-.08,0-.14,0c-.08,0-.13,0-.13,0s0,0,.09-.1a.55.55,0,0,1,.38-.14c.1.09,0,.21,0,.31 [...]
- <path class="cls-14"
- d="M73.59,42.9a1.4,1.4,0,0,0-.32-.28,1.06,1.06,0,0,0-.38-.12,3.17,3.17,0,0,0-.87,0H72l-.11,0-.21.07-.23.08a1.53,1.53,0,0,1-.29,0l-.25-.05h-.06a1.17,1.17,0,0,0-.27.05,3.85,3.85,0,0,0-.58.19,2.5,2.5,0,0,0-.94.59,1.5,1.5,0,0,0-.4.95,1.46,1.46,0,0,0,.1.57.46.46,0,0,0,.35.31,1.69,1.69,0,0,0,1.19-.29,2.2,2.2,0,0,0,.25-.17l.11-.1.07-.06a.2.2,0,0,0,.06-.15c0-.06-.07-.08-.11-.1a1.29,1.29,0,0,0-.41,0,.47.47,0,0,0-.17,0,.81.81,0,0,0,0,.16.81.81,0,0,1,0-.16.35.35,0,0,0-.12.07.8 [...]
- <path class="cls-21"
- d="M73,54a2,2,0,0,1,0,.4c0,.31-.19.81-.25,1.28,0,.21-.06.42-.08.62-.15-.86-.4-1.9-.66-2.93l-.16-.6.11,0a1.84,1.84,0,0,1,.94.61.91.91,0,0,1,.11.44A.79.79,0,0,1,73,54Z"/>
- <path class="cls-21"
- d="M68.24,53.11h-.09A3.49,3.49,0,0,1,67,52.8a3.18,3.18,0,0,1-.58-.35,2.3,2.3,0,0,1-.52-.6,1.84,1.84,0,0,1-.15-.35s0-.07,0-.08l.09,0,.16,0a4.7,4.7,0,0,1,.71-.14l.61-.1.51-.09a2.28,2.28,0,0,0,1.25-.69,1.92,1.92,0,0,0,.18-.29,1.16,1.16,0,0,0,.18-.51v0h0a.27.27,0,0,0-.08-.19c0-.16-.1-.28-.12-.33a6.28,6.28,0,0,1-.66.23,2.79,2.79,0,0,1-1.18,0,1.84,1.84,0,0,1-.47-.15,3.7,3.7,0,0,1-.44-.28,1,1,0,0,1-.19-.14v0a9.28,9.28,0,0,1-2,0,16.2,16.2,0,0,1-3.42-1l-.45.3c-.23.15-.5.36-. [...]
- <path class="cls-9"
- d="M67.12,65.69c.22-.36.44-.76.65-1.19a1,1,0,0,1-.33-.27.63.63,0,0,1-.18-.34c0-.12.1-.13.1-.12s0,0,.12,0a1.55,1.55,0,0,0,.32-.14c.13-.07.28-.15.46-.23A9.51,9.51,0,0,0,68.8,57a5.17,5.17,0,0,1-1.08-.43,5.33,5.33,0,0,1-.56-.32l-.29-.18-.43-.32a9.75,9.75,0,0,1-.74-.64l-.35-.32,0,0v0l0,0-.11-.14c.46.13.94.28,1.29.36s.69.13,1,.17l.28,0a4.65,4.65,0,0,0-.55-.53,4.65,4.65,0,0,1,.55.53l.77.07a3.82,3.82,0,0,0,1.73-.24,2.71,2.71,0,0,0,1-.68l.08-.1c-.06-.17-.12-.34-.19-.52l-.31- [...]
- <path class="cls-21"
- d="M72.25,57a5.47,5.47,0,0,1-2.27.2A5.21,5.21,0,0,1,68.8,57a9.51,9.51,0,0,1-.54,6.37,2.93,2.93,0,0,1,.57-.18,1.15,1.15,0,0,1,.31,0l.33,0a1.78,1.78,0,0,1,.74.06c.16.18,0,.28,0,.29a.88.88,0,0,1-.2.1l-.3.09-.18.06-.11,0a4.68,4.68,0,0,0-.91.55.84.84,0,0,1-.6.22.33.33,0,0,1-.12,0c-.21.43-.43.83-.65,1.19-2.33,2.92-5.26,5.85-9.35,5.26l-.15,0a8.41,8.41,0,0,0,1.82.53,15.88,15.88,0,0,0,2.4.12,16.42,16.42,0,0,0,2.35-.22A5.89,5.89,0,0,0,68,69.45a28.34,28.34,0,0,0,2.4-3.28,15.37 [...]
- <path class="cls-4"
- d="M73,2.19l-.42.4a4.62,4.62,0,0,0-.72,1,13.45,13.45,0,0,0-.62,1.26c-.13.34-.28.75-.43,1.18a2.55,2.55,0,0,0-.08.26s0,.07,0,0V6.22l0-.16,0-.32q0-.3-.06-.57a3,3,0,0,0-.1-.5,5.46,5.46,0,0,0-.21-.61,12.39,12.39,0,0,0-.83-1.76c.3,0,.61-.11.92-.15A8.43,8.43,0,0,1,71.8,2a1.48,1.48,0,0,1,.31,0l.41.05A3.64,3.64,0,0,0,73,2.19Z"/>
- <path class="cls-8"
- d="M72.2,56.83a.66.66,0,0,0,0,.15,4.86,4.86,0,0,0-.63,0A10.19,10.19,0,0,1,70,56.92a5.15,5.15,0,0,1-2.09-.67c-.17-.11-.35-.21-.52-.33l-.24-.17-.08-.07a.77.77,0,0,1-.13-.12l0-.05.08,0,.16,0,.19,0a10.19,10.19,0,0,0,1.08.12,4.36,4.36,0,0,0,2-.22,3.23,3.23,0,0,0,1.07-.67Z"/>
- <path class="cls-21"
- d="M70.86,81.84a.88.88,0,0,1,.41.16,1.21,1.21,0,0,0-.23-.53c-.18.11-.35.27-.52.39A1.22,1.22,0,0,1,70.86,81.84Z"/>
- <path class="cls-9"
- d="M70.22,81.06a7.83,7.83,0,0,0-.86.38,9.05,9.05,0,0,1-1.64.62,5.61,5.61,0,0,1-1.34,0c-.36,0-.64,0-.84,0h-.12l-.32.06H65q.11.44.18.87l.09,0a16.47,16.47,0,0,0,5.1.56,1.33,1.33,0,0,0,.16-.17l.09-.11a.84.84,0,0,0-.26-.35,1.51,1.51,0,0,0-.48-.16c-.15,0-.25-.07-.25-.09s0,0,.06,0a.6.6,0,0,1-.25-.15.6.6,0,0,0,.25.15h.2a1.92,1.92,0,0,1,.33,0,3.09,3.09,0,0,1,.85-.1l.07-.12.08-.15a.69.69,0,0,0-.42-.35,1.72,1.72,0,0,0-.5,0,.38.38,0,0,0-.16,0s-.07,0-.08,0h0l0,0a.27.27,0,0,1,.17 [...]
- <path class="cls-21"
- d="M70.24,82.79a1.08,1.08,0,0,1,.27.07,1.05,1.05,0,0,1,.31.28l0-.08.23-.37A3.09,3.09,0,0,0,70.24,82.79Z"/>
- <path class="cls-21"
- d="M65.29,83.13l1.41.77,2.42,0a2.26,2.26,0,0,0,1.07-.11,1,1,0,0,0,.2-.13A18.56,18.56,0,0,1,65.29,83.13Z"/>
- <path class="cls-11" d="M70.72,83.58h0s0,0,0,0Z"/>
- <path class="cls-8"
- d="M66.33,51.88a1.41,1.41,0,0,0,.36.37,2.64,2.64,0,0,0,1.53.43,3.93,3.93,0,0,0,1.47-.4,4.92,4.92,0,0,0,.67-.41l-.47-1.26a2.94,2.94,0,0,1-1.93.82l-1.08.1-.48,0-.12,0s-.11,0-.07,0A.57.57,0,0,0,66.33,51.88Z"/>
- <path class="cls-11" d="M69.72,47.3h0v0Z"/>
- <path class="cls-9"
- d="M69.72,48.06v.08c0,.1-.13.22-.13.22l-.26.18a1.66,1.66,0,0,1-.79.36,1.32,1.32,0,0,1-1-.09.9.9,0,0,1-.27-.2.34.34,0,0,1,0-.15h0c.25-.08.49-.17.69-.25a8.55,8.55,0,0,0,1.35-.5c0,.06.07.12.1.13l.06,0,0,0h0A.76.76,0,0,1,69.72,48.06Z"/>
- <path class="cls-9"
- d="M69.39,63.42h0l0,0h0l-.09,0a4.78,4.78,0,0,0-.92.64c-.16.12-.31.24-.45.23a.8.8,0,0,1-.38-.23.78.78,0,0,1-.2-.26.15.15,0,0,1,0-.11s0,0,.13,0a1.25,1.25,0,0,0,.36-.09,5.22,5.22,0,0,1,1-.31h.53Z"/>
- <path class="cls-4"
- d="M69,31.47a34.74,34.74,0,0,0-.39-3.57,11,11,0,0,0-1.17-3.44A7.92,7.92,0,0,0,65,21.83l0,0A9.1,9.1,0,0,0,63,20.71c.63.43,1,.95.63,1.72A2.58,2.58,0,0,1,62,23a11.14,11.14,0,0,1,1.27.46,11.65,11.65,0,0,1,1.62.88A5.56,5.56,0,0,1,66,25.61a10.8,10.8,0,0,1,1.14,2.52,16.49,16.49,0,0,1,.59,2.52,3.9,3.9,0,0,1-.18,2s-.16.24-.57.53c-.88,3.64-4.89,6-8.72,6.17.9.39,1.75.75,2.54,1.05A15.08,15.08,0,0,0,63,41a6.93,6.93,0,0,0,1.74.15,5.22,5.22,0,0,0,1.12-.1c.25,0,.37-.11.38-.1a3,3,0, [...]
- <path class="cls-10"
- d="M67,33.13l-.28.19a7.53,7.53,0,0,1-2.83,1,12.77,12.77,0,0,1-4.43-.18,23,23,0,0,1-2.54-.58,9.39,9.39,0,0,1-2.61-1.13h0l-.86-.58c-.15-.1-.29-.22-.43-.32l-.21-.16-.33-.27c0-.14,0-.29,0-.43s0-.19,0-.29.08-.36.13-.54a10,10,0,0,1,.38-1,12.46,12.46,0,0,1,4.25-4.91,6.51,6.51,0,0,1,1.94-1,4.76,4.76,0,0,1,2.12-.1A5.29,5.29,0,0,1,62,23a2.58,2.58,0,0,0,1.66-.55c.38-.77,0-1.29-.63-1.72a7.77,7.77,0,0,0-2.92-.59,29,29,0,0,0-4.62.59,20,20,0,0,0-2,.55c-4.69,2.54-5.84,9.65-2.1,12.8 [...]
- <path class="cls-4"
- d="M53.44,21.26c-.4.14-.76.28-1.06.41-.7.31-1.08.56-1.14.58s-.57.33-1.36.94a24.3,24.3,0,0,0-3,2.81,25.21,25.21,0,0,0-1.74,2.1c-.14.2-.29.4-.43.61l-.11.14v0s0,0,0,.05l0,0,.23.27.52.6A48.11,48.11,0,0,0,50,34.5a24.1,24.1,0,0,0,2.66,2c.22.15.46.29.69.43l.7.38c.48.25,1,.48,1.45.7.95.45,1.87.88,2.75,1.27a35.13,35.13,0,0,1-6.93-5.17C47.6,30.91,48.75,23.8,53.44,21.26Z"/>
- <path class="cls-21"
- d="M67.37,71.75l.07-.16s.16-.27.37-.65.31-.55.48-.87a5.08,5.08,0,0,1-1.66,1.26,9.59,9.59,0,0,1-2.31.74l-.66.11c0,.15,0,.36,0,.61,0,.61.11,1.49.2,2.56,0,.53.09,1.11.14,1.73,0,.27,0,.55.08.84l.08.29,0,.25c0,.17.08.33.11.5l0,.19C64.54,76.14,64.55,72.7,67.37,71.75Z"/>
- <path class="cls-9"
- d="M64.4,79.15c.2,1,.41,2,.62,3h.07v0a.13.13,0,0,0,0-.06c0-.15,0-.37,0-.69,0-.6,0-1.52.08-2.83a25.11,25.11,0,0,1,.33-2.81,1.48,1.48,0,0,0,0-.27c-.18.15-.31.23-.33.16a10.11,10.11,0,0,1,1.16-2c.29-.48.55-1,.74-1.38.1-.23.19-.41.25-.53C64.55,72.7,64.54,76.14,64.4,79.15Z"/>
- <path class="cls-12"
- d="M67.54,31.84s0,.75,0,.76a9.45,9.45,0,0,1-.92.58c-.18.1-.39.2-.62.3a5.74,5.74,0,0,0,1-3.41A13.61,13.61,0,0,1,67.54,31.84Z"/>
- <path class="cls-13"
- d="M67.06,30.07a5.74,5.74,0,0,1-1,3.41c-.23.09-.48.18-.76.26l.14-.11a10.05,10.05,0,0,1-2.5.35H62a5.25,5.25,0,0,1-1.9-4.7c.14-2.6,1.6-4.63,3.4-4.74a6.68,6.68,0,0,1,.78.47,4.12,4.12,0,0,1,.85,1l.12.15.24.45.08.15A21.9,21.9,0,0,1,67.06,30.07Z"/>
- <path class="cls-9"
- d="M66.43,48.23h-.06a9.52,9.52,0,0,1-1.93-.13,15.12,15.12,0,0,1-2.81-.9l1.3-.85a15.58,15.58,0,0,0,1.3,1.21,3.65,3.65,0,0,0,1,.49,4,4,0,0,0,1.07.17Z"/>
- <path class="cls-9"
- d="M64.74,41.44l1.6.64a.3.3,0,0,0-.22.11.83.83,0,0,0-.18.34s.07,0,.15.07l-.16.15s0,0,0,0l0,0-.46.79A15.13,15.13,0,0,0,63.2,44l-.09-.75s0,0,0,0a4.16,4.16,0,0,0-1.24-.48l-.62-.16.38-1.42a9.31,9.31,0,0,0,1.26.28A7.51,7.51,0,0,0,64.74,41.44Z"/>
- <path class="cls-9"
- d="M56.11,99.62a8.93,8.93,0,0,1-1.69,2.72c-.27.33-.5.6-.64.8,0,0,0,0,0,0,1.56.29,3.17.49,4.78.74l.9.14.19,0h.3l.32,0c.6,0,1.21-.08,1.81-.13l1.4-.14c0-.07.08-.17.14-.28s.35-.62.59-1,.52-.93.77-1.47a6.78,6.78,0,0,0,.33-.85,5,5,0,0,0,.17-.92,3.55,3.55,0,0,0-.13-1.79,3.19,3.19,0,0,0-.4-.73A29.32,29.32,0,0,1,56.4,98,7.53,7.53,0,0,1,56.11,99.62Z"/>
- <path class="cls-21"
- d="M63.68,95.52c-.32.07-.64.14-1,.19a18.79,18.79,0,0,1-6.09.11l-1-.17a1.82,1.82,0,0,1,.56.8A3.81,3.81,0,0,1,56.4,98a29.32,29.32,0,0,0,8.53-1.29,5,5,0,0,0-.5-.59A2.52,2.52,0,0,0,63.68,95.52Z"/>
- <path class="cls-13"
- d="M65.4,33.63l-.14.11-.34.1h0a15.44,15.44,0,0,1-2,.14A10.05,10.05,0,0,0,65.4,33.63Z"/>
- <path class="cls-13" d="M65.26,33.74l-.06,0-.28.05Z"/>
- <path class="cls-11" d="M64.81,7.55v0l-.29,0v0Z"/>
- <path class="cls-9"
- d="M64.39,63.38s0,0,0,0a.49.49,0,0,0,0,.11h0l-.28,0a.53.53,0,0,0,.14-.12l.13-.07s0,0,0,0A.21.21,0,0,0,64.39,63.38Z"/>
- <path class="cls-13"
- d="M64.91,33.84a6.6,6.6,0,0,1-.84.16H64a.29.29,0,0,0-.24,0h-.05l-.5,0-.55,0a3.85,3.85,0,0,1-.48,0L62,34h.86A15.44,15.44,0,0,0,64.91,33.84Z"/>
- <path class="cls-4" d="M64.21,2.78c.09.73.19,1.81.26,3.32A13.48,13.48,0,0,0,63,2.73Z"/>
- <path class="cls-13" d="M64.07,34l-.14,0h-.16A.29.29,0,0,1,64,34Z"/>
- <path class="cls-9"
- d="M64,63.47a1,1,0,0,1-.36.2c-.35.12-.73.21-.84.26.07-.09.25-.46.6-.5A3.94,3.94,0,0,1,64,63.47Z"/>
- <path class="cls-9"
- d="M63.11,43.2l.09.75c-.25,0-.49.1-.74.16l-1,.27c-.47-.39-.81-.64-.86-.58a6.65,6.65,0,0,0,.58.66l-.8.25c-.58.19-1,.36-1,.37a8.64,8.64,0,0,0-1,.5l-.41.28c-1.2-.39-2.46-.76-3.71-1.11-.23-.07-.49-.13-.67-.2L53,44.27l-1.32-.59-.15-.07c.7-.19,1.36-.35,1.9-.47.78-.17,1.32-.22,1.35-.23s.56-.1,1.36-.19A20.23,20.23,0,0,1,59,42.65a23,23,0,0,1,2.86.31C62.52,43.08,63,43.2,63.11,43.2Z"/>
- <path class="cls-9"
- d="M58.34,24.17a10.38,10.38,0,0,0-2.21,1.64,10.46,10.46,0,0,0-2.48,3.28,6.91,6.91,0,0,0-.37.95c-.05.16-.09.32-.13.48l0,.24v.09l.28.22.41.32.84.59,0,0a7.78,7.78,0,0,0,2,.94C55.22,30.34,55.79,26.77,58.34,24.17Z"/>
- <path class="cls-12"
- d="M60.14,29.28c.14-2.6,1.6-4.63,3.4-4.74l-.66-.32a4.94,4.94,0,0,0-3.44-.5,5.42,5.42,0,0,0-1.1.45c-2.55,2.6-3.12,6.17-1.72,8.77l.44.15a25,25,0,0,0,2.47.64,15.7,15.7,0,0,0,2.66.35L62,34A5.25,5.25,0,0,1,60.14,29.28Z"/>
- <path class="cls-11" d="M62.78,64s0,0,0,0S62.79,64,62.78,64Z"/>
- <path class="cls-21"
- d="M56.06,86.71a.77.77,0,0,0,.07.17,2.8,2.8,0,0,0,.14.25h0l0,0,.09-.07.18-.16L58,85.67l1.12-.93.39-1.26A10.16,10.16,0,0,1,56.06,86.71Z"/>
- <path class="cls-21"
- d="M56.23,86.1a.61.61,0,0,0-.19.38.36.36,0,0,0,0,.12.52.52,0,0,0,0,.11A10,10,0,0,0,58.24,85a5.44,5.44,0,0,1-1.86.9A1.91,1.91,0,0,0,56.23,86.1Z"/>
- <path class="cls-21"
- d="M54.78,86a1.85,1.85,0,0,0-.16.3s0,0-.06.13a.77.77,0,0,0-.08.29.76.76,0,0,0,0,.15l.19,0,.45.07.91.12L55.93,87a.82.82,0,0,1-.21-.57c0-.07.11-.28.3-.46A4.7,4.7,0,0,1,54.78,86Z"/>
- <path class="cls-21"
- d="M54,86.13v.21l.29.39a1,1,0,0,1,.08-.53.84.84,0,0,1,.1-.15l0,0a4.05,4.05,0,0,1-.5-.12A2.11,2.11,0,0,0,54,86.13Z"/>
- <path class="cls-9"
- d="M61.28,75c0-.91-1.08-1.83-1.83-2.75h-.14a9.7,9.7,0,0,1-2.18-.62c.27.51.62,1.24.93,2s.57,1.42.76,2,.28,1,.29,1a24.51,24.51,0,0,1,.13,3.16,9.25,9.25,0,0,1-.26,3h0a12.54,12.54,0,0,1-1.75,1.15s-1.93.78-2,.62a1,1,0,0,0-.7.18,1.14,1.14,0,0,0-.45.64,3.12,3.12,0,0,0-.1.48v0a4.05,4.05,0,0,0,.5.12,2.28,2.28,0,0,1,.22-.23c.21-.17.48-.24.49-.2s-.19.18-.33.37a.86.86,0,0,0-.07.1A4.7,4.7,0,0,0,56,86c.21-.2.45-.36.49-.25l-.13.16a5.44,5.44,0,0,0,1.86-.9,9.79,9.79,0,0,0,1.23-1.51c [...]
- <path class="cls-21"
- d="M61.86,72.35a15,15,0,0,1-2.41-.06c.75.92,1.83,1.84,1.83,2.75a13.51,13.51,0,0,1-.05,3.76c0-.09.07-.16.1-.25l.21-.5,0-.09s0,0,0,0h0v-.07l0-.26c.22-1.44.43-2.87.58-3.94l.21-1.34C62.24,72.33,62.05,72.35,61.86,72.35Z"/>
- <path class="cls-9"
- d="M61.55,44.91l1,1.08-1.14.62-.53.3-1.12-.44-1.06-.37c.5-.26.87-.41.9-.42s.38-.18.93-.4Z"/>
- <path class="cls-11" d="M60.66,82.93a.19.19,0,0,1,0,.08h0l0,0Z"/>
- <path class="cls-23"
- d="M60.21,47.39l-.67-.22c-.44-.15-.89-.28-1.34-.41.36.47.75.93,1.15,1.39.27-.26.54-.5.77-.69Z"/>
- <path class="cls-9"
- d="M57.85,46.65l-1,.64a20.84,20.84,0,0,1-2.69,1.65l-.33.19a3.46,3.46,0,0,0,.42.57c.08.07.15.16.24.23a2.34,2.34,0,0,0,.38.28,3.84,3.84,0,0,0,.8.43l1.7-.25a8.94,8.94,0,0,1,1.49-1.81c.14-.15.29-.29.44-.43-.4-.46-.79-.92-1.15-1.39Z"/>
- <path class="cls-11" d="M59.23,69.29s.08.12,0,0Z"/>
- <path class="cls-4"
- d="M58.47,6.77c0,.08.11.28,0,.12s-.28-.28-.58-.53l-.15-.13L57.39,6l-.45-.34L56.06,5a13.29,13.29,0,0,0-1.62-1A20.13,20.13,0,0,0,52.38,3a14.93,14.93,0,0,1,3.11-.49c.41,0,.81,0,1.2,0,.19.34.39.77.61,1.28.31.7.73,1.82,1,2.46,0,0,.06.15.12.31Z"/>
- <path class="cls-9"
- d="M53.3,45.45h0c-.07.14-.19.39-.37.74.06.21.11.45.18.75a11,11,0,0,0,.55,1.74,3.84,3.84,0,0,0,.23.45l.33-.19a17.91,17.91,0,0,1,2.42-2l.57-.44c-1-.29-2.09-.55-3.16-.82C53.79,45.59,53.57,45.54,53.3,45.45Z"/>
- <path class="cls-8"
- d="M56.37,55.13l0,0-.55.45a17.59,17.59,0,0,1-2.47,1.68,7,7,0,0,1-2.05.64,9.74,9.74,0,0,1-1.23.12H50q-.06-.6-.09-1.17a14.88,14.88,0,0,1,0-2l.51.21a7.34,7.34,0,0,0,2.14.42,11.87,11.87,0,0,0,1.45,0l.82-.06.63-.07.55-.14Z"/>
- <path class="cls-8"
- d="M51.37,99.16a10.08,10.08,0,0,1-2.88,1.66l-.68.25c.17.1.34.2.52.29a13.43,13.43,0,0,0,3.16,1.31c.51.14,1,.26,1.57.37a12,12,0,0,1,.9-1.1,8.63,8.63,0,0,0,1.71-2.47A7.56,7.56,0,0,0,56,98a28,28,0,0,1-3.62-.3A3.85,3.85,0,0,1,51.37,99.16Z"/>
- <path class="cls-18"
- d="M56,96.53a1.77,1.77,0,0,0-.6-.94c-.32-.08-.62-.16-.9-.25l-1.59-.46-.43-.13a3.81,3.81,0,0,1,.22,1.39,4.18,4.18,0,0,1-.25,1.53h0A28,28,0,0,0,56,98,3.55,3.55,0,0,0,56,96.53Z"/>
- <path class="cls-9"
- d="M53.22,69.16c-.24-.21-.47-.41-.7-.64l-.19-.21a2.77,2.77,0,0,1-.31.53s0,.09,0,.12a.66.66,0,0,0,.24.45.48.48,0,0,0,0,.13l.28.46c.21.34.45.64.4.81s-.57.12-1-.1a4.06,4.06,0,0,1-.57-.35,1.73,1.73,0,0,1-.29-.31l0-.12v0l0,0-.65.61a.05.05,0,0,0,0,0h0l0,.07a2,2,0,0,0-.16.3.75.75,0,0,0,.13.82,3,3,0,0,0,.25.24l.3.23c.18.15.36.29.52.4.32.23.55.35.54.43s-.32.14-.74,0a4.64,4.64,0,0,1-.69-.23l-.38-.17a1.87,1.87,0,0,1-.39-.23,1.7,1.7,0,0,1-.62-.75l-.42.4-.72.68,0,.1a2.72,2.72,0, [...]
- <path class="cls-21"
- d="M54.53,70.2c-.46-.33-.89-.68-1.31-1C53.38,73.65,49.53,77,45.73,80a7.91,7.91,0,0,0,2.12.22,5.43,5.43,0,0,0,.79-.09c.75-1,1.67-1.94,2.56-2.9.71-.76,1.34-1.55,1.94-2.33a24.19,24.19,0,0,0,1.51-2.14,13.28,13.28,0,0,0,.83-1.59c.05-.12.09-.22.13-.3C55.24,70.69,54.88,70.45,54.53,70.2Z"/>
- <path class="cls-8"
- d="M55.33,50.73s.15,0,.05,0l-.29,0-.55.08-.51,0-.6,0a4.77,4.77,0,0,1-1.8-.19,3,3,0,0,1-.72-.4c.08-.22.17-.42.25-.62.41-.88.85-1.72,1.17-2.38l.08-.18s0,0,0,0c.22.44.46,1,.85,1.69a4.45,4.45,0,0,0,.81,1,3.11,3.11,0,0,0,.28.23l.21.16a3.66,3.66,0,0,0,.52.28l.09,0Z"/>
- <path class="cls-9"
- d="M54.48,67.85a1.35,1.35,0,0,1-.2.91l0,0c-.23-.2-.46-.4-.67-.61a.71.71,0,0,0,.27-.33C54,67.86,54.31,67.86,54.48,67.85Z"/>
- <path class="cls-9"
- d="M44.76,93.09l0,0a5.69,5.69,0,0,1-1.68.54,6.4,6.4,0,0,1-1.57,0c-.29,0-.56-.07-.78-.11.21.7.4,1.33.48,1.5a3,3,0,0,1,.16.56l.1.47c.07.31.14.61.2.92L42,98.89l.06.3v.06s0,0,0,0l.08-.1.6-.77.56-.74.4.84.8,1.7c0-.52,0-1,0-1.56.44.39.91.84,1.34,1.17.2.17.44.34.62.47l.35.24.22.15h0l.16,0c.25-.07.6-.18,1-.33a9.58,9.58,0,0,0,2.79-1.45A3.1,3.1,0,0,0,52,97.61c-.61-.1-1.22-.21-1.84-.35A8.67,8.67,0,0,1,44.76,93.09Z"/>
- <path class="cls-21"
- d="M52.37,94.74l-.48-.16a1.22,1.22,0,0,1-.32-.12h0l-.19-.23a2.27,2.27,0,0,1-.79-.37,7.72,7.72,0,0,1-1.46-1.31A18.44,18.44,0,0,1,47.9,91c-.31-.44-.51-.75-.53-.77s-.12-.21-.29-.54c-.07.24-.18.57-.32,1-.07.2-.15.42-.23.66a3.87,3.87,0,0,1-.58.93,3.1,3.1,0,0,1-1.19.84,8.67,8.67,0,0,0,5.41,4.17c.62.14,1.23.25,1.84.35a4.13,4.13,0,0,0,.39-1.48A9.38,9.38,0,0,0,52.37,94.74Z"/>
- <path class="cls-11" d="M51.65,65.2a0,0,0,0,0,0,0h0S51.64,65.21,51.65,65.2Z"/>
- <path class="cls-11" d="M49.92,2.18h0Z"/>
- <path class="cls-21"
- d="M46.46,53l0,0-.11.11-.07.08s0,0,0,.06a1.23,1.23,0,0,0,.06.21,2.61,2.61,0,0,0,.27.52c.25.39.92.85,1.43,1.53a3.19,3.19,0,0,1,.53,1.12,4.3,4.3,0,0,1,.1,1c0,.15,0,.29,0,.41a1.13,1.13,0,0,1,0,.18.19.19,0,0,1,0,.09.09.09,0,0,1,0,.06h0a1.81,1.81,0,0,1,.24.24.47.47,0,0,1,.12.23h0c-.09-.64-.15-1.28-.19-1.91,0-.24,0-.48,0-.7,0-.06,0-.1,0-.16h0L48.63,56l-.16-.19-.29-.39a8.57,8.57,0,0,1-.52-.76l-.12-.2c0-.08-.06-.11-.12-.25a1,1,0,0,1-.06-.68c.06-.2.3-.32.48-.45l.27-.18,1-.65 [...]
- <path class="cls-9"
- d="M48.71,51c-.48.38-1,.79-1.42,1.18l-.6.56-.23.22c1.93.73,2-1.34,3.09-2.46a1.87,1.87,0,0,1,.07-.22C49.35,50.51,49,50.76,48.71,51Z"/>
- <path class="cls-9"
- d="M48.42,59.84a1.18,1.18,0,0,0,.09-1.3l-.22-.16a.85.85,0,0,0-.54-.19,1.52,1.52,0,0,0-.57.18c-.18.09-.35.18-.38.26s0,.14.07.21l.1.08s0,.1-.06.17-.12.11-.15.09a1,1,0,0,1-.13-.14.62.62,0,0,1-.12-.2.41.41,0,0,1,0-.34,1.08,1.08,0,0,1,.54-.38l0,0,.1-.11c0-.07,0-.2-.07-.34s0-.27-.15-.39-.16,0-.22.08l-.18.19-.26.25a1.08,1.08,0,0,0-.21.29c-.06.12-.11.26-.17.4C46.45,59.42,47.11,60.28,48.42,59.84Z"/>
- <path class="cls-21"
- d="M49.09,59.8s0,0,0,0q-.09-.47-.15-.93h0a.35.35,0,0,1,0,.18.35.35,0,0,1-.07.14s.11-.25-.13-.47l-.21-.17a1.18,1.18,0,0,1-.09,1.3c-1.31.44-2-.42-2.46-1.37-.05.13-.1.28-.15.42a4.29,4.29,0,0,0-.13.44.59.59,0,0,0,0,.35,1.07,1.07,0,0,0,.64.48,4.52,4.52,0,0,0,1,.2,7.76,7.76,0,0,0,1.08,0c.33,0,.69-.12.71-.24v0C49.12,60,49.1,59.9,49.09,59.8Z"/>
- <path class="cls-8"
- d="M45.47,80.33a3.52,3.52,0,0,1-1.23-.51,2.69,2.69,0,0,1-.83-.86,3.21,3.21,0,0,1-.34-.72c-.44.57-.89,1.16-1.3,1.79q-.24.36-.45.75a2.85,2.85,0,0,0,.37.66,3.4,3.4,0,0,0,2.05,1.35,4.13,4.13,0,0,0,.69.11A11.59,11.59,0,0,1,46,80.42C45.84,80.39,45.65,80.37,45.47,80.33Z"/>
- <path class="cls-18"
- d="M46.29,82.76c.39-.07.71-.15.91-.2a7.28,7.28,0,0,1,.36-.76,9.44,9.44,0,0,1,1-1.5,5.51,5.51,0,0,1-.69.14,6.71,6.71,0,0,1-1.84,0,11.59,11.59,0,0,0-1.59,2.48A7.15,7.15,0,0,0,46.29,82.76Z"/>
- <path class="cls-8"
- d="M42.63,88.27a4.1,4.1,0,0,1-2.8-.74,2.08,2.08,0,0,1-.41-.35c0,.28,0,.56,0,.83a11.84,11.84,0,0,0,.41,2.9h0l.13.34c.08.19.32,1,.57,1.81a8.75,8.75,0,0,0,1,.17,5.82,5.82,0,0,0,1.46,0,5.93,5.93,0,0,0,1.6-.46l0,0a10.9,10.9,0,0,1-1.24-4.6Z"/>
- <path class="cls-18"
- d="M45.93,91.88a2.74,2.74,0,0,0,.39-.64c.1-.23.18-.45.27-.66.18-.42.32-.75.43-1l-.1-.19a6.53,6.53,0,0,1-.51-2,.28.28,0,0,1,0-.09,3.91,3.91,0,0,1-1,.4,14.78,14.78,0,0,1-2.06.43,10.9,10.9,0,0,0,1.24,4.6A3.46,3.46,0,0,0,45.93,91.88Z"/>
- <path class="cls-9"
- d="M44.3,83.18a4.48,4.48,0,0,1-.63-.06,3.68,3.68,0,0,1-2.33-1.42,2.41,2.41,0,0,1-.28-.43c-.21.4-.4.81-.58,1.24a27.15,27.15,0,0,0-.87,3,5,5,0,0,0-.16,1,3.19,3.19,0,0,0,.64.65,3.89,3.89,0,0,0,2.53.76l.74-.06A11.13,11.13,0,0,1,44.3,83.18Z"/>
- <path class="cls-21"
- d="M46.25,87.35a1.56,1.56,0,0,1,.15-.06,5.07,5.07,0,0,1,.37-2.64v-.3a3.61,3.61,0,0,1,.38-1.69,6.1,6.1,0,0,1-.81.28,6.61,6.61,0,0,1-2,.24,11.13,11.13,0,0,0-.94,4.7c.74-.07,1.45-.18,2-.29C45.74,87.5,46,87.42,46.25,87.35Z"/>
- <rect class="cls-11" x="46.74" y="72.88" width="0.01" height="0.01"/>
- <path class="cls-11" d="M45.82,6.58h0c-.19.17-.37.36-.56.54C45.44,6.94,45.62,6.75,45.82,6.58Z"/>
- <path class="cls-11" d="M41.07,80.26h0l-.13.28.13-.28Z"/>
- <path class="cls-11" d="M40.93,80.57c0,.08-.06.16-.1.25h0Z"/>
- <circle class="cls-9" cx="62.2" cy="27.25" r="0.91"/>
- <circle class="cls-9" cx="62.76" cy="28.68" r="0.18"/>
- <path class="cls-13" d="M73.88,22.78h0Z"/>
- <path class="cls-13"
- d="M77.45,31.24a5.92,5.92,0,0,0,1.7-4.14c.09-2.17-1.34-4.54-2.93-5h0a5.88,5.88,0,0,0-2.18.61h0a.36.36,0,0,0-.11.1h0c-.09.37-.18.75-.24,1.1s-.08.43-.11.64a15.3,15.3,0,0,0,.83,7.33,13.51,13.51,0,0,0,2.15-.35C76.81,31.44,77.12,31.35,77.45,31.24Z"/>
- <path class="cls-13"
- d="M73.53,24.53c-.26,1.61-.34,2.7-.35,2.77s-.16,1.29-.26,3.11h0a2.34,2.34,0,0,0,1,1.47h.11l.29,0A15.3,15.3,0,0,1,73.53,24.53Z"/>
- <path class="cls-9"
- d="M74.29,25.41a.81.81,0,0,0-.36,1.09.8.8,0,0,0,1.09.35.81.81,0,0,0,.36-1.09A.8.8,0,0,0,74.29,25.41Z"/>
- <circle class="cls-9" cx="73.86" cy="27.51" r="0.19"/>
- <g id="_Group_2" data-name="<Group>">
- <path class="cls-4" d="M85.28,6.09,85.39,6l-.11.1Z"/>
- <path class="cls-4"
- d="M86,5.69l-.7.38A.22.22,0,0,0,85.18,6l-.09,0a3.17,3.17,0,0,0-.1-.38s.06,0,.15-.1h.15A.73.73,0,0,1,86,5.69Z"/>
- <path class="cls-4"
- d="M84.76,9.71l-.14-.25h0c.06-.43.24-1.16.42-1.86a4.84,4.84,0,0,0,.08-1.43l0-.22.09,0a.22.22,0,0,1,.08.09l-.07,0h0l.07,0v0l.11-.1-.11.07,0,0,.7-.38a.73.73,0,0,0-.67-.24h-.13l.27-.12c.26-.11.49-.13.5-.07a2.64,2.64,0,0,1,.09.85,4.77,4.77,0,0,1-.32,1.66A11.52,11.52,0,0,1,84.76,9.71Z"/>
- <path class="cls-4" d="M84.62,9.46l.14.25c-.06.09-.1.12-.13.11S84.59,9.67,84.62,9.46Z"/>
- <path class="cls-4"
- d="M84.7,20.43c0-.76,0-1.53,0-1.84h0l.05,0a11.48,11.48,0,0,1,.14,1.91c0,.5,0,1,0,1.39s-.06.65-.06.67a5.15,5.15,0,0,1-.1.65c-.06.38-.18.88-.31,1.37s-.32.95-.46,1.3a3.35,3.35,0,0,1-.26.57,16.82,16.82,0,0,1,.43-1.68c0,.13,0,.19.06.19s0-.22,0-.61a11.2,11.2,0,0,0,.2-1.18c0-.38.07-.64.08-.65s0-.27.07-.65S84.68,20.93,84.7,20.43Z"/>
- <path class="cls-4"
- d="M84.49,10.2a10.26,10.26,0,0,1-.56-1.74,3,3,0,0,1,.69,1h0c0,.21,0,.34,0,.36s.07,0,.13-.11l.16.31a12.08,12.08,0,0,1,.5,1.21c.11.34.16.59.17.6a4,4,0,0,1,0,.64,6.24,6.24,0,0,1-.18,1.31,4.82,4.82,0,0,1-.56,1.76,10.51,10.51,0,0,1,.1-1.82,7.64,7.64,0,0,0,0-1.22,4.42,4.42,0,0,0-.1-.54,4.71,4.71,0,0,0-.11-.57C84.76,11.06,84.63,10.63,84.49,10.2Z"/>
- <path class="cls-4"
- d="M85.09,5.94A1.71,1.71,0,0,0,84,6.05a2.93,2.93,0,0,0-1.1.74,1.14,1.14,0,0,0-.23.35l-.51-.72a2.32,2.32,0,0,0,.44-.09,11.1,11.1,0,0,0,1.32-.49,5.33,5.33,0,0,1,1.27-.38c-.09,0-.15.08-.15.1A3.17,3.17,0,0,1,85.09,5.94Z"/>
- <path class="cls-4" d="M82.94,32.73l.21-.76c.26.27.48.51.51.53Z"/>
- <path class="cls-4"
- d="M84.39,3a3.84,3.84,0,0,1,1.9.21,2.52,2.52,0,0,1,1.27,1.4,5.66,5.66,0,0,1,.34,1.35c.1.76.12,1.22.12,1.26a18.41,18.41,0,0,1-.09,2,23,23,0,0,1-.78,4.08,21.5,21.5,0,0,1-1.48,3.82,8.88,8.88,0,0,1-.88,1.45q0-.09,0-.09s0,0,0,.14h0s-.07.05-.08,0a6.85,6.85,0,0,1,.53-1.75,30.59,30.59,0,0,0,1.06-3.83,26.5,26.5,0,0,0,.47-4c0-1.08,0-1.82,0-1.87s0-.49,0-1.15-.19-1.59-.85-1.92a2.89,2.89,0,0,0-1.36-.23c-.52,0-1.08.08-1.62.14s-1.09.11-1.59.16l-.18,0h-.3l-.45,0,.38.65c.15.25.2 [...]
- <path class="cls-4"
- d="M84.9,43.13s-.31-.05-.75-.15-1-.21-1.63-.3-1.21-.15-1.68-.19l-.8-.06-.79-.1a5.52,5.52,0,0,0-1.61,0,13.75,13.75,0,0,0-1.43.34V42.4a9.31,9.31,0,0,1,1.33-.48,6.1,6.1,0,0,1,.93-.18,7.85,7.85,0,0,1,.83,0l.81,0s.34,0,.81.12,1.08.19,1.68.34a11.12,11.12,0,0,1,1.64.5C84.67,42.91,84.93,43.09,84.9,43.13Z"/>
- <path class="cls-4"
- d="M78.18,41.25c-.42.06-1,.15-1.51.28l-.6.13c0-.13-.07-.26-.11-.38l.59-.2a14.38,14.38,0,0,1,1.52-.42l.73-.16s.32,0,.76,0a10.16,10.16,0,0,1,1.59.09,7.39,7.39,0,0,1,2.19.57A14.82,14.82,0,0,1,81.12,41a9.93,9.93,0,0,0-1.51.06c-.42,0-.69.1-.71.1Z"/>
- <path class="cls-4"
- d="M76.85,43.15l.14,0,.32.08a6.78,6.78,0,0,1,.86.32c.61.25,1.15.62,1.1.7A4.81,4.81,0,0,1,78,44l-.85-.17-.38,0-.38,0a3.22,3.22,0,0,0-.44,0h0a3.49,3.49,0,0,0,.18-.57A2.84,2.84,0,0,1,76.85,43.15Z"/>
- <path class="cls-4"
- d="M85.09,28.75l-.69.91q-.16.24-.36.48a1.94,1.94,0,0,0-.13.2l.16.08.46.27,1.65,1-2.52.84s-.25-.26-.51-.53l-.21.76.72-.23h0c0,.15-.06.27-.08.35v0a2.72,2.72,0,0,0-.09.4l-.1.05s-.12.06-.26.16l-.24.2a4.43,4.43,0,0,0-.71.84c-.51.82-1.18,2-2,3.11a9.16,9.16,0,0,1-1.36,1.48,4.07,4.07,0,0,1-.78.52c-.25.14-.5.26-.72.37a4,4,0,0,1-1.58.54,12.63,12.63,0,0,1,1.39-.88,7.12,7.12,0,0,0,1.32-1,8.35,8.35,0,0,0,1.16-1.48c.71-1.09,1.26-2.25,1.78-3.18A5.54,5.54,0,0,1,82.22,33l.31-.27 [...]
- <path class="cls-4"
- d="M75.67,41.77l.4-.11c0,.14.07.28.1.43a2.91,2.91,0,0,1,0,.31c-.2.09-.38.17-.52.25a2.83,2.83,0,0,0,0-.51C75.69,42,75.68,41.89,75.67,41.77Z"/>
- <path class="cls-4"
- d="M76.07,41.66l-.4.11c0-.12,0-.24-.06-.35l.35-.14C76,41.4,76,41.53,76.07,41.66Z"/>
- <path class="cls-4" d="M76.21,42.71l-.56.16a1.43,1.43,0,0,0,0-.22c.14-.08.32-.16.52-.25Z"/>
- <path class="cls-4"
- d="M76.15,43.19a4.23,4.23,0,0,0-.65.14,2.76,2.76,0,0,0,.15-.46l.56-.16A3.5,3.5,0,0,1,76.15,43.19Z"/>
- <path class="cls-4"
- d="M75.5,43.33a4.23,4.23,0,0,1,.65-.14,3.49,3.49,0,0,1-.18.57h0l-.41,0-.32,0a1.72,1.72,0,0,0,.17-.31S75.47,43.39,75.5,43.33Z"/>
- <path class="cls-4"
- d="M75.28,42.94s.14-.15.41-.29a1.43,1.43,0,0,1,0,.22C75.43,42.93,75.29,43,75.28,42.94Z"/>
- <path class="cls-4"
- d="M75.7,40.59a4.54,4.54,0,0,1,.26.69l-.35.14a5.9,5.9,0,0,0-.16-.76,1.3,1.3,0,0,0-.17-.43c-.07-.08-.14-.1-.14-.13s.09-.05.22,0a1.17,1.17,0,0,1,.33.45h0Z"/>
- <path class="cls-4"
- d="M74.49,42a3.61,3.61,0,0,1,1.12-.59c0,.11,0,.23.06.35A4.1,4.1,0,0,1,74.49,42Z"/>
- <path class="cls-4"
- d="M74.79,42.87s0,.05,0,.07a.19.19,0,0,1,0,.08c0,.06-.07,0-.06,0l0,0h0l0,0a.55.55,0,0,1-.06-.08.64.64,0,0,0,.14,0S74.79,42.85,74.79,42.87Z"/>
- <path class="cls-4"
- d="M74.79,42.94s0,0,0-.07,0,0,0,0a.64.64,0,0,1-.14,0,.55.55,0,0,0,.06.08l0,0h0l0,0s0,.08.06,0A.19.19,0,0,0,74.79,42.94Zm.07-.19c.09,0,0,.49-.14.51s-.25-.29-.12-.4A2.17,2.17,0,0,1,74.86,42.75Z"/>
- <path class="cls-4"
- d="M74.29,43.91c0-.09.54-.4,1.18-.58h0c0,.06-.06.13-.09.18a1.72,1.72,0,0,1-.17.31C74.74,43.89,74.31,44,74.29,43.91Z"/>
- <path class="cls-4"
- d="M78.44,3.79c-.65-.24-1.42-.58-2.27-.86A14.81,14.81,0,0,0,74,2.38a3,3,0,0,1,.91-.32L74.49,1l0-.06a13.47,13.47,0,0,1,2.14.88A22.21,22.21,0,0,1,78.8,3.07c.45.29.81.55,1.06.74l-.47.09.27.3C79.36,4.12,78.94,4,78.44,3.79Z"/>
- <path class="cls-4"
- d="M74.72,43.26c.12,0,.23-.53.14-.51a2.17,2.17,0,0,0-.26.11s.05-.07.21-.13.08-.06.11,0a.2.2,0,0,1,.06.11.79.79,0,0,1-.06.38c-.06.14-.14.22-.27.2a.32.32,0,0,1-.22-.23.37.37,0,0,1,0-.38s.09,0,.15.08C74.47,43,74.6,43.29,74.72,43.26Z"/>
- <path class="cls-4"
- d="M77.45,31.24a3.28,3.28,0,0,1-1.76.88A2.6,2.6,0,0,1,74,31.89h.09a15.51,15.51,0,0,0,2.44-.38A9.68,9.68,0,0,0,77.45,31.24Z"/>
- <path class="cls-4" d="M74.07,41.57s-.07,0,0,0l0,0s0-.07-.11-.13.1,0,.17,0,.06.05,0,.09Z"/>
- <path class="cls-4"
- d="M74.69,22.21a1.86,1.86,0,0,1,1.52-.15,6.14,6.14,0,0,0-2.18.61l0,0A4.29,4.29,0,0,1,74.69,22.21Z"/>
- <path class="cls-4"
- d="M74,41.73c-.24.05-.27-.07,0-.34.06.06.11.11.11.13l0,0s0,.05,0,0l.08-.07s0-.11,0-.09-.16,0-.17,0l.23-.06C74.42,41.26,74.2,41.68,74,41.73Z"/>
- <path class="cls-4"
- d="M73.26,23.08a3.33,3.33,0,0,1,.72-.65l-.09.3C73.47,22.93,73.29,23.08,73.26,23.08Z"/>
- <path class="cls-4"
- d="M73.77,41.85a.19.19,0,0,1-.14-.24.7.7,0,0,1,.13-.24l.06-.08s.08,0,.14.1c-.27.27-.24.39,0,.34s.46-.47.23-.4l-.23.06s.09-.07.26-.12a.11.11,0,0,1,.12,0,.18.18,0,0,1,0,.13.48.48,0,0,1-.21.34A.43.43,0,0,1,73.77,41.85Z"/>
- <path class="cls-4"
- d="M74.92,2.06a3,3,0,0,0-.91.32l-.69-.13L73,2.2,73.22,2a10.26,10.26,0,0,1,1.27-1Z"/>
- <path class="cls-4"
- d="M72.92,30.41a11.14,11.14,0,0,1-.24-3.6c.1-2.25.34-3.27,1.2-4q-.13.57-.24,1.11c-.35,2-.44,3.33-.46,3.41S73,28.59,72.92,30.41Z"/>
- <path class="cls-4"
- d="M75.69,32.12a3.28,3.28,0,0,0,1.76-.88,11.5,11.5,0,0,0,2.27-1,6.48,6.48,0,0,0,.76-.53,3.39,3.39,0,0,0,.34-.31l.07-.08a.2.2,0,0,0,0-.06.65.65,0,0,0,.07-.21,6.92,6.92,0,0,0,.18-1.94,6.71,6.71,0,0,0-1.6-3.49,3.85,3.85,0,0,0-1.31-1.15,4,4,0,0,0-1.53-.44,2.77,2.77,0,0,0-.5,0h0a1.86,1.86,0,0,0-1.52.15,4.29,4.29,0,0,0-.7.48h0l-.1,0,.09-.3a2,2,0,0,1,.31-.19,4.42,4.42,0,0,1,2.46-.43,4.52,4.52,0,0,1,1.64.42,4.31,4.31,0,0,1,1.47,1.21A12.67,12.67,0,0,1,81,25.1a4.57,4.57,0 [...]
- <path class="cls-4"
- d="M72.77,61.29a.2.2,0,0,0,0-.07.72.72,0,0,0,.34-.09,2,2,0,0,0,.42-.29c.14-.13.28-.26.26-.42a2,2,0,0,0-.47-.93.68.68,0,0,0-.35-.23s0-.06,0-.13v0c0-.09,0-.16.09-.15a.51.51,0,0,1,.18.07,1.05,1.05,0,0,1,.34.28,2.35,2.35,0,0,1,.29.49,1.59,1.59,0,0,1,.18.64.5.5,0,0,1-.14.35.93.93,0,0,1-.24.21,1.78,1.78,0,0,1-.48.27A1,1,0,0,1,72.77,61.29Z"/>
- <path class="cls-4"
- d="M76,43.77a4.27,4.27,0,0,1-.38.7,4.1,4.1,0,0,1-.52.59,7,7,0,0,1-1.28,1,2.41,2.41,0,0,1-.56.22h0a3,3,0,0,1-1,.06c-.43-.05-.69-.15-.69-.2s.29,0,.7,0a2.85,2.85,0,0,0,1.35-.43,7.85,7.85,0,0,0,1.09-1,5.12,5.12,0,0,0,.43-.55s.07-.1.18-.27l.32,0Z"/>
- <path class="cls-4" d="M72.77,61.29c-.09,0-.13,0-.13-.06h.14A.2.2,0,0,1,72.77,61.29Z"/>
- <path class="cls-4"
- d="M72.71,57.59c-.09,0-.11-.59,0-1.31,0,.14,0,.28.07.42s.05.39.08.56S72.74,57.59,72.71,57.59Z"/>
- <path class="cls-4"
- d="M84.24,24c0,.12,0,.22,0,.3s0,.11,0,.17l-.06.25c0-.15-.07-.39-.11-.7s-.08-.63-.13-1a10.2,10.2,0,0,0-.47-1.21,4.69,4.69,0,0,0-1-1.17,6.62,6.62,0,0,0-1.33-1.08,6.21,6.21,0,0,0-3.58-.71,3.57,3.57,0,0,0-1.61.74,5.42,5.42,0,0,0-1.25,1.28A4.48,4.48,0,0,0,74,22.34a.29.29,0,0,0,0,.09,3.33,3.33,0,0,0-.72.65s.21-.15.63-.35a.43.43,0,0,0,0,.05c-.86.76-1.1,1.78-1.2,4a11.14,11.14,0,0,0,.24,3.6h0c0,.1,0,.22,0,.33,0,.36,0,.74,0,1.13a.3.3,0,0,0-.15.18.31.31,0,0,0,.15.35A14.36, [...]
- <path class="cls-4"
- d="M72.09,52.35a2.24,2.24,0,0,1,1.3.71,1.19,1.19,0,0,1,.23.5c0,.14,0,.22,0,.23a2.94,2.94,0,0,1-.08.7c-.1.39-.26.81-.38,1.27s-.29,1.15-.38,1.5c0-.17,0-.36-.08-.56s0-.28-.07-.42,0-.41.07-.62c.07-.47.2-1,.25-1.28a2,2,0,0,0,0-.4.79.79,0,0,0,0-.14.91.91,0,0,0-.11-.44,1.86,1.86,0,0,0-.94-.61l-.11,0c0-.18-.09-.36-.14-.53C71.82,52.27,72,52.31,72.09,52.35Z"/>
- <path class="cls-4"
- d="M72.5,45.47a.71.71,0,0,1-.55.18.47.47,0,0,1-.24-.08.33.33,0,0,0,.1-.06.63.63,0,0,0,.12-.11h0a.57.57,0,0,0,.43-.13c.13-.07.27-.2.39-.27s.09-.06.15,0h0A0,0,0,0,1,73,45h0s0,0,0,0S72.71,45.26,72.5,45.47Z"/>
- <path class="cls-4"
- d="M71.81,45.51a.33.33,0,0,1-.1.06h0s0,0,0-.05.06,0,.06,0h0a.2.2,0,0,1,.1-.07h.05A.63.63,0,0,1,71.81,45.51Z"/>
- <path class="cls-4"
- d="M71.82,53.86a.27.27,0,0,1,.16.38,3.1,3.1,0,0,1-.37.46l-.14.14c-.08-.22-.16-.45-.25-.68a3,3,0,0,0,.21-.27C71.49,53.8,71.65,53.79,71.82,53.86Z"/>
- <path class="cls-4"
- d="M72,53.35c.26,1,.51,2.07.67,2.93-.07.72,0,1.31,0,1.31s.06-.12.11-.33c.07.61.05,1,0,1s-.26-.5-.55-1.27h0s0-.1,0-.15l-.73-2,.14-.14a3.1,3.1,0,0,0,.37-.46.27.27,0,0,0-.16-.38c-.17-.07-.33-.06-.39,0a3,3,0,0,1-.21.27L71,53.65c-.11-.28-.22-.57-.32-.85l.12,0,.32-.08L70.81,52a3.57,3.57,0,0,0,1,.72Z"/>
- <path class="cls-4"
- d="M70.71,52.8c-.11-.31-.23-.63-.35-.93a.13.13,0,0,0,.06,0l.13-.1a2,2,0,0,0,.25.29h0l.35.66-.32.08-.12,0Z"/>
- <path class="cls-4"
- d="M71.7,52.22c0,.17.1.35.14.53a3.57,3.57,0,0,1-1-.72h0l-.19-.36-.06.07c-.08-.11-.11-.19-.09-.21S71,51.94,71.7,52.22Z"/>
- <path class="cls-4"
- d="M69.85,4.31a6.58,6.58,0,0,0-1-1.54,4,4,0,0,0-.28-.29l.87-.17a12.66,12.66,0,0,1,.84,1.75c.07.19.14.4.2.61a4.48,4.48,0,0,1,.11.5c0,.18,0,.38,0,.57l0,.32,0,.16V6.3s0,0,0,0,0-.14.08-.26c.15-.43.3-.83.43-1.17a12.54,12.54,0,0,1,.62-1.27,5,5,0,0,1,.72-1c.15-.14.29-.28.42-.39l.36,0,.69.13a4,4,0,0,0-.41.21,7,7,0,0,0-.74.48,3.42,3.42,0,0,0-.71.78,8,8,0,0,0-.68,1.2,16.59,16.59,0,0,0-.75,2l-.15.49s0,0,0,0V7.42l0-.25-.06-.49c-.05-.32-.09-.64-.13-.94a4.54,4.54,0,0,0-.21-.8 [...]
- <path class="cls-4"
- d="M69.89,50.61l-.42-1.11,1.06.18a1.27,1.27,0,0,1-.18.36A2.48,2.48,0,0,1,69.89,50.61Z"/>
- <path class="cls-4"
- d="M72,45.26a.18.18,0,0,1,0,.14h-.06a.2.2,0,0,0-.1.07h0s0,0,0-.05,0,.05,0,.05,0,0-.06,0,0,0,0,.05h0a3.42,3.42,0,0,1-.69.28,1.86,1.86,0,0,1-.9.06.66.66,0,0,1-.31-.19,2.41,2.41,0,0,0,.33-.15s0,0,.07,0a1.59,1.59,0,0,0,.76,0,3.33,3.33,0,0,0,.78-.22c.1,0,.17-.09.18-.13a.3.3,0,0,0,0-.09S72,45.17,72,45.26Z"/>
- <path class="cls-4"
- d="M73.26,46.34s-.08.28-.37.61a2.91,2.91,0,0,1-1.33.84,4.65,4.65,0,0,1-1,.18v0a.33.33,0,0,0-.32-.31l-.49.2v-.4l.12-.09.21,0a4.11,4.11,0,0,0,1.39,0,3.16,3.16,0,0,0,1.28-.58c.26-.19.42-.37.5-.41h0Z"/>
- <path class="cls-4"
- d="M69.71,45.62s0-.07.11-.13.14-.08.16-.06a.32.32,0,0,0,.15.14,2.41,2.41,0,0,1-.33.15A.44.44,0,0,1,69.71,45.62Z"/>
- <path class="cls-4" d="M69.72,47.42v-.09h0s0,0,0,0h0l.08,0h0Z"/>
- <path class="cls-4" d="M69.68,47.85l0,0v0h0Z"/>
- <path class="cls-4"
- d="M69.64,47.71a.29.29,0,0,1,0-.11s0-.05,0-.05,0,0,0,0a0,0,0,0,0,0,0l.09-.06v.4l0,0h0A.35.35,0,0,0,69.64,47.71Z"/>
- <path class="cls-4" d="M69.72,47.42l-.09.06a.47.47,0,0,0,.07-.12s0,0,0,0Z"/>
- <path class="cls-4"
- d="M69.39,49.29,69.26,49a6.28,6.28,0,0,0,1.06-.56.45.45,0,0,0,.19-.24c.1.36.35,1.17.56,1.86s.41,1.39.63,2.2c-.69-.28-1.19-.74-1.24-.7s0,.1.09.21l-.13.1a.13.13,0,0,1-.06,0c-.17-.45-.32-.88-.47-1.26a2.48,2.48,0,0,0,.46-.57,1.27,1.27,0,0,0,.18-.36l-1.06-.18h0A.32.32,0,0,0,69.39,49.29Z"/>
- <path class="cls-4"
- d="M69.53,47.9h.07l.07,0h.06v0l.49-.2a.33.33,0,0,1,.32.31v0h-.09c0-.06,0,0-.1,0s-.25,0-.36,0l-.31,0Z"/>
- <path class="cls-4"
- d="M69.5,60.72a.27.27,0,0,1,0-.23c0-.12.09-.17.11-.16s0,.08,0,.17.08.11.16.1a.56.56,0,0,0,.24-.17l.11-.12s0,0,.06,0,0,0,0,0l-.25-.1A2.64,2.64,0,0,1,69.6,60s.14-.07.3-.05l.27,0,.45.13a2.71,2.71,0,0,1-.29.4,1,1,0,0,1-.57.29A.36.36,0,0,1,69.5,60.72Z"/>
- <path class="cls-4"
- d="M69.25,48.92c-.06-.16.19-.4.56-.53a1.8,1.8,0,0,0,.54-.41h.1s0,.07.06.18a.45.45,0,0,1-.19.24,6.28,6.28,0,0,1-1.06.56A.08.08,0,0,1,69.25,48.92Z"/>
- <path class="cls-4"
- d="M69.37,47.83a.38.38,0,0,1-.1-.13c.12-.07.19-.11.19-.13l.17-.09a0,0,0,0,1,0,0s0,0,0,0,0,0,0,.05a.29.29,0,0,0,0,.11.35.35,0,0,1,0,.13h0l-.07,0h-.12l0,0Z"/>
- <path class="cls-4"
- d="M69.23,47.6v-.06a.31.31,0,0,1,.13-.25l.09-.06h0l.09,0h.15v.14h0s0,0,0,0a.47.47,0,0,1-.07.12l-.17.09A.66.66,0,0,0,69.23,47.6Z"/>
- <path class="cls-4"
- d="M68.24,1a1.3,1.3,0,0,1,.46.3,4.37,4.37,0,0,1,.69,1l0,0-.87.17a1.94,1.94,0,0,0-.46-.33c-.06,0-.1,0-.11,0s0-.07,0-.09A.28.28,0,0,0,68,2Z"/>
- <path class="cls-4"
- d="M69.8,45.72a1.71,1.71,0,0,1-.82.09,1,1,0,0,1-.72-.56,2,2,0,0,1-.19-.79,2.09,2.09,0,0,1,.49-1.33,2.62,2.62,0,0,1,.79-.63l.36-.18a6.43,6.43,0,0,1,.69-.2l.37,0a.8.8,0,0,1,.29,0l.13,0h.11l.17,0,.2-.06.11,0a.53.53,0,0,1,.16,0,3.67,3.67,0,0,1,1,0,1.51,1.51,0,0,1,.55.22,2,2,0,0,1,.42.4,1.29,1.29,0,0,1,.24.56.71.71,0,0,1-.23.61c-.32.22-.44.26-.53.74a.66.66,0,0,1-.24.31l-.16.08-.08,0h0s0,0,0,0,0-.13.06-.2a.25.25,0,0,0,0-.12s0,0,0-.22c0,0,0,0,0,0h0l-.09,0-.14,0c-.08,0- [...]
- <path class="cls-4"
- d="M69.75,68.12c-.39.57-.83,1.15-1.29,1.72l-.16.22.29-.52c.55-1,1.09-2.06,1.22-2S69.84,67.78,69.75,68.12Z"/>
- <path class="cls-4"
- d="M69.39,2.28a4.37,4.37,0,0,0-.69-1,1.3,1.3,0,0,0-.46-.3L68.16.37c.63-.07,1.3-.14,2-.18A11.5,11.5,0,0,1,72,.24l.5.1.4.11.79.21.84.25,0,.06a10.26,10.26,0,0,0-1.27,1L73,2.2l-.44-.07-.4-.06a1.66,1.66,0,0,0-.32,0,9.62,9.62,0,0,0-1.47.11l-.92.16Z"/>
- <path class="cls-4"
- d="M68.82,68a.29.29,0,0,1-.22.13c-.06,0-.08,0-.08,0s.12,0,.17-.17,0-.15.07-.25a1.26,1.26,0,0,0,0-.22s0,0,0,0-.07,0-.07,0l-.2.06c-.11,0-.27.1-.41.17a3.36,3.36,0,0,1-.62.26s.22-.27.5-.46a3.56,3.56,0,0,1,.62-.34,1,1,0,0,1,.2,0c.15,0,.36,0,.3.26a2.46,2.46,0,0,1-.12.36C68.92,67.85,68.88,67.94,68.82,68Z"/>
- <path class="cls-4"
- d="M68.36,64.15a4.44,4.44,0,0,1,.92-.65l.09,0h0l0,0h-.28a1.32,1.32,0,0,0-.28,0,4.71,4.71,0,0,0-1,.3,1.18,1.18,0,0,1-.36.09c-.09,0-.14,0-.13,0s0,0,.13,0a1.25,1.25,0,0,0,.31-.14,4,4,0,0,1,1-.41,1.15,1.15,0,0,1,.31,0h.33a1.65,1.65,0,0,1,.74.05.19.19,0,0,1,0,.3l-.2.09-.3.09-.17.06-.12,0a5.36,5.36,0,0,0-.91.55.64.64,0,0,1-1-.1.63.63,0,0,1-.18-.34c0-.12.1-.13.1-.12a.15.15,0,0,0,0,.11.7.7,0,0,0,.2.26.8.8,0,0,0,.38.23A.82.82,0,0,0,68.36,64.15Z"/>
- <path class="cls-4"
- d="M69.26,47.68a4.48,4.48,0,0,1-.78.28,8,8,0,0,1-2,.27A6.46,6.46,0,0,0,67.83,48a12.74,12.74,0,0,1,1.4-.35.11.11,0,0,0,0,.07Z"/>
- <path class="cls-4"
- d="M66.51,48.79a1.56,1.56,0,0,1-.19-.14v0h.09a6.24,6.24,0,0,0,.82-.17h0a.26.26,0,0,0,0,.15.73.73,0,0,0,.26.2,1.32,1.32,0,0,0,1,.09,1.53,1.53,0,0,0,.79-.36,2.4,2.4,0,0,0,.26-.18s.13-.12.13-.22v-.08a1.59,1.59,0,0,0-.19-.16l.15,0L70,48c.11,0,.23,0,.36,0a1.8,1.8,0,0,1-.54.41c-.37.13-.62.37-.56.53a.08.08,0,0,0,0,0,6.28,6.28,0,0,1-.66.23,2.65,2.65,0,0,1-1.18,0,2.6,2.6,0,0,1-.47-.16A3.7,3.7,0,0,1,66.51,48.79Z"/>
- <path class="cls-4"
- d="M66.32,48.63c0-.06-.22-.15-.22-.2a2,2,0,0,1,.59,0,5.19,5.19,0,0,1,.48-.24l.29.1H67.4l-.09,0a.2.2,0,0,0-.08.08,6.24,6.24,0,0,1-.82.17Z"/>
- <path class="cls-4"
- d="M66.26,42.61s-.08,0-.16,0,.11-.54.38-.34.4.48.11.48l-.68,0s0,0,0,0a1.43,1.43,0,0,1,.28,0l.3,0a.23.23,0,0,0,.1,0s0,0,0-.06a2.23,2.23,0,0,0-.2-.18c-.08,0,0,0-.07,0A.61.61,0,0,0,66.26,42.61Z"/>
- <path class="cls-4"
- d="M66.1,42.6c.08,0,.16,0,.16,0a.61.61,0,0,1,.09-.22s0,0,.07,0a2.23,2.23,0,0,1,.2.18s0,0,0,.06a.23.23,0,0,1-.1,0l-.3,0a1.43,1.43,0,0,0-.28,0Z"/>
- <path class="cls-4"
- d="M65.93,51.85a2.07,2.07,0,0,1-.15-.34s0-.07,0-.09l.09,0,.16,0a4.87,4.87,0,0,1,.72-.13l.6-.11.51-.09a2.22,2.22,0,0,0,1.25-.69,2.55,2.55,0,0,0,.18-.28,1.42,1.42,0,0,0,.19-.52v0h0l.42,1.11a3.23,3.23,0,0,1-.27.23,3.36,3.36,0,0,1-1.66.6l-1.08.1-.47,0-.13,0s-.11,0-.07,0a1.34,1.34,0,0,0,.12.24,1.54,1.54,0,0,0,.36.36,2.64,2.64,0,0,0,1.53.43,3.75,3.75,0,0,0,1.47-.4,3.19,3.19,0,0,0,.67-.41c.12.3.24.62.35.93-.21.06-.48.12-.84.19a6.2,6.2,0,0,1-1.72.12A3.44,3.44,0,0,1,67,5 [...]
- <path class="cls-4"
- d="M65.93,42.79l0,0,.68,0c.29,0,.15-.28-.11-.48s-.38.34-.38.34-.16-.05-.16-.07a.9.9,0,0,1,.18-.34.3.3,0,0,1,.23-.11h0a.41.41,0,0,1,.24.1,1,1,0,0,1,.26.37.22.22,0,0,1-.09.25.43.43,0,0,1-.23,0l-.32,0Z"/>
- <path class="cls-4"
- d="M65.79,45.53a1.65,1.65,0,0,1,.26-.36s0-.08-.08-.14a1.14,1.14,0,0,1,.38.22.47.47,0,0,1,.15.36.43.43,0,0,1-.33.27c-.16,0-.35,0-.39,0A.27.27,0,0,1,65.79,45.53Z"/>
- <path class="cls-4"
- d="M65.79,45.53a.27.27,0,0,0,0,.32c0,.07.23.08.39,0a.43.43,0,0,0,.33-.27.47.47,0,0,0-.15-.36A1.14,1.14,0,0,0,66,45c.06.06.1.12.08.14A1.65,1.65,0,0,0,65.79,45.53Zm-.11.4c-.24-.26,0-.64.27-.91a.74.74,0,0,1,.63.46C66.73,45.91,65.92,46.2,65.68,45.93Z"/>
- <path class="cls-4"
- d="M65.57,46a.58.58,0,0,1-.07-.61,1.86,1.86,0,0,1,.3-.45s.09,0,.15.06c-.22.27-.51.65-.27.91s1,0,.9-.45A.74.74,0,0,0,66,45a.6.6,0,0,1,.48.13.61.61,0,0,1,.26.49.64.64,0,0,1-.44.46A.62.62,0,0,1,65.57,46Z"/>
- <path class="cls-4"
- d="M65.42,75.37l.63-.61s0,0,.1.17l-.32.32-.28.25v-.07c0-.05,0,0,0-.05S65.42,75.36,65.42,75.37Z"/>
- <path class="cls-4" d="M65.85,33.64a3.88,3.88,0,0,1-.65.15l.06,0,.76-.27Z"/>
- <path class="cls-4"
- d="M65.22,75.66a10.11,10.11,0,0,1,1.16-2c.29-.48.55-1,.74-1.38l.32-.69s.16-.27.37-.65.31-.55.48-.87h0l.16-.22c.46-.57.9-1.15,1.29-1.72a15.52,15.52,0,0,1-.53,1.7c-.2.55-.42,1.1-.59,1.52l-.31.71s-.16.29-.41.67a11.85,11.85,0,0,1-1,1.35c-.27.32-.54.61-.79.86-.07-.13-.1-.16-.1-.17l-.63.61s.06,0,.08,0,0,0,0,.05v.07C65.37,75.65,65.24,75.73,65.22,75.66Z"/>
- <path class="cls-4"
- d="M65.15,54.56c.47.13.94.28,1.29.36s.7.13,1,.17l1,.09a3.82,3.82,0,0,0,1.73-.24,2.6,2.6,0,0,0,1-.68.58.58,0,0,0,.08-.1c.09.23.17.46.25.68a3.23,3.23,0,0,1-1.07.67,4.34,4.34,0,0,1-2,.22,10.49,10.49,0,0,1-1.08-.12l-.19,0-.16,0-.08,0,0,.05.13.13.08.06.24.17c.17.12.35.22.52.33a5.17,5.17,0,0,0,2.1.68,11.22,11.22,0,0,0,1.62.08,4.73,4.73,0,0,1,.62,0h0a5.76,5.76,0,0,1-2.27.19,5.19,5.19,0,0,1-2.25-.6,6.32,6.32,0,0,1-.56-.33l-.3-.18c-.14-.11-.29-.21-.42-.32a8.09,8.09,0,0,1 [...]
- <path class="cls-4"
- d="M65.1,82.1c0-.15,0-.37,0-.69,0-.6,0-1.52.08-2.83a25.11,25.11,0,0,1,.33-2.81,1.48,1.48,0,0,0,0-.27l.28-.25.32-.32a.73.73,0,0,1,0,.12.8.8,0,0,1,0,.44,2.9,2.9,0,0,1-.16.41,7,7,0,0,0-.65,2.7,9.38,9.38,0,0,0,.25,2.79,2.5,2.5,0,0,0,.2.57c-.39.06-.59.13-.61.09s0,0,.06,0a.25.25,0,0,0,.13,0h0l-.32.06h0V82.1Z"/>
- <path class="cls-4"
- d="M65,2.81c.09-.9.17-1.29.17-1.29l.1-1.1.43,0,.65.05a2.59,2.59,0,0,0,.28,0h.31L68.16.37l.08.64L68,2A.28.28,0,0,1,68,2s0,.07,0,.09,0,0,.11,0a1.94,1.94,0,0,1,.46.33c-.43.08-.87.18-1.32.25a3,3,0,0,1-.43.06l-.46,0h-.76Z"/>
- <path class="cls-4"
- d="M65,34a2.23,2.23,0,0,1-.89,0,6.6,6.6,0,0,0,.84-.16h0l.27-.05A1.88,1.88,0,0,1,65,34Z"/>
- <path class="cls-4" d="M64.36,42.92a.25.25,0,0,1,0,.09.08.08,0,0,1,0,0l-.08.05v0l.17-.18Z"/>
- <path class="cls-4"
- d="M64.47,6.11c-.07-1.52-.17-2.6-.26-3.32h0l.74,0c-.09,1-.19,2.51-.18,4.74,0,0,0-.24-.09-.46S64.56,6.42,64.47,6.11Z"/>
- <path class="cls-4"
- d="M64.19,43.08c0-.19-.09-.36-.15-.55a.29.29,0,0,1,.28.48.25.25,0,0,0,0-.09v0Z"/>
- <path class="cls-4" d="M64.28,43.05a.2.2,0,0,1-.15.07l.07,0Z"/>
- <path class="cls-4" d="M64.19,43.08v0h0Z"/>
- <path class="cls-4" d="M64.21,2.79A11.32,11.32,0,0,0,64,1.53h1.17s-.08.39-.17,1.29l-.74,0Z"/>
- <path class="cls-4"
- d="M63.8,42.74l0-.06a.31.31,0,0,1,.15-.12l.05,0h0c.06.19.1.36.15.55l0,0h0l-.07,0h0a.28.28,0,0,1-.33-.35Z"/>
- <path class="cls-4" d="M64,42.56a.31.31,0,0,0-.15.12.25.25,0,0,1,.18-.14h0Z"/>
- <path class="cls-4" d="M64.28,46.85a.3.3,0,0,1-.44-.37Z"/>
- <path class="cls-4" d="M63.92,46.38a.3.3,0,0,1,.42.42l0,0,0,0-.44-.37a.19.19,0,0,1,.06-.07Z"/>
- <path class="cls-4"
- d="M63.54,24.54h.29l.29.18a5.29,5.29,0,0,1,1.67,2.12l.39.8c.34.73.43,1,.86,2.07,0,.05,0,.11,0,.15v.21a22.94,22.94,0,0,0-1.45-3.34l-.09-.15-.24-.45L65.17,26a4.33,4.33,0,0,0-.85-1A6.68,6.68,0,0,0,63.54,24.54Z"/>
- <path class="cls-4" d="M64.13,43.12c-.26.1-.4-.17-.33-.38v0A.28.28,0,0,0,64.13,43.12Z"/>
- <path class="cls-4"
- d="M70.72,83.58h0Zm-8-10.71c0-.22,0-.42-.05-.57.32,0,.65-.06,1-.12,0,.16,0,.36,0,.61,0,.62.12,1.49.2,2.56,0,.53.09,1.11.14,1.73l.09.84c0,.14.05.21.07.3l0,.24c0,.17.08.34.11.5.22,1,.44,2.16.67,3.24h0l.18.87,1.49.82,2.42,0a2.26,2.26,0,0,0,1.07-.11,1,1,0,0,0,.36-.3l.09-.11a0,0,0,0,0,0,0,.28.28,0,0,1,0,.11h0l.27.19c.09-.1,0-.36-.13-.59a.35.35,0,0,1,.05-.08l.29-.49.09-.15,0,.08.3-.14a1.31,1.31,0,0,0-.17-.23L71.27,82a1.18,1.18,0,0,0-.32-.66.72.72,0,0,0-.73-.28,7.83,7. [...]
- <path class="cls-4"
- d="M63.36,46.07c-.12-.1-.23-.21-.35-.3a11.07,11.07,0,0,1,1.34-.62c.44-.12.75-.09.75,0s-.29.11-.66.29S63.76,45.81,63.36,46.07Z"/>
- <path class="cls-4"
- d="M63.6,103.49c.15-.25.35-.62.6-1s.51-.93.76-1.47a5.53,5.53,0,0,0,.33-.85,5,5,0,0,0,.17-.92,3.56,3.56,0,0,0-.12-1.79,4.35,4.35,0,0,0-.91-1.32,2.7,2.7,0,0,0-.75-.57,1.31,1.31,0,0,0,.27-.06,2.77,2.77,0,0,1,.66.45,4.13,4.13,0,0,1,1.06,1.35,4,4,0,0,1,.26,2,9.76,9.76,0,0,1-.14,1,6.81,6.81,0,0,1-.33.93c-.24.57-.5,1.09-.73,1.54s-.37.7-.5,1c-.26,0-.51.07-.77.09A2.4,2.4,0,0,0,63.6,103.49Z"/>
- <path class="cls-4"
- d="M63.59,104.25c-.17-.07-.27-.21-.22-.32a.65.65,0,0,0,.09-.16c.26,0,.51,0,.77-.09l-.06.12-.2.41C63.93,104.3,63.76,104.31,63.59,104.25Z"/>
- <path class="cls-4"
- d="M64.23,47.57a15.8,15.8,0,0,1-1.3-1.22l.17-.11.26-.17.48.41a.3.3,0,0,0,.44.37l.3.22a2.59,2.59,0,0,0,.57.27l.26.09a4.17,4.17,0,0,0,.92.19,7.45,7.45,0,0,0,2-.12,3.88,3.88,0,0,0,1.82-.81c.43-.35.62-.71.68-.65a.68.68,0,0,1-.1.25,2.24,2.24,0,0,1-.41.58,2.7,2.7,0,0,1-.53.46h0l-.08,0h0v-.11h-.15l-.09,0h0l-.09.06a.31.31,0,0,0-.13.25v.06a12.74,12.74,0,0,0-1.4.35,6.46,6.46,0,0,1-1.37.28h-.17a4,4,0,0,1-1.07-.17A3.79,3.79,0,0,1,64.23,47.57Z"/>
- <path class="cls-4"
- d="M62.69,72.3c0-.26,0-.4,0-.44h.57l.37,0h0v0a1.23,1.23,0,0,0,0,.17v.09C63.34,72.24,63,72.27,62.69,72.3Z"/>
- <path class="cls-4" d="M62.58,46l.29-.15.14-.07c.12.09.23.2.35.3l-.26.17-.17.11-.28-.29Z"/>
- <path class="cls-4"
- d="M63.09,95.46s.13-.16.44-.13a1.26,1.26,0,0,1,.42.13,1.31,1.31,0,0,1-.27.06l-.17-.06A.8.8,0,0,0,63.09,95.46Z"/>
- <path class="cls-4"
- d="M62.26,2.86l-.17-.16.94,0a13.83,13.83,0,0,1,1.44,3.38c0,.45,0,.94,0,1.47,0-.06,0-.24-.09-.43A8.5,8.5,0,0,0,62.26,2.86Z"/>
- <path class="cls-4" d="M62.58,46l-1-1.08.35-.12,1.07.94s0,0,0,0l-.14.07Z"/>
- <path class="cls-4"
- d="M64,63.47l.28,0h0a.3.3,0,0,1,0-.11s0,0,0,0a.45.45,0,0,1-.06-.09s0,0,0,0l-.13.08Zm-1.18.2a.82.82,0,0,1,.52-.47,3.31,3.31,0,0,1,.68,0,2.66,2.66,0,0,1,.31,0,.29.29,0,0,1,.15,0,.18.18,0,0,1,.06.23c0,.07-.06.06-.09.08l0,0a.1.1,0,0,0-.08,0,1.63,1.63,0,0,1-.62.28,2.44,2.44,0,0,1-.94.07S62.76,63.84,62.83,63.67Zm0,.28a0,0,0,0,0,0,0h0c.11,0,.49-.14.85-.26a1.07,1.07,0,0,0,.35-.2,3.94,3.94,0,0,0-.6,0c-.35,0-.53.41-.6.5h0S62.79,63.94,62.79,64Z"/>
- <path class="cls-4"
- d="M62.2,34.09h.47l.55,0,.5,0h.05l-.05.06c-.35,0-.71,0-1.06.07a.26.26,0,0,0-.17.07A2.64,2.64,0,0,1,62.2,34.09Z"/>
- <path class="cls-4" d="M61.63,47.2l-.73-.29.54-.3c.31-.18.72-.39,1.14-.62l.07.07.28.29Z"/>
- <path class="cls-4" d="M62.43,72.32c0-.29.08-.45.11-.45s.07.16.08.44Z"/>
- <path class="cls-4"
- d="M62.78,2.34A7.83,7.83,0,0,0,62,1.39l-.26-.28.16-1c.41,0,1.32.13,2.5.27l.83.08-.1,1.1H64a11.32,11.32,0,0,1,.22,1.26L63,2.73Z"/>
- <path class="cls-4"
- d="M61.6,77.87l0-.27c.21-1.44.42-2.87.58-3.94.08-.56.15-1,.2-1.34h.19c0,.91-.08,3.14-.28,5.39l0,.27v.08a.92.92,0,0,1-.06.22h0s0,0,0,0h0a0,0,0,0,0,0,0h0s0,0,0,0l0,0h0l0,0a.75.75,0,0,1-.09-.09h0l0,0,0,0,0,0H61.8a.66.66,0,0,0-.16-.15l0,0,0,0,0,.07h0Z"/>
- <path class="cls-4"
- d="M61.41,2.21l-.3-.14.66-1,.26.28a7.83,7.83,0,0,1,.75,1l.25.39-.94,0A3.67,3.67,0,0,0,61.41,2.21Z"/>
- <path class="cls-4"
- d="M61.9,44.79l-.48-.4,1-.28c.25-.06.5-.12.74-.16a15.2,15.2,0,0,1,2.28-.37c.07,0,.11,0,.11,0s-1.51.48-3,1Z"/>
- <path class="cls-4"
- d="M64.36,48.6a16.2,16.2,0,0,1-3.42-1,.67.67,0,0,0,.17-.1l.52-.35a14.41,14.41,0,0,0,2.81.9,9.52,9.52,0,0,0,1.93.13h.09a8,8,0,0,0,2-.27,4.48,4.48,0,0,0,.78-.28v0a8.75,8.75,0,0,1-1.34.5c-.21.08-.44.17-.7.25a.2.2,0,0,1,.08-.08l.09,0h.06l-.29-.1a5.19,5.19,0,0,0-.48.24,2,2,0,0,0-.59,0s.18.14.22.2A9.28,9.28,0,0,1,64.36,48.6Z"/>
- <path class="cls-4"
- d="M61.38,67.49a1.22,1.22,0,0,1,.36-1,1,1,0,0,1,.78-.31l.37,0a3.49,3.49,0,0,1,.52.13c.1,0,.23.15.22.28a.39.39,0,0,1-.1.19l-.09.1a2.68,2.68,0,0,1-.42.31,1.18,1.18,0,0,1-.77,0s.34-.07.68-.21c.1-.09.24-.22.34-.33l.06-.08v0l-.05,0a2.34,2.34,0,0,0-.45-.07l-.35-.06a.73.73,0,0,0-.59.17A2.13,2.13,0,0,0,61.38,67.49Z"/>
- <path class="cls-4" d="M61.55,44.91l-.35-.38-.06-.07.28-.07.48.4Z"/>
- <path class="cls-4" d="M61.14,44.46a6.65,6.65,0,0,1-.58-.66c0-.06.39.19.86.59Z"/>
- <path class="cls-4" d="M60.21,47.4l.37-.28.18-.12.14-.09.73.29-.52.35a.67.67,0,0,1-.17.1Z"/>
- <path class="cls-4"
- d="M59.77,82.57c.12-.31.29-.75.48-1.27l.69-1.76.39-1,.21-.51,0-.09s0,0,0,0,0,.12.07.11,0-.11.07-.08h.12l0,0,0,0,0,0h0a.75.75,0,0,0,.09.09l0,0h0l0,0s0,0,0,0h0a0,0,0,0,1,0,0h0l-.18.5c-.11.34-.22.68-.34,1l-.59,1.79c-.18.52-.32,1-.43,1.28l0,0c-.18,0-.51.09-.51.1h-.51a.19.19,0,0,1,0-.08s0,0,0-.06l0-.07v0C59.71,82.72,59.74,82.65,59.77,82.57Z"/>
- <path class="cls-4"
- d="M59.25,69.32c.06.09,0,0,0,0S59.24,69.31,59.25,69.32Zm0,.09-.1,0s0,0,0,0,0,0,0,0,0,0,0,0a.42.42,0,0,0-.06-.08s-.11-.06,0-.06a.62.62,0,0,0,.18,0,1.17,1.17,0,0,0,.46-.07s0,0,0,0,0,0,0,0a.88.88,0,0,0-.28-.12c-.08,0-.14,0-.15,0s.25-.19.56,0c.09,0,.2.11.22.2a.25.25,0,0,1-.07.24.58.58,0,0,1-.25.12l-.19,0A1.16,1.16,0,0,1,59.27,69.41Z"/>
- <path class="cls-4"
- d="M59.54,47.17c-.55-.18-1.11-.35-1.69-.52h0l.44-.3.4-.24h0l1.06.37,1.12.44-.14.09-.18.12-.37.28Z"/>
- <path class="cls-4"
- d="M59.23,48.92a17.23,17.23,0,0,1-1.8,1.48h0a8.94,8.94,0,0,1,1.49-1.81c.42-.42.85-.83,1.21-1.12a.47.47,0,0,1,.09-.06l.73.25-.45.3A15.49,15.49,0,0,0,59.23,48.92Z"/>
- <path class="cls-4"
- d="M58.4,45.58a9.83,9.83,0,0,1,1-.5s.41-.17,1-.37l.8-.25.06.07.35.38c-.37.13-.71.26-1,.38-.55.21-.91.38-.93.39s-.4.16-.9.42c-.24-.08-.48-.17-.73-.24C58.14,45.77,58.27,45.67,58.4,45.58Z"/>
- <path class="cls-4" d="M57.85,46.65l-.65-.18.35-.27.43-.33h0c.25.07.49.16.73.24h0l-.4.24-.44.3Z"/>
- <path class="cls-4" d="M56.76,71.51l.12-.28c.07.12.16.26.25.43C57,71.62,56.88,71.56,56.76,71.51Z"/>
- <path class="cls-4"
- d="M57.4,73.87c-.25-.87-.52-1.73-.67-2.29h0l0-.07c.12,0,.24.11.37.15.27.51.62,1.24.93,2s.58,1.42.76,2a9,9,0,0,1,.29,1,24.29,24.29,0,0,1,.13,3.15,9.73,9.73,0,0,1-.25,3,.13.13,0,0,0,0-.06s.11-.25-.11-.2c-.1-.49-.21-1.59-.34-2.71-.09-.75-.18-1.51-.25-2.07,0-.28-.08-.51-.11-.68s0-.25,0-.26,0-.38-.19-.93S57.61,74.59,57.4,73.87Z"/>
- <path class="cls-4" d="M56.7,71.48c-.08-.32-.12-.52-.09-.54s.14.09.27.29l-.12.28Z"/>
- <path class="cls-4"
- d="M56.13.22C57,.12,57.75.06,58.46,0c.94,0,1.74,0,2.31,0l.93,0,.23,0-.16,1-.66,1,.3.14a3.67,3.67,0,0,1,.68.49l-.57,0-.9-.08c-.52,0-1.27-.11-2.15-.13l-1,0c-.1-.29-.19-.54-.29-.77s-.12-.25-.18-.36a1.29,1.29,0,0,0-.3-.35l-.33-.3L56.16.44Z"/>
- <path class="cls-4"
- d="M56.26,1.74h0Zm-.48-.2L55.5,1.4l.66-1,.25.22.33.3a1.29,1.29,0,0,1,.3.35c.06.11.13.24.18.36s.19.48.29.77h-.82A3.89,3.89,0,0,0,56.44,2l-.17-.23h0s0,0,0,0h0l-.06,0Z"/>
- <path class="cls-4" d="M56.26,1.73h0Z"/>
- <path class="cls-4"
- d="M55.72,86.44c-.1-.15.71-.92.79-.71l-.28.37c-.19.22-.19.36-.18.38a.23.23,0,0,0,0,.12.85.85,0,0,0,.09.29c0,.08.1.17.14.24s0,0-.22,0a.68.68,0,0,1-.12-.12A.82.82,0,0,1,55.72,86.44Z"/>
- <path class="cls-4"
- d="M56.7,71.48a11.29,11.29,0,0,1-1.09-.57,3.26,3.26,0,0,0,.11-.33L57,71a1.52,1.52,0,0,0-.07.18s0,0,0,0c-.13-.2-.22-.31-.27-.29S56.62,71.16,56.7,71.48Z"/>
- <path class="cls-4"
- d="M55.54,62.68s0,.07,0,.07,0,0-.1,0,0-.08,0-.09l.07,0,.14,0c.21,0,.47,0,.73-.08a2.69,2.69,0,0,1,.78-.06,1.59,1.59,0,0,1,.3.06.37.37,0,0,1,.16.1.2.2,0,0,1,.07.15.23.23,0,0,1,0,.17.7.7,0,0,1-.17.14l-.27.21a.92.92,0,0,1-.42.2.82.82,0,0,1-.44-.11l-.31-.14c-.18-.1-.3-.16-.29-.18s.14,0,.33.05l.34.1a.72.72,0,0,0,.34.05c.18,0,.36-.29.53-.42s0,0,0,0h0l-.19,0a2.74,2.74,0,0,0-.71,0,4.44,4.44,0,0,1-.75,0Z"/>
- <path class="cls-4"
- d="M55.22,84.56a2.87,2.87,0,0,1,.79-.34c.77-.46,1.2-.77,2-1.3l.57-.29.28-.11c0,.17.06.27.09.27a12,12,0,0,1-1.75,1.15s-1.93.78-2,.62Z"/>
- <path class="cls-4"
- d="M55.18,95.46s.16,0,.37.14l.08.05-.17,0a.38.38,0,0,0-.1,0C55.26,95.51,55.18,95.47,55.18,95.46Z"/>
- <path class="cls-4"
- d="M54.85,85.94a1.91,1.91,0,0,0-.22.4l-.07.13a1.12,1.12,0,0,0-.07.29.45.45,0,0,0,0,.16h0s-.07,0-.1,0l-.12-.16a1,1,0,0,1,.08-.53,1.62,1.62,0,0,1,.1-.15,1.1,1.1,0,0,1,.26-.27c.21-.18.48-.25.49-.2S55,85.75,54.85,85.94Z"/>
- <path class="cls-4"
- d="M54.21,48.94a17.91,17.91,0,0,1,2.42-2l.57-.44.65.18-1,.64A20.84,20.84,0,0,1,54.21,48.94Z"/>
- <path class="cls-4"
- d="M53.91,69l.15-.25a.23.23,0,0,0,.18,0l.23.18h0a.42.42,0,0,1-.28.1A.57.57,0,0,1,53.91,69Z"/>
- <path class="cls-4"
- d="M54,87.35c-.18-.29-.37-.59-.55-.86v-.23s0-.12,0-.16l.06-.31a2.37,2.37,0,0,1,.18-.55,1.34,1.34,0,0,1,.68-.72,1.55,1.55,0,0,1,.81,0h0a.92.92,0,0,0-.69.19,1,1,0,0,0-.45.63,2.25,2.25,0,0,0-.11.48,2.45,2.45,0,0,0,0,.27v.21l.29.39a.06.06,0,0,0,0,0c0,.3.27.48.3.45s0-.15-.06-.3l.18,0,.45.07.92.12c.14.14.29.22.32.19s0-.09-.1-.19h0l0,0,.09-.08.18-.16L58,85.68l1.12-.94.51-1.63s0,0,0-.14v0a.19.19,0,0,0,0,.08h.86l.12,0h0v0h0v0h0l0,.08v0a1.43,1.43,0,0,1,0,.17l-.18.52-.49,1 [...]
- <path class="cls-4"
- d="M53.76,103.17l-.7-.13A11,11,0,0,1,54,102a8.63,8.63,0,0,0,1.71-2.48A5.15,5.15,0,0,0,56,96.53a1.75,1.75,0,0,0-.59-.93.38.38,0,0,1,.1,0l.17,0a1.8,1.8,0,0,1,.56.8,5.16,5.16,0,0,1-.08,3.17,9,9,0,0,1-1.68,2.72c-.28.34-.51.6-.65.8C53.78,103.16,53.77,103.17,53.76,103.17Z"/>
- <path class="cls-4"
- d="M50.81,43.3c.88-.31,1.75-.56,2.44-.74s1.36-.29,1.39-.3.59-.09,1.41-.14a18.94,18.94,0,0,1,3,.06,17.42,17.42,0,0,1,2.26.38l.62.15a4.16,4.16,0,0,1,1.24.48s0,0,0,0-.59-.12-1.26-.23A21.45,21.45,0,0,0,59,42.65a20.34,20.34,0,0,0-2.89.07c-.8.09-1.33.17-1.36.19s-.57.06-1.35.24c-.54.11-1.2.27-1.9.46Z"/>
- <path class="cls-4"
- d="M53.36,68c.18-.12.21-.21.21-.24l-.06-.19.21,0h.84a.17.17,0,0,1,.18.12A1.55,1.55,0,0,1,54.48,69h0l-.23-.18,0,0a1.4,1.4,0,0,0,.21-.91c-.17,0-.47,0-.65,0a.67.67,0,0,1-.27.33Z"/>
- <path class="cls-4" d="M53.57,68.18l-.08.06L53.32,68l0,0Z"/>
- <path class="cls-4"
- d="M53,103.12a.59.59,0,0,1,.05-.08l.7.13-.19.29c0,.07-.2.05-.36,0S53,103.21,53,103.12Z"/>
- <path class="cls-4"
- d="M52.49,30.69c0-.11,0-.19,0-.29s.09-.36.13-.54c.11-.35.24-.7.38-1a11.22,11.22,0,0,1,2.58-3.54,11,11,0,0,1,1.67-1.37,6.51,6.51,0,0,1,1.94-1,4.91,4.91,0,0,1,2.12-.1,7.73,7.73,0,0,1,1.87.6,10.16,10.16,0,0,1,1.62.87A5.34,5.34,0,0,1,66,25.61a10.8,10.8,0,0,1,1.14,2.52,16.49,16.49,0,0,1,.59,2.52,3.9,3.9,0,0,1-.18,2s0-.75,0-.76a17.77,17.77,0,0,0-.48-1.77v-.21s0-.1,0-.15c-.43-1.11-.52-1.34-.86-2.07l-.39-.8a5.29,5.29,0,0,0-1.67-2.12l-.29-.18h-.29l-.65-.32a5,5,0,0,0-3.45 [...]
- <path class="cls-4"
- d="M52.42,47.22a6.31,6.31,0,0,0-.48-.84l.52-1a.82.82,0,0,1,.21.19,1.35,1.35,0,0,1,.17.34,2.81,2.81,0,0,1,.08.31C52.78,46.47,52.61,46.81,52.42,47.22Z"/>
- <path class="cls-4"
- d="M52.33,68.31a.74.74,0,0,0,.12-.6A9.85,9.85,0,0,1,52,66.3l.13-.07a7,7,0,0,0,1.1,1.61l.14.13,0,0,.17.24.08-.06c.21.21.44.41.67.61a.23.23,0,0,1-.18,0l-.15.25a.57.57,0,0,0,.28.08.42.42,0,0,0,.28-.1l.61.47a10.13,10.13,0,0,0,4.36,2,13.65,13.65,0,0,0,2.4.12,16.42,16.42,0,0,0,2.35-.22A5.89,5.89,0,0,0,68,69.45a27.21,27.21,0,0,0,2.4-3.28,15.19,15.19,0,0,0,2.22-5.6c.23-1.45.13-2.3.2-2.3a2.49,2.49,0,0,1,.09.6,2.06,2.06,0,0,1,0,.26c0,.15,0,.3,0,.48a6.06,6.06,0,0,1-.06,1,4 [...]
- <path class="cls-4" d="M52.07,45l.11-.23,1.18.58-.07.14c-.27-.09-.47-.18-.7-.28Z"/>
- <path class="cls-4"
- d="M51.43,70.37a2.09,2.09,0,0,1-.29-.32l0-.12v0A7,7,0,0,0,52,68.85l0,.11a.66.66,0,0,0,.24.45.48.48,0,0,0,0,.13l.28.46c.21.34.45.64.4.81s-.57.12-1-.1A4.77,4.77,0,0,1,51.43,70.37Z"/>
- <path class="cls-4"
- d="M51.49,67.16c.41-.68.45-1,.5-.86a9.85,9.85,0,0,0,.46,1.41.74.74,0,0,1-.12.6A7.68,7.68,0,0,1,51.49,67.16Z"/>
- <path class="cls-4"
- d="M54.34,4.36a11.85,11.85,0,0,0-2.57-.83l-.55-.1.28-.12.4-.16L52.27,3l.11,0a19.19,19.19,0,0,1,2.06.95,13.77,13.77,0,0,1,1.62,1l.88.65L57.4,6l.35.28.15.13c.3.25.55.51.58.54s0-.05,0-.13l-.09-.27a2.94,2.94,0,0,0-.12-.31c-.23-.64-.65-1.76-1-2.46a12.09,12.09,0,0,0-.61-1.28h.82c.12.33.24.71.37,1.13.26.88.58,1.93.95,3.18a1.15,1.15,0,0,0,0,.3,1.22,1.22,0,0,0,0,.26c0,.08.07.27,0,.11a2.37,2.37,0,0,0-.74-.52l-.25-.23c-.2-.17-.39-.32-.58-.46l-.45-.34-.86-.6A11.57,11.57,0,0 [...]
- <path class="cls-4"
- d="M51.23,44.61,50,44.06l.61-.19.92-.26.15.07,1.33.59.64.28c.19.07.44.13.67.2,1.25.35,2.51.72,3.71,1.11h0l-.43.33-.35.27c-1-.28-2.09-.55-3.16-.82-.24-.06-.47-.11-.74-.2h0l.07-.14-1.18-.58-.11.23C51.79,44.84,51.52,44.72,51.23,44.61Z"/>
- <path class="cls-4"
- d="M51.62,64.7a.76.76,0,0,1-.21-.1c0-.15-.11-.29-.15-.43l.06,0a1.51,1.51,0,0,0,.41.18.48.48,0,0,1,.18.11.45.45,0,0,1,.17.41.37.37,0,0,1-.27.31.24.24,0,0,1-.14,0,.08.08,0,0,1,0,0c.06-.06.23-.15.2-.29a.23.23,0,0,0-.13-.16A.26.26,0,0,0,51.62,64.7Z"/>
- <path class="cls-4"
- d="M51,69.63a1.49,1.49,0,0,1,.1-.8c.19-.51.61-.83.75-.71s.1.42.14.73a7,7,0,0,1-.93,1.06A1.33,1.33,0,0,1,51,69.63Z"/>
- <path class="cls-4"
- d="M50.6,51.3c.1-.32.2-.62.31-.91a3.17,3.17,0,0,0,.72.4,4.79,4.79,0,0,0,1.8.19l.6,0,.51,0,.55-.08.3,0c.09,0,0,0-.06,0l-.14,0-.09,0a2.87,2.87,0,0,1-.52-.28l-.21-.16a3.11,3.11,0,0,1-.28-.23,4.39,4.39,0,0,1-.8-1c-.39-.68-.64-1.25-.86-1.69v0c.19-.41.36-.75.5-1,.06.21.11.45.18.75a11.83,11.83,0,0,0,.55,1.74,3.84,3.84,0,0,0,.23.45,3.46,3.46,0,0,0,.42.57l.24.23a2.34,2.34,0,0,0,.38.28,3.42,3.42,0,0,0,.8.43l.17.07s.16.09.17.11.12,0,.15,0,.12,0,0,.06l-.48.09-.88.16-.82.14- [...]
- <path class="cls-4"
- d="M51.26,64.17c0,.14.1.28.15.43a.82.82,0,0,1-.25-.21,3,3,0,0,0-.21-.24c-.06-.05-.12-.05-.12-.08s.06-.07.17,0A.91.91,0,0,1,51.26,64.17Z"/>
- <path class="cls-4"
- d="M50.6,51.3a3.49,3.49,0,0,1-.74-.34l.81-.85a1.15,1.15,0,0,0,.24.28C50.8,50.68,50.7,51,50.6,51.3Z"/>
- <path class="cls-4" d="M49.42,43.82c.32-.14.66-.26,1-.39l.38-.13h0l.68.31-.92.26-.61.19Z"/>
- <path class="cls-4"
- d="M50,70.16l-.44-.48,0,0,.17-.19c.3-.28.48-.45.51-.49a11.63,11.63,0,0,0,1.33-1.81,7.68,7.68,0,0,0,.84,1.15,3.15,3.15,0,0,1-.31.54c0-.31,0-.64-.14-.73s-.56.2-.75.71a1.49,1.49,0,0,0-.1.8,1.33,1.33,0,0,0,.06.28l0,0-.65.61a1.43,1.43,0,0,1-.35-.26Z"/>
- <path class="cls-4"
- d="M50.39,2.32l-.47-.14h0c.26-.16.53-.31.8-.45l.41-.22.46-.22A15.63,15.63,0,0,1,55.26.33l.87-.11,0,.22-.66,1,.28.14.38.2.06,0h0s0,0,0,0h0l.17.23a3.89,3.89,0,0,1,.25.42l-1.19,0A15.6,15.6,0,0,0,52.38,3l-.5-.19C51.21,2.56,50.71,2.41,50.39,2.32Z"/>
- <path class="cls-4"
- d="M50,58.05h.1a9.74,9.74,0,0,0,1.23-.12,7.16,7.16,0,0,0,2.06-.64,17.43,17.43,0,0,0,2.46-1.67l.55-.45,0,0-.34.08-.55.14-.63.07-.82.06a11.87,11.87,0,0,1-1.45,0,7.41,7.41,0,0,1-2.14-.42l-.51-.21a9.46,9.46,0,0,1,.12-1.07,3.14,3.14,0,0,0,.68.53,5.23,5.23,0,0,0,1.84.65,9.72,9.72,0,0,0,1.41.1l.81,0c.34,0,.76-.05,1.16-.09a7.92,7.92,0,0,0,1-.07l0,0a7.13,7.13,0,0,0-.56.59c-.31.26-.48.48-.79.72l-.74.6c-.45.35-.87.65-1.28.91a10.47,10.47,0,0,1-2.1,1c-.56.2-1,.31-1.21.39l-.1 [...]
- <path class="cls-4"
- d="M49.19,71.7l1.23-1.16,0,0h0a.22.22,0,0,0-.06.07,1.38,1.38,0,0,0-.15.3.73.73,0,0,0,.12.82,3.33,3.33,0,0,0,.26.24l.29.23.52.4c.33.23.55.35.54.43s-.32.14-.74,0a5.06,5.06,0,0,1-.69-.23l-.37-.17a2,2,0,0,1-1-1Z"/>
- <path class="cls-4"
- d="M49.78,3.34,49.9,2.2s0,0,0,0l.47.14c.32.09.82.24,1.49.48l.5.19-.11,0-.37.12-.4.16-.28.12a9.6,9.6,0,0,0-1-.09h-.47Z"/>
- <path class="cls-4"
- d="M49.62,50.31c.06-.19.13-.37.19-.55.37-.16.61-.23.64-.18S50.13,49.91,49.62,50.31Z"/>
- <path class="cls-4"
- d="M49.93,54.87a4.15,4.15,0,0,1-1-.63l.9-.76a.84.84,0,0,0,.25.32A9.46,9.46,0,0,0,49.93,54.87Z"/>
- <path class="cls-4" d="M50.12,59.13l-.26.08L49.73,58H50C50,58.4,50.07,58.77,50.12,59.13Z"/>
- <path class="cls-4"
- d="M49.28,60.89c0-.26-.1-.52-.14-.78a.15.15,0,0,0,0-.07v0l.14-.08h0l.05,0h0l0,0,0,0,0,0a.06.06,0,0,0,0,0l.14-.06h0l.12,0h0l0,0,0,.06a1.66,1.66,0,0,1,0,.22.9.9,0,0,1-.58.88Z"/>
- <path class="cls-4"
- d="M51,66.31a21.2,21.2,0,0,1-1.6-4.74l-.15-.68a.9.9,0,0,0,.58-.88,1.66,1.66,0,0,0,0-.22l0-.06,0,0h0s0,0,0,0v-.05h0l0-.49c0-.38,0-.75-.07-1.11h0l.13,1.17.26-.08c.1.72.23,1.46.38,2.2a24.87,24.87,0,0,0,.76,2.84A.91.91,0,0,0,51,64c-.11,0-.19,0-.17,0s.06,0,.12.08a3,3,0,0,1,.21.24.82.82,0,0,0,.25.21q.11.3.24.6s0,0,0,0h0q.12.32.27.63l.18.36L52,66.3c-.05-.11-.09.18-.5.86C51.32,66.88,51.17,66.6,51,66.31Z"/>
- <path class="cls-4"
- d="M49.15,71.59a2,2,0,0,1,0-1,3.18,3.18,0,0,1,.19-.61l.08-.16,0,0s0,0,0-.06a.38.38,0,0,1,.08-.09l.44.48.12.12a1.43,1.43,0,0,0,.35.26L49.19,71.7A.49.49,0,0,0,49.15,71.59Z"/>
- <path class="cls-4" d="M48.86,53.55c0-.28.08-.56.13-.83l.09-.47h0a.34.34,0,0,0,.1-.06l.56.82Z"/>
- <path class="cls-4"
- d="M48.76,54.7a10.92,10.92,0,0,1,.1-1.15l.88-.55-.56-.82a.34.34,0,0,1-.1.06,15.8,15.8,0,0,1,.54-1.93c.51-.4.85-.67.83-.73s-.27,0-.64.18c.07-.17.13-.33.2-.49.45-1,.84-1.76,1.16-2.44l.9-1.87.52.21c.23.1.43.19.7.28-.07.14-.19.39-.37.74a2.81,2.81,0,0,0-.08-.31,1.35,1.35,0,0,0-.17-.34.82.82,0,0,0-.21-.19l-.52,1a6.31,6.31,0,0,1,.48.84l-.09.18c-.32.65-.76,1.49-1.17,2.37-.08.2-.17.4-.25.62a1.15,1.15,0,0,1-.24-.28l-.81.85a3.49,3.49,0,0,0,.74.34,14.52,14.52,0,0,0-.42,1.64 [...]
- <path class="cls-4"
- d="M48.73,56.25a11.36,11.36,0,0,1,0-1.55c0,.07.09.14.14.21s.18.24.27.37l.14.19.23.29c.05.72.09,1.48.15,2.26v0c0,.36.05.73.07,1.11l0,.49h0l-.12.06h0l-.14.06a.06.06,0,0,1,0,0l0,0,0,0,0,0h0l-.05,0h0l-.14,0h0c0-.06,0-.14,0-.17s0,0,0,0L49,59.21l0-.29-.09-.83C48.84,57.45,48.78,56.83,48.73,56.25Z"/>
- <path class="cls-4" d="M48.64,80.17a1.56,1.56,0,0,1,.26,0,.89.89,0,0,1-.35.16Z"/>
- <path class="cls-4"
- d="M47.81,101.07c-.24-.14-.47-.28-.71-.44l.16,0c.25-.07.6-.18,1-.32a10,10,0,0,0,2.79-1.45,3.65,3.65,0,0,0,1.34-2.68,8.14,8.14,0,0,0,0-1.39h.06a4,4,0,0,1,.23,1.4,4.38,4.38,0,0,1-.26,1.52,3.68,3.68,0,0,1-1,1.49,10,10,0,0,1-2.88,1.66Z"/>
- <path class="cls-4" d="M48.4,58.23l-.09-.07h0s0,0,.07,0h0v0Z"/>
- <path class="cls-4"
- d="M48.4,58.23v0s0,0,0,0,0,0,0,0,0,0,0,0l.1.09a.13.13,0,0,1-.09.06c-.17,0-.13-.1-.16-.13a.29.29,0,0,1,0-.09.09.09,0,0,1,0-.07l.09.07Z"/>
- <path class="cls-4"
- d="M47.42,54.21a1,1,0,0,1-.06-.68c.06-.2.3-.32.48-.45l.27-.18,1-.65-.09.47c-.05.27-.09.55-.13.83l-.27.18-.28.17h0s0,0,0,0a.87.87,0,0,1,.05.12l.09.16c.09.16.2.32.32.5a11.36,11.36,0,0,0,0,1.55c0-.06,0-.1,0-.15v0L48.63,56l-.15-.19c-.1-.14-.2-.26-.3-.39a7.32,7.32,0,0,1-.52-.76l-.11-.2A2.59,2.59,0,0,1,47.42,54.21Z"/>
- <path class="cls-4"
- d="M48,74.51a3.3,3.3,0,0,1-.85-.86c.31-.31.62-.6.9-.87a.38.38,0,0,1,0,.1,2.77,2.77,0,0,0,.54.93c.53.64,1.39,1.07,1.32,1.25S48.9,75.12,48,74.51Z"/>
- <path class="cls-4"
- d="M50,44.06a19,19,0,0,0-2.08.81,8.24,8.24,0,0,0-1.12.66c-.06,0,.3-.47,1-.88a12.8,12.8,0,0,1,1.66-.83Z"/>
- <path class="cls-4"
- d="M48,82.07c-.87,1.27-1.11,2.3-1.23,2.28a3.73,3.73,0,0,1,.38-1.68,1.1,1.1,0,0,0,.31-.16.91.91,0,0,0-.26,0,6.33,6.33,0,0,1,.36-.75,9.07,9.07,0,0,1,1-1.51.89.89,0,0,0,.35-.16,1.56,1.56,0,0,0-.26,0c.75-1,1.67-1.94,2.56-2.89.71-.77,1.34-1.56,1.94-2.34a22.81,22.81,0,0,0,1.51-2.14,10.85,10.85,0,0,0,.83-1.59c.05-.11.09-.22.13-.3a11.29,11.29,0,0,0,1.09.57l0,.1h0l-.07.15a13.21,13.21,0,0,1-1,1.73A24.75,24.75,0,0,1,54,75.63c-.64.75-1.36,1.56-2.12,2.29A28.55,28.55,0,0,0,48 [...]
- <path class="cls-4"
- d="M47.46,82.51a1.1,1.1,0,0,1-.31.16,1.17,1.17,0,0,1,.05-.11A.91.91,0,0,1,47.46,82.51Z"/>
- <path class="cls-4"
- d="M47,73.32a4.91,4.91,0,0,1-.21-.45l.07,0a1.19,1.19,0,0,0,.16-.08l.13-.07.77-.42a.82.82,0,0,1,.09.26c0,.07,0,.16.06.25-.28.27-.59.56-.9.87a.08.08,0,0,1,0,0l0,0A2.92,2.92,0,0,1,47,73.32Z"/>
- <path class="cls-4" d="M47,89.59c.1-.21.16-.33.18-.32a1.6,1.6,0,0,1-.12.43Z"/>
- <path class="cls-4" d="M47,58.25s.06-.06.14-.14l.23-.08,0,0C47.13,58.25,47,58.25,47,58.25Z"/>
- <path class="cls-4"
- d="M46.77,101.07a.17.17,0,0,1,0-.24.15.15,0,0,1,.09-.13l.26-.07h0c.24.16.47.3.71.44l-.36.13-.42.13a.13.13,0,0,1-.13-.06C46.91,101.2,46.84,101.13,46.77,101.07Z"/>
- <path class="cls-4"
- d="M46.71,72.79c.92-1.05,1.84-2.12,2.77-3.14l0,0a.38.38,0,0,0-.08.09s0,.06,0,.06l0,0-.08.16a3.18,3.18,0,0,0-.19.61,2,2,0,0,0,0,1,.49.49,0,0,1,0,.11l-.42.4c-.22.22-.46.45-.72.68,0-.09,0-.18-.06-.25a.82.82,0,0,0-.09-.26l-.77.42-.13.07a1.19,1.19,0,0,1-.16.08l-.07,0a.08.08,0,0,1,0-.05h0Z"/>
- <path class="cls-4"
- d="M46.51,58.84a.45.45,0,0,1,0-.34,1.08,1.08,0,0,1,.54-.38h0c-.08.08-.15.12-.14.14s.15,0,.35-.19l0,0a1.29,1.29,0,0,1,.4-.07,1.08,1.08,0,0,1,.56.2.09.09,0,0,0,0,.07.29.29,0,0,0,0,.09s0,.09.16.13a.13.13,0,0,0,.09-.06,1.9,1.9,0,0,1,.25.24.45.45,0,0,1,.11.23v.07a.37.37,0,0,1,0,.11c0,.1-.07.14-.08.14s.12-.25-.12-.47-.28-.21-.44-.33a.84.84,0,0,0-.53-.19,1.7,1.7,0,0,0-.58.18c-.18.09-.35.18-.38.26s0,.14.07.21a.44.44,0,0,0,.1.08s0,.1-.06.17-.12.12-.15.09a.57.57,0,0,1-.13 [...]
- <path class="cls-4"
- d="M46.93,89.4a6.24,6.24,0,0,1-.52-2v-.08c.12-.08.17-.13.16-.15l-.17.07a5.1,5.1,0,0,1,.37-2.64h0a15.28,15.28,0,0,0,.1,2.73,6.13,6.13,0,0,0,.61,1.76c.24.43.45.73.46.75l.47.78c.28.45.65,1,1.07,1.59a9.39,9.39,0,0,0,1.26,1.4c.38.33.68.52.66.56s0,0,0,0a2.12,2.12,0,0,1-.79-.37,7.45,7.45,0,0,1-1.47-1.31A18.44,18.44,0,0,1,47.9,91c-.31-.44-.51-.75-.52-.77s-.13-.21-.3-.54a1.6,1.6,0,0,0,.12-.43s-.08.11-.18.32Z"/>
- <path class="cls-4"
- d="M46.77,72.87a4.91,4.91,0,0,0,.21.45,2.92,2.92,0,0,0,.17.27l0,0c-.06-.08-.1-.15-.15-.23s-.17-.35-.21-.44a.11.11,0,0,1,0-.06h0Z"/>
- <path class="cls-4" d="M46.74,72.87l-.07-.05,0,0h0l0,0h0a.08.08,0,0,0,0,.05h0Z"/>
- <path class="cls-4" d="M46.4,87.29l.17-.07s0,.07-.16.15A.12.12,0,0,1,46.4,87.29Z"/>
- <path class="cls-4"
- d="M45.91,54.56a3.89,3.89,0,0,1-.45-.71,2.33,2.33,0,0,1-.12-.34.63.63,0,0,1,0-.26.79.79,0,0,1,.24-.67c.05,0,.09-.09.15-.13l.13-.11.28-.24c.21-.17.44-.34.69-.52.49-.35,1.05-.72,1.57-1a12.93,12.93,0,0,1,1.45-.78c-.06.18-.13.36-.19.55-.27.2-.58.45-.91.72s-1,.79-1.42,1.18l-.6.56-.25.24-.11.12s-.08.08-.06.07a.32.32,0,0,1,0,.06,1,1,0,0,0,.06.21,3.27,3.27,0,0,0,.27.52c.25.39.93.85,1.43,1.53a3,3,0,0,1,.53,1.12,5,5,0,0,1,.11,1,2.75,2.75,0,0,1,0,.41.55.55,0,0,1,0,.17.29.2 [...]
- <path class="cls-4"
- d="M46,76.54a2.82,2.82,0,0,1-.87-.8l.9-1c0,.07,0,.17.1.31a2.39,2.39,0,0,0,.43.74,3.75,3.75,0,0,0,.74.58c.23.14.39.17.43.24s-.18.27-.53.26A2.44,2.44,0,0,1,46,76.54Z"/>
- <path class="cls-4"
- d="M45.76,5.53c.09-.1.18-.21.28-.31a15.45,15.45,0,0,1,2.4-2.07A16.65,16.65,0,0,1,49.9,2.2l-.12,1.14h.47a9.6,9.6,0,0,1,1,.09l-.51.22c-.52.23-1,.49-1.49.74A20.75,20.75,0,0,0,46.73,6l-.24.18a.9.9,0,0,0-.21.08,3.63,3.63,0,0,0-.46.34A1.67,1.67,0,0,0,45.76,5.53Z"/>
- <path class="cls-4"
- d="M45.4,58.74a6.14,6.14,0,0,1,.4-.86,1.74,1.74,0,0,1,.3-.36l.32-.27a3.58,3.58,0,0,1,.36-.28c.11,0,.25-.11.35,0s.15.44.21.63,0,.17,0,.25a.3.3,0,0,1,0,.21l-.23.08.1-.12c.05-.07,0-.19-.07-.34s0-.27-.15-.39-.16,0-.21.08a1.7,1.7,0,0,0-.19.19c-.05.06-.18.17-.26.25a1.36,1.36,0,0,0-.21.29,6.41,6.41,0,0,0-.31.82,3.15,3.15,0,0,0-.14.44.59.59,0,0,0,0,.35,1.07,1.07,0,0,0,.65.48,4.32,4.32,0,0,0,1,.2,9.74,9.74,0,0,0,1.08,0c.33,0,.69-.13.71-.25a0,0,0,0,0,0,0c0,.26.1.52.14.78L [...]
- <path class="cls-4"
- d="M45.1,75.57a2.12,2.12,0,0,1-.27-.49,3.87,3.87,0,0,1,.58-.25,1.87,1.87,0,0,1,.64-.16.66.66,0,0,1,0,.09l-.9,1,0,0,0,0Z"/>
- <path class="cls-4"
- d="M44.65,7.44a.23.23,0,0,1,0-.11.88.88,0,0,1,.08-.27,6.19,6.19,0,0,1,1-1.53,1.67,1.67,0,0,1,.06,1,7,7,0,0,0-.55.54l-.18.19a3.83,3.83,0,0,1-.28.29h-.05A.22.22,0,0,1,44.65,7.44Z"/>
- <path class="cls-4"
- d="M44.83,75.08a2.12,2.12,0,0,0,.27.49l.07.11,0,0a.43.43,0,0,0,0-.07,3.39,3.39,0,0,1-.29-.54Z"/>
- <path class="cls-4"
- d="M44.18,27.43a27.31,27.31,0,0,1,4.9-5.25c.85-.68,1.44-1,1.49-1.06s.51-.31,1.3-.64a16.4,16.4,0,0,1,3.33-1A27.87,27.87,0,0,1,60.05,19a9.27,9.27,0,0,1,5.51,2h0s0,0,0,0a8.75,8.75,0,0,1,2.61,3,11.8,11.8,0,0,1,1.16,3.75,31.73,31.73,0,0,1,.29,3.67,14.82,14.82,0,0,1-.17,3.36,12.48,12.48,0,0,1-2,4.7c-.7,1-1.25,1.52-1.29,1.47s.09-.14.28-.42.46-.68.76-1.2a13.51,13.51,0,0,0,1.65-4.65,13.84,13.84,0,0,0,0-3.23,34.26,34.26,0,0,0-.39-3.56,11,11,0,0,0-1.17-3.45A7.82,7.82,0,0,0 [...]
- <path class="cls-4"
- d="M43.41,79a3.21,3.21,0,0,1-.34-.72l.25-.31.12-.15a2.58,2.58,0,0,0,.34,1,2.44,2.44,0,0,0,.69.76,3.07,3.07,0,0,0,1.08.5,7.83,7.83,0,0,0,2.3.26,5.43,5.43,0,0,0,.79-.09l-.09.13a5.16,5.16,0,0,1-.69.14,7.09,7.09,0,0,1-2.39-.11,3.52,3.52,0,0,1-1.23-.51A2.69,2.69,0,0,1,43.41,79Z"/>
- <path class="cls-4"
- d="M43.32,77.93l-.25.31s0,0,0,0h0a2.09,2.09,0,0,1-.1-.41.22.22,0,0,1,.2-.2.26.26,0,0,1,.27.18v0Z"/>
- <path class="cls-4"
- d="M43,77.77a2.09,2.09,0,0,0,.1.41h0a1.76,1.76,0,0,1-.09-.36A.06.06,0,0,1,43,77.77Z"/>
- <path class="cls-4"
- d="M41.34,81.71a3.93,3.93,0,0,1-.28-.44l.26-.49a3.27,3.27,0,0,0,.37.66,3.35,3.35,0,0,0,2.05,1.35,6.19,6.19,0,0,0,2.55,0c.4-.07.71-.15.91-.2a1.17,1.17,0,0,0-.05.11,8,8,0,0,1-.81.28,6.31,6.31,0,0,1-2.66.17A3.74,3.74,0,0,1,41.34,81.71Z"/>
- <path class="cls-4"
- d="M40.83,80.82a2.6,2.6,0,0,0,.1-.25l0,0,.12-.28h0a.22.22,0,0,1,.1.13v0a2.52,2.52,0,0,0,.1.3l0,.07-.26.49A2.4,2.4,0,0,1,40.83,80.82Z"/>
- <path class="cls-4"
- d="M41.09,80.2s0,0,0,0h0l.48-1,.09-.12c.37-.54.69-1.1,1-1.67l.82-1.19c.43-.48.86-1,1.32-1.42.64-.65,1.26-1.33,1.87-2l0,0,0,0,.07.05h0a.11.11,0,0,0,0,.06c0,.09.11.25.21.44s.09.15.15.23c-.27.26-.54.53-.83.84l-.23.24a.73.73,0,0,0,0-.08,1.63,1.63,0,0,0-.64.16,2,2,0,0,0-.6.27.11.11,0,0,1,0,0l0,0a3.39,3.39,0,0,0,.29.54.43.43,0,0,1,0,.07c-.55.62-1.12,1.28-1.7,2v0a.26.26,0,0,0-.27-.17.22.22,0,0,0-.2.26.06.06,0,0,0,0,.06,1.76,1.76,0,0,0,.09.36c-.44.56-.88,1.15-1.29,1.78q [...]
- <path class="cls-4"
- d="M43,93.66a6.89,6.89,0,0,1-1.57,0c-.29,0-.56-.07-.78-.11l-.15-.5a9.19,9.19,0,0,0,1,.17,5.82,5.82,0,0,0,1.46,0,6,6,0,0,0,1.61-.46,3.58,3.58,0,0,0,1.35-.93,2.74,2.74,0,0,0,.39-.64c.1-.23.19-.45.27-.65.18-.42.32-.76.43-1l.06.11c-.07.24-.18.57-.32,1-.07.2-.14.42-.23.66a4.16,4.16,0,0,1-.57.93,3.15,3.15,0,0,1-1.24.86A6.19,6.19,0,0,1,43,93.66Z"/>
- <path class="cls-4" d="M40.58,93.54c0-.16-.08-.33-.11-.49h.06l.15.5Z"/>
- <path class="cls-4"
- d="M40.47,93.05c0,.16.07.33.11.49l.1,0c.21.7.41,1.33.48,1.5a2.87,2.87,0,0,1,.16.57l.1.46c.07.31.14.61.2.92L42,98.89l.06.3,0,.07s0,0,0,0l.08-.1.6-.77.57-.74.39.84.8,1.7c0-.52,0-1,0-1.56.44.39.92.84,1.34,1.17.2.17.44.34.62.47l.35.24a1.82,1.82,0,0,0,.23.15l-.26.07a.15.15,0,0,0-.09.13.17.17,0,0,0,0,.24c.07.06.14.13.13.2a.13.13,0,0,0,.13.06l.42-.13.36-.13.52.3a13.84,13.84,0,0,0,3.16,1.3c.52.14,1,.26,1.57.37a.59.59,0,0,0-.05.08c0,.09,0,.23.2.31s.32.1.36,0l.19-.29c1.56 [...]
- <path class="cls-4" d="M39.44,89.93l.39,1A5.41,5.41,0,0,1,39.44,89.93Z"/>
- <path class="cls-4"
- d="M39.41,85.33a25.39,25.39,0,0,1,1.42-4.51,2.4,2.4,0,0,0,.23.45c-.21.4-.39.81-.58,1.24a27.15,27.15,0,0,0-.87,3,4.39,4.39,0,0,0-.15,1,2.53,2.53,0,0,1-.2-.29h0C39.29,85.93,39.34,85.65,39.41,85.33Z"/>
- <path class="cls-4"
- d="M39.42,88a11.84,11.84,0,0,0,.41,2.9l-.39-1v0h0C39.47,89.6,39.43,88.85,39.42,88Z"/>
- <path class="cls-4"
- d="M39.42,87.18c0-.22,0-.44,0-.65a2.86,2.86,0,0,0,.63.65,3.84,3.84,0,0,0,2.53.76,19.34,19.34,0,0,0,2.75-.35,8.41,8.41,0,0,0,.88-.24l.15-.06a.12.12,0,0,0,0,.08,4.27,4.27,0,0,1-1,.39,14.74,14.74,0,0,1-2.78.51,4.12,4.12,0,0,1-2.81-.74A2.42,2.42,0,0,1,39.42,87.18Z"/>
- <path class="cls-4"
- d="M39.26,13.46a7.16,7.16,0,0,1,.5-1.1l.3-.48s.16-.19.38-.42a7.8,7.8,0,0,1,.82-.76h0l.55-.18c.37-.12.59-.39.52-.54.26-.13.43-.2.45-.16s-.6.58-1.16,1.18c-.28.3-.55.6-.74.85s-.3.42-.31.42l-.32.42a5.8,5.8,0,0,0-.58,1c-.38.71-.45,1.53-.54,1.53s-.1-.21-.09-.53A3.89,3.89,0,0,1,39.26,13.46Z"/>
- <path class="cls-4"
- d="M39.18,86.58l.06-.35h0a2.53,2.53,0,0,0,.2.29c0,.21,0,.43,0,.65a1.7,1.7,0,0,1-.19-.19c0-.12,0-.23,0-.35S39.18,86.6,39.18,86.58Z"/>
- <path class="cls-4"
- d="M39.42,88c0,.84,0,1.59,0,1.87a6.64,6.64,0,0,1-.24-3.24c0,.12,0,.23,0,.35a1.7,1.7,0,0,0,.19.19C39.41,87.46,39.41,87.74,39.42,88Z"/>
- <path class="cls-4"
- d="M38.59,9a4.26,4.26,0,0,1,2.6.09,2.39,2.39,0,0,1,1.15.92v0a6.79,6.79,0,0,0-1,.67l0,0h0c-.07,0-.12,0-.13,0a1,1,0,0,0-.1-.15,1.23,1.23,0,0,0-.39-.33A3.42,3.42,0,0,0,38.72,10a8.12,8.12,0,0,1-3.36-.27C35.36,9.46,37,9.3,38.59,9Z"/>
- <path class="cls-4"
- d="M35.87,29.44l-2,1.39-.42.28-.14.1-.2.15.32.07,1,.27,3.6,1c-.55.29-1.08.59-1.6.88l-.76.44-.29.17-.08.06h0s-.07,0-.06.07l.13.07c.94.6,1.8,1.13,2.52,1.58,1.45.9,2.36,1.5,2.44,1.54l1.24.86c.39.28.78.55,1.3.87s1.09.64,1.74,1c1.3.7,2.84,1.47,4.49,2.27l1.73.82-.38.13c-.35.13-.69.25-1,.39l-.79-.35c-1.69-.76-3.26-1.5-4.6-2.18-.67-.35-1.28-.68-1.83-1s-1-.64-1.38-.88l-1.24-.82L37.19,37c-.72-.46-1.56-1-2.51-1.64-.17-.13-.42-.28-.6-.44l-.22-.26a2.36,2.36,0,0,1-.15-.25c-.0 [...]
- <path class="cls-4"
- d="M32.58,12.56a32,32,0,0,0,2.47,4c1.76,2.14,3,3.61,2.86,3.75s-.65-.35-1.56-1.15h0a1.86,1.86,0,0,0-.12-.56s0,.15,0,.41c-.54-.48-1.19-1.08-1.92-1.79a27.18,27.18,0,0,1-2.95-4L31.12,13l0-.07a.75.75,0,0,1-.07-.12l-.08-.19c-.1-.22-.19-.44-.28-.67a12.67,12.67,0,0,1-.44-1.4,14.19,14.19,0,0,1-.31-1.47c0-.25-.06-.51-.08-.77s0-.27,0-.4V7.7c0-.08,0-.2,0-.3a2.26,2.26,0,0,1,.37-1.11,1.92,1.92,0,0,1,1-.62l.27-.1.19-.05.36-.1.71-.19c.94-.23,1.85-.42,2.75-.58s1.78-.28,2.68-.34a [...]
- </g>
- <path class="cls-7"
- d="M71.58,82.36l-.3.13a.28.28,0,0,0,0-.07l0-.07c0-.06,0-.06,0-.17s0-.12,0-.18a.86.86,0,0,1,.14.13A1.54,1.54,0,0,1,71.58,82.36Z"/>
- <path class="cls-7"
- d="M71.29,82.18c0,.11,0,.11,0,.17l0,.07a.69.69,0,0,0-.42-.35,1.72,1.72,0,0,0-.5,0,.38.38,0,0,0-.16,0s-.07,0-.08,0,0,0,0,0a.27.27,0,0,1,.17-.09,1.51,1.51,0,0,1,.56-.08.88.88,0,0,1,.41.16C71.28,82.06,71.28,82.12,71.29,82.18Z"/>
- <path class="cls-7"
- d="M70.79,83.29c0,.1,0,.1-.05.15l0,.06a.76.76,0,0,0-.33-.45,2,2,0,0,0-.47-.15.46.46,0,0,0-.16,0,.1.1,0,0,1-.08,0s0,0,.07,0a.28.28,0,0,1,.18,0,1.56,1.56,0,0,1,.57.08.83.83,0,0,1,.35.26C70.81,83.17,70.8,83.22,70.79,83.29Z"/>
- <path class="cls-7"
- d="M70.82,83.14c.17.23.21.49.13.59l-.27-.19h0a.89.89,0,0,0,0-.11,0,0,0,0,1,0,0C70.69,83.32,70.76,83.23,70.82,83.14Z"/>
- <path class="cls-7" d="M70.72,83.58h0s0,0,0,0Z"/>
- <path class="cls-10" d="M65.89,82h0v0l0,0h0V82Z"/>
- <path class="cls-7" d="M65.88,82v0h-.08l-.16,0-.21,0h0l-.14,0s-.07-.06,0,0a4,4,0,0,0,.6-.09h0Z"/>
- <polygon class="cls-10" points="65.02 82.2 65.02 82.21 65.02 82.21 65.02 82.2"/>
- <path class="cls-10" d="M62.23,78.28s0,0,0,0l0,0h0Z"/>
- <path class="cls-10"
- d="M61.66,77.83l0,0a.8.8,0,0,1,.17.15h-.08c-.06,0-.07.07-.07.08s-.06-.07-.07-.11l0-.07Z"/>
- <path class="cls-10" d="M60.68,82.89a.06.06,0,0,0,0,0h0Z"/>
- <path class="cls-11" d="M60.66,82.93a.19.19,0,0,1,0,.08h0l0,0Z"/>
- <path class="cls-7" d="M60.66,82.93l0,.11h-.47S60.48,83,60.66,82.93Z"/>
- <polygon class="cls-10" points="60.64 83.01 60.62 83.08 60.62 83.06 60.62 83.04 60.64 83.01"/>
- <path class="cls-7" d="M58.89,82.52c.22,0,.08.15.11.2a.08.08,0,0,1,0,.06h0s-.06-.1-.09-.27Z"/>
- <path class="cls-10"
- d="M56.27,87.13a.65.65,0,0,1,.1.19s-.18,0-.33-.19C56.23,87.14,56.24,87.16,56.27,87.13Z"/>
- <path class="cls-10"
- d="M54.49,86.91c0,.16.09.28.07.31s-.26-.15-.3-.45a.06.06,0,0,1,0,0l.12.15s.07,0,.1,0Z"/>
- <path class="cls-10" d="M86,27.13l.13.2-.37.05Z"/>
- <path class="cls-10" d="M80.05,4c.16.17.21.27.18.32s-.15,0-.34,0l-.23-.06q-.14-.13-.27-.3l.47-.09Z"/>
- <path class="cls-10"
- d="M72.86,31.88a4.68,4.68,0,0,0,0,.53.32.32,0,0,1-.15-.35A.27.27,0,0,1,72.86,31.88Z"/>
- <path class="cls-10" d="M70.61,51.66l.19.36a2.64,2.64,0,0,1-.25-.29Z"/>
- <path class="cls-10" d="M70.45,48h.09a.52.52,0,0,1,0,.18A1.08,1.08,0,0,1,70.45,48Z"/>
- <path class="cls-10" d="M70.45,48h-.11C70.4,47.93,70.43,47.92,70.45,48Z"/>
- <path class="cls-10" d="M69.46,47.57a1.24,1.24,0,0,1-.2.1.11.11,0,0,1,0-.08A.51.51,0,0,1,69.46,47.57Z"/>
- <path class="cls-10"
- d="M64.81,7.55l-.3,0c0-.53,0-1,0-1.48q.14.47.24,1C64.76,7.31,64.81,7.52,64.81,7.55Z"/>
- <path class="cls-10"
- d="M42.35,10c.07.16-.15.43-.52.55l-.56.18a.12.12,0,0,1,0,0A7.84,7.84,0,0,1,42.35,10Z"/>
- <path class="cls-24" d="M26.81,34.72c0,.23,0,.47,0,.72h0c0-.13,0-.25,0-.37S26.8,34.84,26.81,34.72Z"/>
- <g class="cls-25">
- <path class="cls-24"
- d="M26.81,34.72c0,.23,0,.47,0,.72h0c0-.13,0-.25,0-.37S26.8,34.84,26.81,34.72Z"/>
- </g>
- <g class="cls-26">
- <polygon class="cls-27" points="48.26 58.07 48.27 58.06 48.27 58.07 48.26 58.07"/>
- <polygon class="cls-28" points="47.97 58.07 48.27 57.69 48.27 58.06 48.26 58.07 47.97 58.07"/>
- <polygon class="cls-29" points="47.67 58.07 48.27 57.31 48.27 57.69 47.97 58.07 47.67 58.07"/>
- <polygon class="cls-30" points="47.38 58.07 48.27 56.93 48.27 57.31 47.67 58.07 47.38 58.07"/>
- <polygon class="cls-30" points="47.09 58.07 48.27 56.56 48.27 56.93 47.38 58.07 47.09 58.07"/>
- <polygon class="cls-31"
- points="46.79 58.07 48.22 56.24 48.27 56.24 48.27 56.56 47.09 58.07 46.79 58.07"/>
- <polygon class="cls-32" points="46.5 58.07 47.93 56.24 48.22 56.24 46.79 58.07 46.5 58.07"/>
- <polygon class="cls-33" points="46.2 58.07 47.63 56.24 47.93 56.24 46.5 58.07 46.2 58.07"/>
- <polygon class="cls-34" points="45.91 58.07 47.34 56.24 47.63 56.24 46.2 58.07 45.91 58.07"/>
- <polygon class="cls-35" points="45.62 58.07 47.04 56.24 47.34 56.24 45.91 58.07 45.62 58.07"/>
- <polygon class="cls-36"
- points="45.34 58.04 46.75 56.24 47.04 56.24 45.62 58.07 45.34 58.07 45.34 58.04"/>
- <polygon class="cls-37" points="45.34 57.67 46.45 56.24 46.75 56.24 45.34 58.04 45.34 57.67"/>
- <polygon class="cls-38" points="45.34 57.29 46.16 56.24 46.45 56.24 45.34 57.67 45.34 57.29"/>
- <polygon class="cls-39" points="45.34 56.91 45.87 56.24 46.16 56.24 45.34 57.29 45.34 56.91"/>
- <polygon class="cls-40" points="45.34 56.54 45.57 56.24 45.87 56.24 45.34 56.91 45.34 56.54"/>
- <polygon class="cls-41" points="45.57 56.24 45.34 56.54 45.34 56.24 45.57 56.24"/>
- </g>
- <path class="cls-24" d="M26.79,35.08c0,.12,0,.24,0,.37h0C26.78,35.32,26.79,35.2,26.79,35.08Z"/>
- <g class="cls-25">
- <path class="cls-24" d="M26.79,35.08c0,.12,0,.24,0,.37h0C26.78,35.32,26.79,35.2,26.79,35.08Z"/>
- </g>
- <g class="cls-42">
- <polygon class="cls-43" points="26.77 35.37 26.79 35.34 26.79 35.45 26.77 35.45 26.77 35.37"/>
- <polygon class="cls-44"
- points="26.77 35.11 26.79 35.08 26.79 35.08 26.79 35.34 26.77 35.37 26.77 35.11"/>
- <polygon class="cls-45" points="26.79 35.08 26.77 35.11 26.77 35.08 26.79 35.08"/>
- </g>
- <path class="cls-46"
- d="M275.36,62.93v5.43c0,2.4-.85,3.26-3.22,3.26h-3.9V79.3c0,2.4-.84,3.25-3.21,3.25h-7.88c-2.45,0-3.22-.85-3.22-3.25V71.62H230.75c-2.37,0-3.21-.86-3.21-3.26V63.24c0-2.56.15-3.49,1.68-5.27l23.26-28.15c1.53-1.78,2.45-2.33,5-2.33H265c2.37,0,3.21.86,3.21,3.26V59.68h3.9C274.51,59.68,275.36,60.53,275.36,62.93ZM253.93,46.57,243.22,59.68h10.71Z"/>
- <path class="cls-47"
- d="M323.25,82.55h-9.79c-4,0-4.9-.23-6.35-2.87L299.84,67l-7,12.72c-1.45,2.41-2.22,2.87-6.35,2.87H277c-2.3,0-2.83-1.39-1.61-3.25l15.76-24.82-15-23.89c-1.15-1.7-.62-3.1,1.53-3.1h9.18c3.9,0,4.82.31,6.27,2.72l6.89,11.94,6.81-11.94c1.45-2.56,2.44-2.72,5.89-2.72h9.79c2.22,0,2.6,1.4,1.53,3.1L308.94,54.48l16,24.82C326.08,81,325.62,82.55,323.25,82.55Z"/>
- <path class="cls-48"
- d="M.11,22.35a23,23,0,0,0,3.52,5.58l3.76-1A45.48,45.48,0,0,1,3.51,22a2.07,2.07,0,0,1-.13-.19c0,.07.09.13.13.19a40,40,0,0,0,4,4.67,66.77,66.77,0,0,0,.74-7.1C4.6,18.05,2.55,19,2.55,19S-.62,20.07.11,22.35Z"/>
- <path class="cls-1" d="M18.54,29.78v-.05l0,.27,0,.05C18.53,30,18.54,29.87,18.54,29.78Z"/>
- <path class="cls-1" d="M24.13,33c0,.15,0,.3,0,.46C24.12,33.28,24.13,33.13,24.13,33Z"/>
- <path class="cls-1"
- d="M34.76,48.41l-.13-.09c-1-.63-1.86-1.25-2.75-1.86s-2-1.35-2.89-2-1.94-1.37-2.85-2-1.88-1.37-2.76-2c-.72-.54-1.42-1.07-2.09-1.59l-.67-.51-1.27-1-1.13-.9-.36-.29-.06,0,0,.22-.39.1.09.07,1.66,1.36,1,.78,2.75,2.15c.94.71,1.88,1.42,2.83,2.12s1.86,1.37,2.8,2,1.86,1.33,2.79,2,1.92,1.34,2.88,2l.64.44,2.27,1.52.61-.15,0-.25-.07,0Z"/>
- <polygon class="cls-1" points="24.1 33.55 24.1 33.55 24.1 33.55 24.1 33.55"/>
- <path class="cls-49" d="M26.89,34.82c0,.24,0,.48,0,.73h0c0-.12,0-.24,0-.37S26.89,34.94,26.89,34.82Z"/>
- <path class="cls-50" d="M26.89,34.82c0,.24,0,.48,0,.73h0c0-.12,0-.24,0-.37S26.89,34.94,26.89,34.82Z"/>
- <path class="cls-49" d="M24.1,33.55h0s0-.08,0-.12,0-.31,0-.46q0,.27,0,.57Z"/>
- <path class="cls-50" d="M24.1,33.55h0s0-.08,0-.12,0-.31,0-.46q0,.27,0,.57Z"/>
- <path class="cls-51"
- d="M14.85,34.17c-.89-.77-1.75-1.55-2.58-2.32s-1.7-1.61-2.5-2.41a.93.93,0,0,0-.14-.14c-.78-.8-1.53-1.58-2.24-2.37l-3.76,1,.4.52c.52.66,1.09,1.35,1.69,2.07S7.13,32.16,7.9,33s1.47,1.6,2.25,2.41,1.35,1.4,2.06,2.1a.3.3,0,0,1,.08.08l5.1-1.26C16.53,35.62,15.68,34.89,14.85,34.17Z"/>
- <path class="cls-52"
- d="M38.15,50.64l2.36,1.52,0,0,.34.22L43,53.74a4.77,4.77,0,0,1,2.46-1.27,3.82,3.82,0,0,0-2.84.61c.92-3.32.74-6.41-1.37-8.47a6.27,6.27,0,0,0-.61-.53,3.28,3.28,0,0,1,.42,3.37h0a9.2,9.2,0,0,0-2.66-5.4c-.34-.33-.71-.67-1.13-1a7.52,7.52,0,0,1,.64,7.42l-.22,1.92Z"/>
- <path class="cls-53"
- d="M34.17,48.8q-1.44-1-2.88-2c-.93-.64-1.86-1.3-2.79-2s-1.87-1.34-2.8-2-1.89-1.41-2.83-2.12l-2.75-2.15-1-.78-1.66-1.36-.09-.07-5.1,1.26.16.15c.76.74,1.53,1.49,2.33,2.23s1.63,1.48,2.47,2.21,1.43,1.23,2.16,1.83l.44.36c.93.74,1.82,1.43,2.69,2.06s1.93,1.37,2.84,2c.59.39,1.17.75,1.73,1.08l1.44.82c1.13.62,2.27,1.2,3.41,1.72l5.12-1.26-2.27-1.52Z"/>
- <path class="cls-54"
- d="M48.4,58.19a1,1,0,0,0,0-.28c-2.19-1.33-4.59-2.83-7.44-4.66l-.65-.41-.18-.12-2.42-1.58-.56-.37h0L32,52l.16.07a36.52,36.52,0,0,0,4.24,1.62l.15,0a9.33,9.33,0,0,0-2.9,2.13,13.29,13.29,0,0,1,6.58-1.22A6.11,6.11,0,0,1,39,57.5a6,6,0,0,0,2.1-2.16,7.42,7.42,0,0,0,.94,3.89,7.62,7.62,0,0,1,.19-4.31c1.7,1.08,3.26,2,5.11,3.11a1.08,1.08,0,0,1,.6,0,1.51,1.51,0,0,1,.35.17Z"/>
- <path class="cls-55"
- d="M17.86,36.07l.36.29,1.13.9,1.27,1,.67.51c.67.52,1.37,1,2.09,1.59q1.32,1,2.76,2t2.85,2c.93.66,1.89,1.33,2.89,2s1.8,1.23,2.75,1.86l.13.09,2.89,1.91.07,0,.22-1.92a.49.49,0,0,1,0,.11,13.64,13.64,0,0,0-2.37-8,18,18,0,0,0-2.82-3.22A32.33,32.33,0,0,0,29.81,35c-.94-.67-2-1.35-3.12-2a6.73,6.73,0,0,1,.2,1.89c0,.12,0,.24,0,.36s0,.25,0,.37h0a8.36,8.36,0,0,0-3.24-5.34A7.62,7.62,0,0,1,24.13,33c0,.15,0,.3,0,.46s0,.08,0,.12h0a9,9,0,0,0-.61-2.11c-.06-.13-.12-.26-.19-.39a6.42,6.42 [...]
- <path class="cls-56"
- d="M7.51,26.71c.68.71,1.46,1.49,2.35,2.35l.14.13c.77.74,1.62,1.52,2.56,2.36s1.68,1.49,2.62,2.29,1.7,1.43,2.62,2.18l.71-6a7.26,7.26,0,0,0-1.78-3.8c-.24-.27-.49-.53-.75-.8-.81-.82-1.71-1.65-2.62-2.42a30.56,30.56,0,0,0-2.57-2,15.55,15.55,0,0,0-1.43-.88c-.38-.2-.75-.37-1.11-.52A66.77,66.77,0,0,1,7.51,26.71Z"/>
- <path class="cls-49" d="M26.88,35.18c0,.13,0,.25,0,.37h0C26.87,35.43,26.88,35.31,26.88,35.18Z"/>
- <path class="cls-50" d="M26.88,35.18c0,.13,0,.25,0,.37h0C26.87,35.43,26.88,35.31,26.88,35.18Z"/>
- <path class="cls-57" d="M26.88,35.18c0,.13,0,.25,0,.37h0C26.87,35.43,26.88,35.31,26.88,35.18Z"/>
- <path class="cls-49" d="M24.1,33.56s0-.08,0-.12,0,.08,0,.12Z"/>
- <path class="cls-50" d="M24.1,33.56s0-.08,0-.12,0,.08,0,.12Z"/>
- <path class="cls-58" d="M24.1,33.56s0-.08,0-.12,0,.08,0,.12Z"/>
- <polygon class="cls-49" points="24.1 33.55 24.1 33.55 24.1 33.55 24.1 33.55 24.1 33.55 24.1 33.55"/>
- <polygon class="cls-50" points="24.1 33.55 24.1 33.55 24.1 33.55 24.1 33.55 24.1 33.55 24.1 33.55"/>
- <polygon class="cls-59" points="24.1 33.55 24.1 33.55 24.1 33.55 24.1 33.55 24.1 33.55 24.1 33.55"/>
- <path class="cls-60"
- d="M6.93,17.42l.17,0,.09-.4,1.14.26.05-.19-1.14-.26.09-.4-.17,0Zm.54-2.33.81.66-1,.25,0,.22,1.31.3,0-.17-1-.24,1-.24,0-.12-.8-.65,1,.24,0-.17-1.31-.3Z"/>
- </g>
- </g>
- </g>
-</svg>
\ No newline at end of file
diff --git a/plc4j/tools/ui/frontend/project/src/assets/react.svg b/plc4j/tools/ui/frontend/project/src/assets/react.svg
deleted file mode 100644
index d150b94..0000000
--- a/plc4j/tools/ui/frontend/project/src/assets/react.svg
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- https://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
- -->
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img"
- class="iconify iconify--logos" width="35.93" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 228">
- <path fill="#00D8FF"
- d="M210.483 73.824a171.49 171.49 0 0 0-8.24-2.597c.465-1.9.893-3.777 1.273-5.621c6.238-30.281 2.16-54.676-11.769-62.708c-13.355-7.7-35.196.329-57.254 19.526a171.23 171.23 0 0 0-6.375 5.848a155.866 155.866 0 0 0-4.241-3.917C100.759 3.829 77.587-4.822 63.673 3.233C50.33 10.957 46.379 33.89 51.995 62.588a170.974 170.974 0 0 0 1.892 8.48c-3.28.932-6.445 1.924-9.474 2.98C17.309 83.498 0 98.307 0 113.668c0 15.865 18.582 31.778 46.812 41.427a145.52 145.52 0 0 0 6.921 2.165a167.467 167 [...]
-</svg>
\ No newline at end of file
diff --git a/plc4j/tools/ui/frontend/project/src/components/DeviceDialog.tsx b/plc4j/tools/ui/frontend/project/src/components/DeviceDialog.tsx
deleted file mode 100644
index fd98a39..0000000
--- a/plc4j/tools/ui/frontend/project/src/components/DeviceDialog.tsx
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import {Device} from "../generated/plc4j-tools-ui-frontend.ts";
-import {Dialog} from "primereact/dialog";
-import {Button} from "primereact/button";
-import {InputText} from "primereact/inputtext";
-import {DataTable} from "primereact/datatable";
-import {Column, ColumnEditorOptions, ColumnEvent} from "primereact/column";
-import React from "react";
-
-interface ConnectionDialogProps {
- device: Device
- visible: boolean
-
- onUpdate: (device:Device) => void
- onSave: (device:Device) => void
- onCancel: () => void
-}
-
-interface TableEntry {
- key: string
- value: string
-}
-
-type Dictionary = { [index: string]: string }
-
-function mapToTableEntry(map : Dictionary):TableEntry[] {
- let tableEntries = [] as TableEntry[]
- for(const key in map) {
- const value = map[key]
- tableEntries = [...tableEntries, {key: key, value: value}]
- }
- return tableEntries
-}
-
-export default function DeviceDialog({device, visible, onUpdate, onSave, onCancel}: ConnectionDialogProps) {
-
- function handleSetName(value: string) {
- onUpdate({
- id: device.id,
- name: value,
- protocolCode: device.protocolCode,
- transportCode: device.transportCode,
- transportUrl: device.transportUrl,
- options: device.options,
- attributes: device.attributes,
- })
- }
-
- function handleSetProtocolCode(value: string) {
- onUpdate({
- id: device.id,
- name: device.name,
- protocolCode: value,
- transportCode: device.transportCode,
- transportUrl: device.transportUrl,
- options: device.options,
- attributes: device.attributes,
- })
- }
-
- function handleSetTransportCode(value: string) {
- onUpdate({
- id: device.id,
- name: device.name,
- protocolCode: device.protocolCode,
- transportCode: value,
- transportUrl: device.transportUrl,
- options: device.options,
- attributes: device.attributes,
- })
- }
-
- function handleSetTransportUrl(value: string) {
- onUpdate({
- id: device.id,
- name: device.name,
- protocolCode: device.protocolCode,
- transportCode: device.transportCode,
- transportUrl: value,
- options: device.options,
- attributes: device.attributes,
- })
- }
-
- function handleSave() {
- onSave(device)
- }
- function handleCancel() {
- onCancel()
- }
-
- const onCellEditComplete = (e: ColumnEvent) => {
- const { rowData, newValue, field, originalEvent: event } = e;
-
- if (newValue.trim().length > 0) {
- rowData[field] = newValue;
- } else {
- event.preventDefault();
- }
- };
-
- const cellEditor = (options: ColumnEditorOptions) => {
- return textEditor(options);
- };
-
- const textEditor = (options: ColumnEditorOptions) => {
- return <InputText type="text" value={options.value} onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
- if(options.editorCallback) {
- options.editorCallback(e.target.value)
- }
- }} />;
- };
-
- return (
- <Dialog visible={visible} modal style={{width: '60rem'}} draggable={true} resizable={true} onHide={() => handleCancel()}>
- <div className="formgrid grid">
- <label htmlFor="name" className="col-12 mb-2 md:col-2 md:mb-0">Device Name</label>
- <div className="col-12 md:col-10">
- <InputText id="name" value={device.name} onChange={(e) => handleSetName(e.target.value)}/>
- </div>
- </div>
- <div className="formgrid grid">
- <label htmlFor="protocol" className="col-12 mb-2 md:col-2 md:mb-0">Protocol</label>
- <div className="col-12 md:col-10">
- <InputText id="protocol" value={device.protocolCode} onChange={(e) => handleSetProtocolCode(e.target.value)}/>
- </div>
- </div>
- <div className="formgrid grid">
- <label htmlFor="transportCode" className="col-12 mb-2 md:col-2 md:mb-0">Transport Type</label>
- <div className="col-12 md:col-10">
- <InputText id="transportCode" value={device.transportCode} onChange={(e) => handleSetTransportCode(e.target.value)}/>
- </div>
- </div>
- <div className="formgrid grid">
- <label htmlFor="transportUrl" className="col-12 mb-2 md:col-2 md:mb-0">Transport URL</label>
- <div className="col-12 md:col-10">
- <InputText id="transportUrl" value={device.transportUrl} onChange={(e) => handleSetTransportUrl(e.target.value)}/>
- </div>
- </div>
- <div className="formgrid grid">
- <label htmlFor="options" className="col-12 mb-2 md:col-2 md:mb-0">Options</label>
- <div className="col-12 md:col-10">
- <DataTable id="options" value={mapToTableEntry(device.options)} tableStyle={{minWidth: '50rem'}}>
- <Column field="key" header="Name"/>
- <Column key="value" field="value" header="Value" editor={(options) => cellEditor(options)} onCellEditComplete={onCellEditComplete}/>
- </DataTable>
- </div>
- </div>
- <div className="formgrid grid">
- <label htmlFor="attributes" className="col-12 mb-2 md:col-2 md:mb-0">Attributes</label>
- <div className="col-12 md:col-10">
- <DataTable id="attributes" value={mapToTableEntry(device.attributes)} tableStyle={{minWidth: '50rem'}}>
- <Column field="key" header="Name"/>
- <Column key="value" field="value" header="Value" editor={(options) => cellEditor(options)} onCellEditComplete={onCellEditComplete}/>
- </DataTable>
- </div>
- </div>
- <div className="formgrid grid">
- <div className="field col">
- <Button label={"Save"} onClick={handleSave}/>
- <Button label={"Cancel"} onClick={handleCancel}/>
- </div>
- </div>
- </Dialog>
- )
-}
\ No newline at end of file
diff --git a/plc4j/tools/ui/frontend/project/src/components/NavigationTree.tsx b/plc4j/tools/ui/frontend/project/src/components/NavigationTree.tsx
deleted file mode 100644
index fdd6c8b..0000000
--- a/plc4j/tools/ui/frontend/project/src/components/NavigationTree.tsx
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import {TreeItemData} from "../model/TreeItemData.ts";
-import {Tree} from "primereact/tree";
-import {TreeNode} from "primereact/treenode";
-import {IconType} from "primereact/utils";
-import 'primeicons/primeicons.css';
-import {useRef, useState} from "react";
-import {ContextMenu} from "primereact/contextmenu";
-import {MenuItem} from "primereact/menuitem";
-import {Device, RestApplicationClient} from "../generated/plc4j-tools-ui-frontend.ts";
-import axios from "axios";
-import {Counter} from "../utils/Counter.ts";
-import DeviceDialog from "./DeviceDialog.tsx";
-import {confirmDialog, ConfirmDialog} from "primereact/confirmdialog";
-
-type NavigationTreeProps = {
- treeItems: TreeItemData[];
-}
-
-const restClient = new RestApplicationClient(axios);
-
-export default function NavigationTree({treeItems}: NavigationTreeProps) {
- const [dialogDevice, setDialogDevice] = useState<Device>({
- id: 0,
- name: "",
- protocolCode: "",
- transportCode: "",
- transportUrl: "",
- options: {},
- attributes: {},
- })
- const [showDeviceDialog, setShowDeviceDialog] = useState(false)
-
- const cm = useRef<ContextMenu>(null);
- const menu = [
- {
- key: "1",
- label: 'Discover',
- data: "discover-data",
- icon: 'pi pi-search',
- disabled: false,
- } as MenuItem,
- {
- key: "2",
- label: 'Add',
- data: "add-data",
- icon: 'pi pi-plus-circle',
- disabled: false,
- } as MenuItem,
- {
- key: "3",
- label: 'Edit',
- data: "edit-data",
- icon: 'pi pi-pencil',
- disabled: false,
- } as MenuItem,
- {
- key: "4",
- label: 'Delete',
- data: "delete-data",
- icon: 'pi pi-minus-circle',
- disabled: false,
- } as MenuItem,
- {
- key: "5",
- label: 'Connect',
- data: "connect-data",
- icon: 'pi pi-phone',
- disabled: false,
- } as MenuItem
- ] as MenuItem[]
-
- function updateMenu(selectedItem: TreeItemData) {
- // Discover
- menu[0].disabled = !selectedItem.supportsDiscovery && selectedItem.type != "ROOT"
- menu[0].command = () => {
- restClient.discover(selectedItem.id)
- }
-
- // Add
- menu[1].disabled = selectedItem.type != "DRIVER"
- menu[1].command = () => {
- dialogDevice.id = 0;
- dialogDevice.name = "";
- dialogDevice.transportCode = "";
- dialogDevice.transportUrl = "";
- dialogDevice.protocolCode = selectedItem.id;
- dialogDevice.options = {};
- dialogDevice.attributes = {};
- setShowDeviceDialog(true);
- }
-
- // Edit
- menu[2].disabled = selectedItem.type != "DEVICE"
- menu[2].command = () => {
- if(selectedItem.device) {
- dialogDevice.id = selectedItem.device.id;
- dialogDevice.name = selectedItem.device.name;
- dialogDevice.transportCode = selectedItem.device.transportCode;
- dialogDevice.transportUrl = selectedItem.device.transportUrl;
- dialogDevice.protocolCode = selectedItem.device.protocolCode;
- dialogDevice.options = selectedItem.device.options;
- dialogDevice.attributes = selectedItem.device.attributes;
- setShowDeviceDialog(true);
- }
- }
- // Delete
- menu[3].disabled = selectedItem.type != "DEVICE"
- menu[3].command = () => {
- if(selectedItem.device) {
- dialogDevice.id = selectedItem.device.id;
- dialogDevice.name = selectedItem.device.name;
- dialogDevice.transportCode = selectedItem.device.transportCode;
- dialogDevice.transportUrl = selectedItem.device.transportUrl;
- dialogDevice.protocolCode = selectedItem.device.protocolCode;
- dialogDevice.options = selectedItem.device.options;
- dialogDevice.attributes = selectedItem.device.attributes;
- confirmDelete()
- }
- }
- // Connect
- menu[4].disabled = selectedItem.type != "DEVICE"
- menu[4].command = () => {
- // TODO: Open a new tab with the connection ...
- }
- }
-
- function getIcon(curItem: TreeItemData): IconType<TreeNode> {
- switch (curItem.type) {
- case "DRIVER":
- return "pi pi-fw pi-folder-open"//"material-icons md-18 folder_open"
- case "CONNECTION":
- return "pi pi-fw pi-phone"//"material-icons md-18 tty"
- case "DEVICE":
- return "pi pi-fw"//"material-icons md-18 computer"
-
- // discover: "Radar"
- // browse: "Manage Search"
- // read: "Keyboard Arrow Down"
- // write: "Keyboard Arrow Up"
- // subscribe: "Keyboard Double Arrow Down"
- // publish: "Keyboard Double Arrow Up"
- }
- }
-
- function createTreeNode(curItem: TreeItemData, keyGenerator: Counter): TreeNode {
- return {
- key: keyGenerator.getAndIncrement(),
- id: curItem.id,
- label: curItem.name,
- icon: getIcon(curItem),
- data: curItem,
- children: curItem.children?.map(value => createTreeNode(value, keyGenerator))
- }
- }
-
- const confirmDeleteAccept = () => {
- restClient.deleteDevice(dialogDevice)
- }
-
- const confirmDeleteReject = () => {
- }
-
- function confirmDelete() {
- confirmDialog({
- message: 'Do you want to delete this record?',
- header: 'Delete Confirmation',
- icon: 'pi pi-info-circle',
- acceptClassName: 'p-button-danger',
- accept: confirmDeleteAccept,
- reject: confirmDeleteReject
- });
- }
-
- const treeNodes: TreeNode[] = treeItems.map(value => createTreeNode(value, new Counter()))
- return (
- <div>
- <DeviceDialog device={dialogDevice} visible={showDeviceDialog}
- onUpdate={device => {
- setDialogDevice(device)
- }}
- onSave={device => {
- restClient.saveDevice(device).then(value => {
- if(value.status == 200) {
- setShowDeviceDialog(false)
- }
- })
- }}
- onCancel={() => setShowDeviceDialog(false)} />
- <ConfirmDialog />
- <ContextMenu model={menu} ref={cm}/>
- <Tree value={treeNodes}
- selectionMode="single"
- onContextMenu={event => {
- if (cm.current) {
- // Update the state of the menu (enabling/disabling some menu items)
- updateMenu(event.node.data as TreeItemData)
- //cm.current.props.model = menu
- cm.current.show(event.originalEvent);
- }
- }}/>
- </div>)
-}
\ No newline at end of file
diff --git a/plc4j/tools/ui/frontend/project/src/components/PlcConnection.tsx b/plc4j/tools/ui/frontend/project/src/components/PlcConnection.tsx
deleted file mode 100644
index 5ea8e82..0000000
--- a/plc4j/tools/ui/frontend/project/src/components/PlcConnection.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import 'primeicons/primeicons.css';
-import {TabPanel} from "primereact/tabview";
-import {TreeTable} from "primereact/treetable";
-import {Column} from "primereact/column";
-
-type PlcConnectionProps = {
- connectionString: string;
-}
-
-export default function PlcConnection({connectionString}: PlcConnectionProps) {
- return (
- <TabPanel key={connectionString} header={connectionString} closable={true} contentClassName="h-full">
- <TreeTable>
- <Column field="name" header="Name" expander/>
- <Column field="dataType" header="Datatype"/>
- <Column field="size" header="Size"/>
- <Column field="readable" header="Readable"/>
- <Column field="writable" header="Writable"/>
- <Column field="subscribable" header="Subscribable"/>
- <Column field="publishable" header="Publishable"/>
- <Column field="value" header="Value"/>
- <Column field="setValue" header="Set Value"/>
- </TreeTable>
- </TabPanel>
- )
-}
\ No newline at end of file
diff --git a/plc4j/tools/ui/frontend/project/src/generated/plc4j-tools-ui-frontend.ts b/plc4j/tools/ui/frontend/project/src/generated/plc4j-tools-ui-frontend.ts
deleted file mode 100644
index 823a36d..0000000
--- a/plc4j/tools/ui/frontend/project/src/generated/plc4j-tools-ui-frontend.ts
+++ /dev/null
@@ -1,209 +0,0 @@
-/*-
- * #%L
- * PLC4J: Tools: Frontend
- * %%
- * Copyright (C) 2017 - 2024 The Apache Software Foundation
- * %%
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * #L%
- */
-/* tslint:disable */
-/* eslint-disable */
-
-export interface Device {
- id: number;
- name: string;
- protocolCode: string;
- transportCode: string;
- transportUrl: string;
- options: { [index: string]: string };
- attributes: { [index: string]: string };
-}
-
-export interface Driver {
- code: string;
- name: string;
- metadata: PlcDriverMetadata;
-}
-
-export interface UiApplicationEvent<T> extends ApplicationEvent {
- source: T;
- eventType: EventType;
-}
-
-export interface DeviceEvent extends UiApplicationEvent<Device> {
- source: Device;
-}
-
-export interface PlcDriverMetadata {
- discoverySupported: boolean;
- protocolConfigurationOptionMetadata?: OptionMetadata;
- defaultTransportCode?: string;
- supportedTransportCodes: string[];
-}
-
-export interface ApplicationEvent extends EventObject {
- timestamp: number;
-}
-
-export interface OptionMetadata {
- options: Option[];
- requiredOptions: Option[];
-}
-
-export interface EventObject extends Serializable {
- source: any;
-}
-
-export interface Option {
- key: string;
- type: OptionType;
- defaultValue?: any;
- required: boolean;
- description: string;
- since?: string;
-}
-
-export interface Serializable {
-}
-
-export interface HttpClient<O> {
-
- request<R>(requestConfig: { method: string; url: string; queryParams?: any; data?: any; copyFn?: (data: R) => R; options?: O; }): RestResponse<R>;
-}
-
-export class RestApplicationClient<O> {
-
- constructor(protected httpClient: HttpClient<O>) {
- }
-
- /**
- * HTTP DELETE /api/devices
- * Java method: org.apache.plc4x.java.tools.ui.controller.DeviceController.deleteDevice
- */
- deleteDevice(arg0: Device, options?: O): RestResponse<void> {
- return this.httpClient.request({ method: "DELETE", url: uriEncoding`api/devices`, data: arg0, options: options });
- }
-
- /**
- * HTTP GET /api/devices
- * Java method: org.apache.plc4x.java.tools.ui.controller.DeviceController.getAllDevices
- */
- getAllDevices(options?: O): RestResponse<Device[]> {
- return this.httpClient.request({ method: "GET", url: uriEncoding`api/devices`, options: options });
- }
-
- /**
- * HTTP POST /api/devices
- * Java method: org.apache.plc4x.java.tools.ui.controller.DeviceController.saveDevice
- */
- saveDevice(arg0: Device, options?: O): RestResponse<Device> {
- return this.httpClient.request({ method: "POST", url: uriEncoding`api/devices`, data: arg0, options: options });
- }
-
- /**
- * HTTP GET /api/devices/{id}
- * Java method: org.apache.plc4x.java.tools.ui.controller.DeviceController.getDeviceById
- */
- getDeviceById(id: string, options?: O): RestResponse<Device> {
- return this.httpClient.request({ method: "GET", url: uriEncoding`api/devices/${id}`, options: options });
- }
-
- /**
- * HTTP GET /api/discover/{protocolCode}
- * Java method: org.apache.plc4x.java.tools.ui.controller.DriverController.discover
- */
- discover(protocolCode: string, options?: O): RestResponse<void> {
- return this.httpClient.request({ method: "GET", url: uriEncoding`api/discover/${protocolCode}`, options: options });
- }
-
- /**
- * HTTP GET /api/drivers
- * Java method: org.apache.plc4x.java.tools.ui.controller.DriverController.getAllDrivers
- */
- getAllDrivers(options?: O): RestResponse<Driver[]> {
- return this.httpClient.request({ method: "GET", url: uriEncoding`api/drivers`, options: options });
- }
-}
-
-export type RestResponse<R> = Promise<Axios.GenericAxiosResponse<R>>;
-
-export type EventType = "CREATED" | "UPDATED" | "DELETED";
-
-export type OptionType = "BOOLEAN" | "INT" | "LONG" | "FLOAT" | "DOUBLE" | "STRING" | "STRUCT";
-
-function uriEncoding(template: TemplateStringsArray, ...substitutions: any[]): string {
- let result = "";
- for (let i = 0; i < substitutions.length; i++) {
- result += template[i];
- result += encodeURIComponent(substitutions[i]);
- }
- result += template[template.length - 1];
- return result;
-}
-
-
-// Added by 'AxiosClientExtension' extension
-
-import axios from "axios";
-import * as Axios from "axios";
-
-declare module "axios" {
- export interface GenericAxiosResponse<R> extends Axios.AxiosResponse {
- data: R;
- }
-}
-
-class AxiosHttpClient implements HttpClient<Axios.AxiosRequestConfig> {
-
- constructor(private axios: Axios.AxiosInstance) {
- }
-
- request<R>(requestConfig: { method: string; url: string; queryParams?: any; data?: any; copyFn?: (data: R) => R; options?: Axios.AxiosRequestConfig; }): RestResponse<R> {
- function assign(target: any, source?: any) {
- if (source != undefined) {
- for (const key in source) {
- if (source.hasOwnProperty(key)) {
- target[key] = source[key];
- }
- }
- }
- return target;
- }
-
- const config: Axios.AxiosRequestConfig = {};
- config.method = requestConfig.method as typeof config.method; // `string` in axios 0.16.0, `Method` in axios 0.19.0
- config.url = requestConfig.url;
- config.params = requestConfig.queryParams;
- config.data = requestConfig.data;
- assign(config, requestConfig.options);
- const copyFn = requestConfig.copyFn;
-
- const axiosResponse = this.axios.request(config);
- return axiosResponse.then(axiosResponse => {
- if (copyFn && axiosResponse.data) {
- (axiosResponse as any).originalData = axiosResponse.data;
- axiosResponse.data = copyFn(axiosResponse.data);
- }
- return axiosResponse;
- });
- }
-}
-
-export class AxiosRestApplicationClient extends RestApplicationClient<Axios.AxiosRequestConfig> {
-
- constructor(baseURL: string, axiosInstance: Axios.AxiosInstance = axios.create()) {
- axiosInstance.defaults.baseURL = baseURL;
- super(new AxiosHttpClient(axiosInstance));
- }
-}
diff --git a/plc4j/tools/ui/frontend/project/src/index.css b/plc4j/tools/ui/frontend/project/src/index.css
deleted file mode 100644
index 606f994..0000000
--- a/plc4j/tools/ui/frontend/project/src/index.css
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#root {
- height:100%;
- width:100%!important;
- background-color: gray;
-}
-
-:root {
- font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
- line-height: 1.5;
- font-weight: 400;
-
- color-scheme: light dark;
- color: rgba(255, 255, 255, 0.87);
- background-color: #242424;
-
- font-synthesis: none;
- text-rendering: optimizeLegibility;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-a {
- font-weight: 500;
- color: #646cff;
- text-decoration: inherit;
-}
-
-a:hover {
- color: #535bf2;
-}
-
-html {
- height: 100%;
-}
-
-body {
- margin: 0;
- display: flex;
- place-items: center;
- height:100%
-}
-
-h1 {
- font-size: 3.2em;
- line-height: 1.1;
-}
-
-button {
- border-radius: 8px;
- border: 1px solid transparent;
- padding: 0.6em 1.2em;
- font-size: 1em;
- font-weight: 500;
- font-family: inherit;
- background-color: #1a1a1a;
- cursor: pointer;
- transition: border-color 0.25s;
-}
-
-button:hover {
- border-color: #646cff;
-}
-
-button:focus,
-button:focus-visible {
- outline: 4px auto -webkit-focus-ring-color;
-}
-
-@media (prefers-color-scheme: light) {
- :root {
- color: #213547;
- background-color: #ffffff;
- }
-
- a:hover {
- color: #747bff;
- }
-
- button {
- background-color: #f9f9f9;
- }
-}
-
diff --git a/plc4j/tools/ui/frontend/project/src/layouts/MainLayout.tsx b/plc4j/tools/ui/frontend/project/src/layouts/MainLayout.tsx
deleted file mode 100644
index 59786cb..0000000
--- a/plc4j/tools/ui/frontend/project/src/layouts/MainLayout.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-import {Menubar} from "primereact/menubar";
-import {MenuItem} from "primereact/menuitem";
-import plc4xLogo from "../assets/plc4x-logo.svg";
-import {Image} from "primereact/image";
-import {Outlet, useNavigate} from "react-router-dom";
-
-export default function MainLayout() {
- const navigate = useNavigate();
-
- const menuItems = [
- {
- label: 'Inspect',
- command() {
- navigate('/inspect');
- }
- },
- {
- label: 'OPC-UA Server',
- command() {
- navigate('/opcua');
- }
- },
- {
- label: 'MQTT Emitter',
- command() {
- navigate('/mqtt');
- }
- },
- {
- label: 'Settings',
- command() {
- navigate('/settings');
- }
- },
- {
- label: 'About',
- command() {
- navigate('/about');
- }
- }
- ] as MenuItem[];
-
- const startLogo = <Image src={plc4xLogo} width="200px" className="m-3"/>;
-
- return (
- <>
- <nav>
- <Menubar className="flex w-12" model={menuItems} start={startLogo}/>
- </nav>
- <main className="h-full" style={{paddingTop: "10px"}}>
- <Outlet/>
- </main>
- </>
- )
-}
\ No newline at end of file
diff --git a/plc4j/tools/ui/frontend/project/src/main.tsx b/plc4j/tools/ui/frontend/project/src/main.tsx
deleted file mode 100644
index b9783a9..0000000
--- a/plc4j/tools/ui/frontend/project/src/main.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import React from 'react'
-import ReactDOM from 'react-dom/client'
-import App from './App.tsx'
-import './index.css'
-import 'primereact/resources/themes/lara-light-indigo/theme.css';
-import 'primeicons/primeicons.css';
-import 'primereact/resources/primereact.css';
-import 'primeflex/primeflex.css'
-import { Provider } from "react-redux";
-import store from "./store";
-
-ReactDOM.createRoot(document.getElementById('root')!).render(
- <React.StrictMode>
- <Provider store={store}>
- <App/>
- </Provider>
- </React.StrictMode>,
-)
diff --git a/plc4j/tools/ui/frontend/project/src/model/TreeItemData.ts b/plc4j/tools/ui/frontend/project/src/model/TreeItemData.ts
deleted file mode 100644
index 4a661ff..0000000
--- a/plc4j/tools/ui/frontend/project/src/model/TreeItemData.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import {Device, Driver} from "../generated/plc4j-tools-ui-frontend.ts";
-
-export type TreeItemType = "ROOT" | "DRIVER" | "CONNECTION" | "DEVICE";
-
-export interface TreeItemData {
- id: string,
- name: string,
- type: TreeItemType,
- driver?: Driver,
- device?: Device,
- supportsDiscovery: boolean,
- supportsBrowsing: boolean,
- supportsReading: boolean,
- supportsWriting: boolean,
- supportsSubscribing: boolean,
- supportsPublishing: boolean,
- children?: readonly TreeItemData[]
-}
diff --git a/plc4j/tools/ui/frontend/project/src/pages/About.tsx b/plc4j/tools/ui/frontend/project/src/pages/About.tsx
deleted file mode 100644
index 5fc9157..0000000
--- a/plc4j/tools/ui/frontend/project/src/pages/About.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-export default function Inspect() {
- return (
- <p>Settings</p>
- )
-}
diff --git a/plc4j/tools/ui/frontend/project/src/pages/Inspect.tsx b/plc4j/tools/ui/frontend/project/src/pages/Inspect.tsx
deleted file mode 100644
index ab1de31..0000000
--- a/plc4j/tools/ui/frontend/project/src/pages/Inspect.tsx
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-import {TabPanel, TabView} from "primereact/tabview";
-import {Splitter, SplitterPanel} from "primereact/splitter";
-import {ScrollPanel} from "primereact/scrollpanel";
-import NavigationTree from "../components/NavigationTree.tsx";
-import PlcConnection from "../components/PlcConnection.tsx";
-import { useSelector } from "react-redux";
-import {Device, Driver} from "../generated/plc4j-tools-ui-frontend.ts";
-import {TreeItemData} from "../model/TreeItemData.ts";
-import {RootState} from "../store";
-
-function getByDriverTree(driverList: Driver[], deviceList: Device[]):TreeItemData[] {
- console.log("getByDriverTree " + JSON.stringify(driverList) + " " + JSON.stringify(deviceList))
- if(driverList && deviceList) {
- const driverMap = new Map<string, TreeItemData>()
- let drivers:TreeItemData[] = []
- driverList.forEach(value => {
- const driverEntry:TreeItemData = {
- id: value.code,
- name: value.name,
- type: "DRIVER",
- driver: value,
- supportsDiscovery: value.metadata.discoverySupported,
- supportsBrowsing: false,
- supportsReading: false,
- supportsWriting: false,
- supportsSubscribing: false,
- supportsPublishing: false,
- children: []
- }
- driverMap.set(value.code, driverEntry)
- drivers = [...drivers, driverEntry]
- })
- drivers.sort((a,b) => (a.name > b.name) ? 1 : ((b.name > a.name) ? -1 : 0))
-
- deviceList.forEach(value => {
- const curDriverTreeItem = driverMap.get(value.protocolCode);
- if(curDriverTreeItem && curDriverTreeItem.children) {
- curDriverTreeItem.children = [...curDriverTreeItem.children, {
- id: value.id?.toString(),
- name: value.name,
- type: "DEVICE",
- device: value,
- // Even if most connections will support reading/writing, in order to really know, we need a
- // connection first. As we're not offering any connection-actions here anyway we just set all
- // to false.
- supportsDiscovery: false,
- supportsBrowsing: false,
- supportsReading: false,
- supportsWriting: false,
- supportsSubscribing: false,
- supportsPublishing: false} as TreeItemData
- ]
- }
- })
-
- return [{
- id: "all",
- name: "Root",
- type: "ROOT",
- supportsDiscovery: true,
- supportsBrowsing: false,
- supportsReading: false,
- supportsWriting: false,
- supportsSubscribing: false,
- supportsPublishing: false,
- children: drivers
- }]
- }
- return []
-}
-
-function getByDeviceTree(deviceList: Device[]):TreeItemData[] {
- console.log("getByDeviceTree " + JSON.stringify(deviceList))
- if(deviceList) {
- // Group the connections by transport-url.
- // TODO: Possibly create filters for the different types of urls (IP, Hostname, Port, Mac-Address, ...)
- const deviceMap = new Map<string, Device[]>
- deviceList.forEach(device => {
- const devices = deviceMap.get(device.transportUrl)
- if(devices) {
- deviceMap.set(device.transportUrl, [...devices, device])
- } else {
- deviceMap.set(device.transportUrl, [device])
- }
- })
-
- // Build a tree based on the grouped locations.
- }
- return []
-}
-
-export default function Inspect() {
- const lists = useSelector((state: RootState) => {
- console.log("Updated connections " + JSON.stringify(state.connections))
- return state.connections
- })
- return (
- <Splitter className="h-full">
- <SplitterPanel
- size={16} minSize={1}
- className="flex align-items-center justify-content-center">
- <TabView style={{width: '100%', height:'100%'}}>
- <TabPanel header="By Driver" className="m-0">
- <ScrollPanel style={{width: '100%', height:'100%'}} className="h-full">
- <NavigationTree treeItems={getByDriverTree(lists.driverList, lists.deviceList)}/>
- </ScrollPanel>
- </TabPanel>
- <TabPanel header="By Device">
- <ScrollPanel style={{width: '100%', height:'100%'}}>
- <NavigationTree treeItems={getByDeviceTree(lists.deviceList)}/>
- </ScrollPanel>
- </TabPanel>
- </TabView>
- </SplitterPanel>
- <SplitterPanel size={84} className="flex align-items-center justify-content-center">
- <TabView className="h-full w-full" panelContainerClassName="h-full">
- <PlcConnection connectionString={"ads://192.168.23.20"}/>
- </TabView>
- </SplitterPanel>
- </Splitter>
- )
-}
diff --git a/plc4j/tools/ui/frontend/project/src/pages/Mqtt.tsx b/plc4j/tools/ui/frontend/project/src/pages/Mqtt.tsx
deleted file mode 100644
index a72ab04..0000000
--- a/plc4j/tools/ui/frontend/project/src/pages/Mqtt.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-export default function Inspect() {
- return (
- <p>MQTT</p>
- )
-}
diff --git a/plc4j/tools/ui/frontend/project/src/pages/OpcUa.tsx b/plc4j/tools/ui/frontend/project/src/pages/OpcUa.tsx
deleted file mode 100644
index 24d7947..0000000
--- a/plc4j/tools/ui/frontend/project/src/pages/OpcUa.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-export default function Inspect() {
- return (
- <p>OPC-UA</p>
- )
-}
diff --git a/plc4j/tools/ui/frontend/project/src/pages/Settings.tsx b/plc4j/tools/ui/frontend/project/src/pages/Settings.tsx
deleted file mode 100644
index 5fc9157..0000000
--- a/plc4j/tools/ui/frontend/project/src/pages/Settings.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-export default function Inspect() {
- return (
- <p>Settings</p>
- )
-}
diff --git a/plc4j/tools/ui/frontend/project/src/store/index.ts b/plc4j/tools/ui/frontend/project/src/store/index.ts
deleted file mode 100644
index 466e3eb..0000000
--- a/plc4j/tools/ui/frontend/project/src/store/index.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import {configureStore, createSlice, PayloadAction} from '@reduxjs/toolkit'
-import {Device, Driver} from "../generated/plc4j-tools-ui-frontend.ts";
-import {useDispatch} from "react-redux";
-
-export type InitializeConnectionsAction = {
- driverList: Driver[]
- deviceList: Device[]
-}
-
-export type DeviceAction = {
- device: Device
-}
-
-export interface ConnectionsState {
- driverList: Driver[]
- deviceList: Device[]
-}
-
-const connectionsInitialState: ConnectionsState = {
- driverList: [] as Driver[],
- deviceList: [] as Device[],
-}
-
-const connectionsSlice = createSlice({
- name: 'connections',
- initialState: connectionsInitialState,
- reducers: {
- initializeLists: (state, action: PayloadAction<InitializeConnectionsAction>) => {
- state.driverList = action.payload.driverList
- state.deviceList = action.payload.deviceList
- },
- addDevice: (state, action: PayloadAction<DeviceAction>) => {
- console.log("ADD " + JSON.stringify(action))
- state.deviceList = [...state.deviceList, action.payload.device]
- },
- updateDevice: (state, action: PayloadAction<DeviceAction>) => {
- console.log("UPDATE " + JSON.stringify(action))
- const device = state.deviceList.find(value => value.id == action.payload.device.id);
- if (device) {
- const index = state.deviceList.indexOf(device);
- if (index) {
- state.deviceList.splice(index, 1, action.payload.device);
- }
- }
- },
- deleteDevice: (state, action: PayloadAction<DeviceAction>) => {
- console.log("DELETE " + JSON.stringify(action))
- const device = state.deviceList.find(value => value.id == action.payload.device.id);
- if (device) {
- const index = state.deviceList.indexOf(device);
- if (index) {
- state.deviceList.splice(index, 1);
- }
- }
- }
- }
-})
-
-export const { initializeLists, addDevice, updateDevice, deleteDevice } = connectionsSlice.actions
-
-const store = configureStore({
- reducer: {
- connections: connectionsSlice.reducer
- }
-})
-export default store
-
-// Infer the `RootState` and `AppDispatch` types from the store itself
-export type RootState = ReturnType<typeof store.getState>
-// Inferred type: {connections: ConnectionsState}
-export type AppDispatch = typeof store.dispatch
-export const useAppDispatch: () => AppDispatch = useDispatch
diff --git a/plc4j/tools/ui/frontend/project/src/utils/Counter.ts b/plc4j/tools/ui/frontend/project/src/utils/Counter.ts
deleted file mode 100644
index fb4e405..0000000
--- a/plc4j/tools/ui/frontend/project/src/utils/Counter.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-export class Counter {
-
- private _value:number = 0;
-
- public getAndIncrement():number {
- return this._value++
- }
-
-}
diff --git a/plc4j/tools/ui/frontend/project/src/vite-env.d.ts b/plc4j/tools/ui/frontend/project/src/vite-env.d.ts
deleted file mode 100644
index bd74b67..0000000
--- a/plc4j/tools/ui/frontend/project/src/vite-env.d.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/// <reference types="vite/client" />
diff --git a/plc4j/tools/ui/frontend/project/tsconfig.json b/plc4j/tools/ui/frontend/project/tsconfig.json
deleted file mode 100644
index a7fc6fb..0000000
--- a/plc4j/tools/ui/frontend/project/tsconfig.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "compilerOptions": {
- "target": "ES2020",
- "useDefineForClassFields": true,
- "lib": ["ES2020", "DOM", "DOM.Iterable"],
- "module": "ESNext",
- "skipLibCheck": true,
-
- /* Bundler mode */
- "moduleResolution": "bundler",
- "allowImportingTsExtensions": true,
- "resolveJsonModule": true,
- "isolatedModules": true,
- "noEmit": true,
- "jsx": "react-jsx",
-
- /* Linting */
- "strict": true,
- "noUnusedLocals": true,
- "noUnusedParameters": true,
- "noFallthroughCasesInSwitch": true
- },
- "include": ["src"],
- "references": [{ "path": "./tsconfig.node.json" }]
-}
diff --git a/plc4j/tools/ui/frontend/project/tsconfig.node.json b/plc4j/tools/ui/frontend/project/tsconfig.node.json
deleted file mode 100644
index 42872c5..0000000
--- a/plc4j/tools/ui/frontend/project/tsconfig.node.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "compilerOptions": {
- "composite": true,
- "skipLibCheck": true,
- "module": "ESNext",
- "moduleResolution": "bundler",
- "allowSyntheticDefaultImports": true
- },
- "include": ["vite.config.ts"]
-}
diff --git a/plc4j/tools/ui/frontend/project/vite.config.ts b/plc4j/tools/ui/frontend/project/vite.config.ts
deleted file mode 100644
index d81562b..0000000
--- a/plc4j/tools/ui/frontend/project/vite.config.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import { defineConfig } from 'vite'
-import react from '@vitejs/plugin-react'
-
-// https://vitejs.dev/config/
-export default defineConfig({
- plugins: [react()],
-})
diff --git a/plc4j/tools/ui/plc4j-tools-ui.iml b/plc4j/tools/ui/plc4j-tools-ui.iml
deleted file mode 100644
index 30466db..0000000
--- a/plc4j/tools/ui/plc4j-tools-ui.iml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module version="4">
- <component name="AdditionalModuleElements">
- <content url="file://$MODULE_DIR$" dumb="true">
- <excludeFolder url="file://$MODULE_DIR$/target" />
- </content>
- </component>
-</module>
\ No newline at end of file
diff --git a/plc4j/tools/ui/pom.xml b/plc4j/tools/ui/pom.xml
deleted file mode 100644
index 11c07b9..0000000
--- a/plc4j/tools/ui/pom.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- https://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
- -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.apache.plc4x</groupId>
- <artifactId>plc4j-tools</artifactId>
- <version>0.14.0-SNAPSHOT</version>
- </parent>
-
- <artifactId>plc4j-tools-ui</artifactId>
- <packaging>pom</packaging>
-
- <name>PLC4J: Tools: UI</name>
- <description>Parent for the UI project, bundling the backend and the frontend part together.</description>
-
- <properties>
- <project.build.outputTimestamp>2024-02-16T14:53:02Z</project.build.outputTimestamp>
- <spring-boot.version>3.2.5</spring-boot.version>
- <!--
- This dependency is the reason we need at least Java 19 for the UI (otherwise 17 would have been enough)
- unfortunately the version 16 branch is vulnerable to a critical security vulnerability.
- -->
- <derby.version>10.17.1.0</derby.version>
- </properties>
-
- <modules>
- <module>application</module>
- <module>backend</module>
- <module>frontend</module>
- </modules>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-enforcer-plugin</artifactId>
- <executions>
- <!--
- Increase the minimum Java version to Java 19, as this is a UI tool and made to run on its own
- It therefore doesn't make much sense to stick to old version of libraries.
- -->
- <execution>
- <id>enforce-java-compatability</id>
- <goals>
- <goal>enforce</goal>
- </goals>
- <configuration>
- <rules>
- <enforceBytecodeVersion>
- <maxJdkVersion>19</maxJdkVersion>
- </enforceBytecodeVersion>
- </rules>
- </configuration>
- </execution>
- </executions>
- <dependencies>
- <dependency>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>extra-enforcer-rules</artifactId>
- <version>1.8.0</version>
- </dependency>
- </dependencies>
- </plugin>
- </plugins>
- </build>
-
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-dependencies</artifactId>
- <version>${spring-boot.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
-
- <dependency>
- <groupId>org.apache.derby</groupId>
- <artifactId>derby</artifactId>
- <version>${derby.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.derby</groupId>
- <artifactId>derbytools</artifactId>
- <version>${derby.version}</version>
- </dependency>
- <dependency>
- <groupId>jakarta.annotation</groupId>
- <artifactId>jakarta.annotation-api</artifactId>
- <version>3.0.0</version>
- </dependency>
- <dependency>
- <groupId>org.aspectj</groupId>
- <artifactId>aspectjweaver</artifactId>
- <version>1.9.22</version>
- </dependency>
- </dependencies>
- </dependencyManagement>
-
-</project>
\ No newline at end of file