Coder Social home page Coder Social logo

optimizt's Introduction

⛔ THIS REPO IS UNMAINTAINED

Future development moved to https://github.com/343dev/optimizt.

@funboxteam/optimizt

Optimizt avatar: OK sign with Mona Lisa picture between the fingers

npm

Optimizt is a CLI tool that helps you prepare images during frontend development.

It can compress PNG, JPEG, GIF and SVG lossy and lossless and create AVIF and WebP versions for raster images.

По-русски

Rationale

As frontend developers we have to care about pictures: compress PNG & JPEG, remove useless parts of SVG, create AVIF and WebP for modern browsers, etc. One day we got tired of using a bunch of apps for that, and created one tool that does everything we want.

Usage

Install the tool:

npm i -g @funboxteam/optimizt

Optimize!

optimizt path/to/picture.jpg

Command line flags

  • --avif — create AVIF versions for the passed paths instead of compressing them.
  • --webp — create WebP versions for the passed paths instead of compressing them.
  • -f, --force — force create AVIF and WebP even if output file size increased or file already exists.
  • -l, --lossless — optimize losslessly instead of lossily.
  • -v, --verbose — show additional info, e.g. skipped files.
  • -c, --config — use this configuration, overriding default config options if present.
  • -o, --output — write result to provided directory.
  • -V, --version — show tool version.
  • -h, --help — show help.

Examples

# one image optimization
optimizt path/to/picture.jpg

# list of images optimization losslessly
optimizt --lossless path/to/picture.jpg path/to/another/picture.png

# recursive AVIF creation in the passed directory
optimizt --avif path/to/directory

# recursive WebP creation in the passed directory
optimizt --webp path/to/directory

# recursive JPEG optimization in the current directory
find . -iname \*.jpg -exec optimizt {} +

Differences between Lossy and Lossless

Lossy (by default)

Allows you to obtain the final image with a balance between a high level of compression and a minimum level of visual distortion.

Lossless (--lossless flag)

When creating AVIF and WebP versions, optimizations are applied that do not affect the visual quality of the images.

PNG, JPEG, and GIF optimization uses settings that maximize the visual quality of the image at the expense of the final file size.

When processing SVG files, the settings for Lossy and Lossless modes are identical.

Configuration

JPEG, PNG, WebP, and AVIF processing is done using sharp library, while SVG is processed using svgo utility.

For optimizing GIFs, gifsicle is used, and for converting to WebP, gif2webp is used.

💡 Lossless mode uses Guetzli encoder to optimize JPEG, which allows to get a high level of compression and still have a good visual quality. But you should keep in mind that if you optimize the file again, the size may decrease at the expense of degrading the visual quality of the image.

The default settings are located in .optimiztrc.js, the file contains a list of supported parameters and their brief description.

To disable any of the parameters, you should use false for the value.

When running with the --config path/to/.optimiztrc.js flag, the settings from the specified configuration file will be used for image processing.

When running normally, without the --config flag, a recursive search for the .optimiztrc.js file will be performed starting from the current directory and up to the root of the file system. If the file is not found, the default settings will be applied.

Integrations

External Tool in WebStorm, PhpStorm, etc

Add an External Tool

Open Preferences → Tools → External Tools and add a new tool with these options:

  • Program: path to the exec file (usually simply optimizt)
  • Arguments: desired ones, but use $FilePath$ to pass Optimizt the path of the selected file or directory
  • Working Directory: $ContentRoot$
  • Synchronize files after execution: ✔️

Set other options at your discretion. For example:

As you see on the screenshot above, you may add several “external tools” with the different options passed.

How to use

Run the tool through the context menu on a file or directory:

Shortcuts

To add shortcuts for the added tool go to Preferences → Keymap → External Tools:

Tasks in Visual Studio Code

Add Task

Run >Tasks: Open User Tasks from the Command Palette.

In an open file, add new tasks to the tasks array, for example:

{
  // See https://go.microsoft.com/fwlink/?LinkId=733558
  // for the documentation about the tasks.json format
  "version": "2.0.0",
  "tasks": [
    {
      "label": "optimizt: Optimize Image",
      "type": "shell",
      "command": "optimizt",
      "args": [
        "--verbose",
        {
          "value": "${file}",
          "quoting": "strong"
        }
      ],
      "presentation": {
        "echo": false,
        "showReuseMessage": false,
        "clear": true
      }
    },
    {
      "label": "optimizt: Optimize Image (lossless)",
      "type": "shell",
      "command": "optimizt",
      "args": [
        "--lossless",
        "--verbose",
        {
          "value": "${file}",
          "quoting": "strong"
        }
      ],
      "presentation": {
        "echo": false,
        "showReuseMessage": false,
        "clear": true
      }
    },
    {
      "label": "optimizt: Create WebP",
      "type": "shell",
      "command": "optimizt",
      "args": [
        "--webp",
        "--verbose",
        {
          "value": "${file}",
          "quoting": "strong"
        }
      ],
      "presentation": {
        "echo": false,
        "showReuseMessage": false,
        "clear": true
      }
    },
    {
      "label": "optimizt: Create WebP (lossless)",
      "type": "shell",
      "command": "optimizt",
      "args": [
        "--webp",
        "--lossless",
        "--verbose",
        {
          "value": "${file}",
          "quoting": "strong"
        }
      ],
      "presentation": {
        "echo": false,
        "showReuseMessage": false,
        "clear": true
      }
    }
  ]
}

How to use

  1. Open the file for processing using Optimizt, it should be in the active tab.
  2. Run >Tasks: Run Task from the Command Palette.
  3. Select the required task.

Shortcuts

You can add shortcuts for a specific task by run >Preferences: Open Keyboard Shortcuts (JSON) from the Command Palette.

An example of adding a hotkey to run the "optimizt: Optimize Image (lossless)" task:

// Place your key bindings in this file to override the defaults
[
  {
    "key": "ctrl+l",
    "command": "workbench.action.tasks.runTask",
    "args": "optimizt: Optimize Image (lossless)"
  }
]

Plugin for Sublime Text 3

You’ll find the user settings directory in one of the following paths:

  • macOS: ~/Library/Application Support/Sublime Text 3/Packages/User
  • Linux: ~/.config/sublime-text-3/Packages/User
  • Windows: %APPDATA%\Sublime Text 3\Packages\User

Add plugin

Inside the settings directory create a file optimizt.py with the following content:

import os
import sublime
import sublime_plugin

optimizt = "~/.nodenv/shims/optimizt"

class OptimiztCommand(sublime_plugin.WindowCommand):
  def run(self, paths=[], options=""):
    if len(paths) < 1:
      return

    safe_paths = ["\"" + i + "\"" for i in paths]
    shell_cmd = optimizt + " " + options + " " + " ".join(safe_paths)
    cwd = os.path.dirname(paths[0])

    self.window.run_command("exec", {
      "shell_cmd": shell_cmd,
      "working_dir": cwd
    })

Specify path to executable inside optimizt variable, this path can be obtained by running command -v optimizt (on *nix) or where optimizt (on Windows).

Integrate the plugin into the sidebar context menu

Inside the settings directory create a file Side Bar.sublime-menu with the following content:

[
    {
        "caption": "Optimizt",
        "children": [
          {
              "caption": "Optimize Images",
              "command": "optimizt",
              "args": {
                "paths": [],
                "options": "--verbose"
              }
          },
          {
              "caption": "Optimize Images (lossless)",
              "command": "optimizt",
              "args": {
                "paths": [],
                "options": "--lossless --verbose"
              }
          },
          {
              "caption": "Create WebP",
              "command": "optimizt",
              "args": {
                "paths": [],
                "options": "--webp --verbose"
              }
          },
          {
              "caption": "Create WebP (lossless)",
              "command": "optimizt",
              "args": {
                "paths": [],
                "options": "--webp --lossless --verbose"
              }
          }
        ]
    }
]

How to use

Run the tool through the context menu on a file or directory:

Workflow for GitHub Actions

Create optimizt.yml file in the .github/workflows directory of your repository.

Insert the following code into optimizt.yml:

name: optimizt

on:
  # Triggers the workflow on push events but only for the “main” branch
  # and only when there's JPEG/PNG in the commmit
  push:
    branches:
      - main
    paths:
      - "**.jpe?g"
      - "**.png"

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  convert:
    runs-on: ubuntu-latest

    steps:
      # Install Node.js to avoid EACCESS errors upon install packages
      - uses: actions/setup-node@v2
        with:
          node-version: 14

      - name: Install Optimizt
        run: npm install --global @funboxteam/optimizt

      - uses: actions/checkout@v2
        with:
          persist-credentials: false # otherwise, the token used is the GITHUB_TOKEN, instead of your personal token
          fetch-depth: 0 # get all commits (only the last one fetched by default)

      - name: Run Optimizt
        run: optimizt --verbose --force --avif --webp .

      - name: Commit changes
        run: |
          git add -A
          git config --local user.email "[email protected]"
          git config --local user.name "github-actions[bot]"
          git diff --quiet && git diff --staged --quiet \
            || git commit -am "Create WebP & AVIF versions"

      - name: Push changes
        uses: ad-m/github-push-action@master
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          branch: ${{ github.ref }}

This workflow will find all JPEG and PNG files in pushed commits and add the AVIF and WebP versions via a new commit.

More examples you can find in the workflows directory.

Troubleshooting

“spawn guetzli ENOENT”, etc

Make sure that the ignore-scripts option is not active.

See #9.

“pkg-config: command not found”, “fatal error: 'png.h' file not found”, etc

Some operating systems may lack of required libraries and utils, so you need to install them.

Example (on macOS via Homebrew):

brew install pkg-config libpng

Docker

Pull by name

docker pull funbox/optimizt

Pull by name and version

docker pull funbox/optimizt:5.0.1

Build the image

If you want to manually build the Docker image, you need to:

  1. Clone this repo and cd into it.
  2. Run docker build -t funbox/optimizt ..

OR:

  • Run docker build -t funbox/optimizt https://github.com/funbox/optimizt.git, but keep in mind that the .dockerignore file will be ignored.

Run the container

Inside the container WORKDIR is set to /src, so by default all paths will be resolved relative to it.

Usage example:

docker run -v $(pwd):/src funbox/optimizt --webp image.png

Credits

Cute picture for the project was made by Igor Garybaldi.

Sponsored by FunBox

optimizt's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

optimizt's Issues

Feature Request: --out option in future?

is there any chance to have an --out option?
It would be great if we can specify where to send optimized images to

something like optimizt --webp . --out ./webp/

Installation errors

Windows 7, Node.js v13.14.0

npm -g install @funboxteam/optimizt

npm ERR! code EEXIST
npm ERR! path C:\Users\Oleg\AppData\Roaming\npm\node_modules@funboxteam\optimizt\cli.js
npm ERR! dest C:\Users\Oleg\AppData\Roaming\npm\optimizt
npm ERR! EEXIST: file already exists, cmd shim 'C:\Users\Oleg\AppData\Roaming\npm\node_modules@funboxteam\optimizt\cli.js' -> 'C:\Users\Oleg\AppData\Roaming\npm\optimizt'
npm ERR! File exists: C:\Users\Oleg\AppData\Roaming\npm\optimizt
npm ERR! Remove the existing file and try again, or run npm
npm ERR! with --force to overwrite files recklessly.

npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\Oleg\AppData\Roaming\npm-cache_logs\2021-12-15T11_58_24_277Z-debug.log

Installation error, need help

Win10, node 16.15.0 (the same at 16.14.0) npm 8.5.5

$ npm i -g @funboxteam/optimizt

npm WARN deprecated [email protected]: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
npm ERR! code 1
npm ERR! path C:\Users\Ya\AppData\Roaming\npm\node_modules@funboxteam\optimizt\node_modules\guetzli
npm ERR! command failed
npm ERR! command C:\Windows\system32\cmd.exe /d /s /c node lib/install.js
npm ERR! compiling from source
npm ERR! guetzli built successfully
npm ERR! Command failed: C:\Users\Ya\AppData\Roaming\npm\node_modules@funboxteam\optimizt\node_modules\guetzli\vendor\guetzli.exe --verbose
npm ERR! Guetzli JPEG compressor. Usage:
npm ERR! guetzli [flags] input_filename output_filename
npm ERR!
npm ERR! Flags:
npm ERR! --verbose - Print a verbose trace of all attempts to standard output.
npm ERR! --quality Q - Visual quality to aim for, expressed as a JPEG quality value.
npm ERR! --memlimit M - Memory limit in MB. Guetzli will fail if unable to stay under
npm ERR! the limit. Default is 6000 MB
npm ERR! --nomemlimit - Do not limit memory usage.
npm ERR!
npm ERR!
npm ERR! guetzli pre-build test failed
npm ERR! C:\Users\Ya\AppData\Roaming\npm\node_modules@funboxteam\optimizt\node_modules\execa\index.js:231
npm ERR! err = new Error(Command failed: ${joinedCmd}${output});
npm ERR! ^
npm ERR!
npm ERR! Error: Command failed: C:\Windows\system32\cmd.exe /s /c "mkdir -p C:\Users\Ya\AppData\Roaming\npm\node_modules@funboxteam\optimizt\node_modules\guetzli\vendor"
npm ERR! A subdirectory or file C:\Users\Ya\AppData\Roaming\npm\node_modules@funboxteam\optimizt\node_modules\guetzli\vendor already exists.
npm ERR! Error occurred while processing: C:\Users\Ya\AppData\Roaming\npm\node_modules@funboxteam\optimizt\node_modules\guetzli\vendor.
npm ERR!
npm ERR!
npm ERR! at C:\Users\Ya\AppData\Roaming\npm\node_modules@funboxteam\optimizt\node_modules\execa\index.js:231:11
npm ERR! at runMicrotasks ()
npm ERR! at processTicksAndRejections (node:internal/process/task_queues:96:5)
npm ERR! at async Promise.all (index 0) {
npm ERR! code: 1,
npm ERR! killed: false,
npm ERR! stdout: '',
npm ERR! stderr: 'A subdirectory or file C:\Users\Ya\AppData\Roaming\npm\node_modules\@funboxteam\optimizt\node_modules\guetzli\vendor already exists.\r\n' +
npm ERR! 'Error occurred while processing: C:\Users\Ya\AppData\Roaming\npm\node_modules\@funboxteam\optimizt\node_modules\guetzli\vendor.\r\n',
npm ERR! failed: true,
npm ERR! signal: null,
npm ERR! cmd: 'C:\Windows\system32\cmd.exe /s /c "mkdir -p C:\Users\Ya\AppData\Roaming\npm\node_modules\@funboxteam\optimizt\node_modules\guetzli\vendor"',
npm ERR! timedOut: false
npm ERR! }

CLI breaks when hitting SVGs

When the directory contains an svg file the CLI stops with the following error.

TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string or an instance of Buffer or URL. Received undefined
    at Object.statSync (node:fs:1529:10)
    at /Users/###/node_modules/@funboxteam/optimizt/lib/optimize.js:76:18
    at Array.forEach (<anonymous>)
    at optimize (/Users/###/node_modules/@funboxteam/optimizt/lib/optimize.js:74:15)
    at async optimizt (/Users/###/node_modules/@funboxteam/optimizt/index.js:18:5) {
  code: 'ERR_INVALID_ARG_TYPE'
}

When I add filtering for errors via const tasksResult = (await Promise.all(tasks)).filter(res => !!res); in optimize.js I see the following output for those svg files:

✖ /Users/###/src/images/###.svg
   parseName is not a function

The SVG issue might be introduced in f4510cb.

But error filtering should be applied in any case.

Add quality parameter

Add a parameter in order to set the quality the images after optimized.

Example: optimizt path/to/dir --quality=50.

errors thrown for jpg image

optimizt working well on png images and also producing webp and avif format images.

when it is run on png files, it is throwing following error :

Processing. Please wait...events.js:186
      throw er; // Unhandled 'error' event
      ^

Error: spawn /home/zenova/projects/nvm/.nvm/versions/node/v12.9.1/lib/node_modules/@funboxteam/optimizt/node_modules/jpegoptim-bin/vendor/jpegoptim ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:264:19)
    at onErrorNT (internal/child_process.js:456:16)
    at processTicksAndRejections (internal/process/task_queues.js:77:11)
Emitted 'error' event on ChildProcess instance at:
    at Process.ChildProcess._handle.onexit (internal/child_process.js:270:12)
    at onErrorNT (internal/child_process.js:456:16)
    at processTicksAndRejections (internal/process/task_queues.js:77:11) {
  errno: 'ENOENT',
  code: 'ENOENT',
  syscall: 'spawn /home/zenova/projects/nvm/.nvm/versions/node/v12.9.1/lib/node_modules/@funboxteam/optimizt/node_modules/jpegoptim-bin/vendor/jpegoptim',
  path: '/home/zenova/projects/nvm/.nvm/versions/node/v12.9.1/lib/node_modules/@funboxteam/optimizt/node_modules/jpegoptim-bin/vendor/jpegoptim',
  spawnargs: [
    '--strip-all',
    '--strip-com',
    '--strip-exif',
    '--strip-iptc',
    '--strip-icc',
    '--strip-xmp',
    '--all-progressive',
    '--max=80',
    '--stdin',
    '--stdout'
  ]
}

(sharp:54196): GLib-CRITICAL **: 12:55:23.511: g_hash_table_lookup: assertion 'hash_table != NULL' failed

(sharp:54196): GLib-CRITICAL **: 12:55:23.511: g_hash_table_lookup: assertion 'hash_table != NULL' failed

(sharp:54196): GLib-CRITICAL **: 12:55:23.511: g_hash_table_lookup: assertion 'hash_table != NULL' failed

(sharp:54196): GLib-CRITICAL **: 12:55:23.511: g_hash_table_insert_internal: assertion 'hash_table != NULL' failed

(sharp:54196): GLib-CRITICAL **: 12:55:23.511: g_hash_table_lookup: assertion 'hash_table != NULL' failed
fish: “optimizt dusk.jpg” terminated by signal SIGSEGV (Address boundary error)

Question: Is lossless optimization actually lossless?

It's a bit awkward, but when I run --lossless second time, I get JPEG compressed even more:

First time:

✔ 1.jpg
   54.421 KB → 36.374 KB. Ratio: 33%

Second time:

✔ 1.jpg
   36.374 KB → 31.389 KB. Ratio: 14%

Does it mean that lossless optimization is actually lossy and it creates noisy JPEGs when you run it several times?

Bug: Only YUV color space input jpeg is supported

I used Optimizt to compress the image. Sadly, I don't have an original version, but it was something like this:

118.zip

Then I run Optimizt once again, and the compressed image triggered this error:

✖ 118.jpg
   Command failed: /home/ai/.npm-global/lib/node_modules/@funboxteam/optimizt/node_modules/guetzli/vendor/guetzli --quality 90 /tmp/58840c0a-cf60-4c6d-a314-76189370802f /tmp/41a60157-361d-4d00-909b-2f2257eadde0
Only YUV color space input jpeg is supported
Guetzli processing failed

It looks like Optimizt does not support images it creates 🤔

The image that triggers this error is here:

118.zip

(Archives are named the same, but there are different images.)

Feature Request: Show summary

Usually when I use Optimizt I compress a batch of images and wanna know how much space I have saved for my users. But as a result I get this:

$ optimizt --lossless *
ℹ Lossless optimization may take a long time
✔ 1.jpg
   54.421 KB → 36.374 KB. Ratio: 33%
✔ 10.jpg
   75.561 KB → 52.14 KB. Ratio: 31%
# ...
✔ 98.jpg
   40.487 KB → 36.02 KB. Ratio: 11%
✔ 99.jpg
   47.82 KB → 42.492 KB. Ratio: 11%

✔ Optimizing completed
  Done!

It's cool, but I want to know the total stat. I would be great to add it.

Bash command is incorrect

To apply recursively the optimisation in a folder it should be:
find . -type f -name '*.jpg' -exec optimizt {} \;

instead of:
optimizt find . -type f -name '*.jpg'

Failure to install from version 4.1.0

The latest release references a local path file:guetzli-5.0.0.tgz this does not appear to be part of the published package and all attempts to install fail.

OS: Mac OS 13.2
Node version: 16.19.0
Package managers tried: npm & pnpm

Pinning to 4.0.0 resolves all install issues.

SVG optimisation breaks for some images

Hey there, thanks for this amazing tool!
I just used it to optimise hundreds of images in my blog!

However, I found some SVGs for which the tool kind of messes them up.
Here is a visual example, original is top left, optimised is bottom right:

Screenshot 2023-04-12 at 23 20 33

Full SVG
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="600pt" height="299.999988pt" viewBox="0 0 600 299.999988" version="1.2">
<defs>
<g>
<symbol overflow="visible" id="glyph0-0">
<path style="stroke:none;" d="M 1.296875 -18.203125 L 12.40625 -18.203125 L 12.40625 0 L 1.296875 0 Z M 11.671875 -17.6875 L 2.03125 -17.6875 L 6.84375 -9.640625 Z M 11.875 -16.953125 L 7.171875 -9.09375 L 11.875 -1.21875 Z M 6.53125 -9.09375 L 1.84375 -16.90625 L 1.84375 -1.28125 Z M 11.671875 -0.546875 L 6.859375 -8.546875 L 2.046875 -0.546875 Z M 11.671875 -0.546875 "/>
</symbol>
<symbol overflow="visible" id="glyph0-1">
<path style="stroke:none;" d="M 1.96875 0 L 1.96875 -17.375 L 13.75 -17.375 L 13.75 -15.265625 L 4.421875 -15.265625 L 4.421875 -9.984375 L 11.3125 -9.984375 L 11.3125 -7.875 L 4.421875 -7.875 L 4.421875 -2.109375 L 13.75 -2.109375 L 13.75 0 Z M 1.96875 0 "/>
</symbol>
<symbol overflow="visible" id="glyph0-2">
<path style="stroke:none;" d="M 1.96875 -17.375 L 4.421875 -17.375 L 4.421875 -2.109375 L 13.75 -2.109375 L 13.75 0 L 1.96875 0 Z M 1.96875 -17.375 "/>
</symbol>
<symbol overflow="visible" id="glyph0-3">
<path style="stroke:none;" d="M 9.390625 -17.6875 C 10.835938 -17.6875 12.144531 -17.347656 13.3125 -16.671875 C 14.488281 -15.992188 15.378906 -15.019531 15.984375 -13.75 L 13.828125 -12.96875 C 13.429688 -13.75 12.851562 -14.382812 12.09375 -14.875 C 11.34375 -15.375 10.394531 -15.625 9.25 -15.625 C 8.488281 -15.625 7.773438 -15.472656 7.109375 -15.171875 C 6.441406 -14.878906 5.859375 -14.441406 5.359375 -13.859375 C 4.867188 -13.285156 4.484375 -12.566406 4.203125 -11.703125 C 3.929688 -10.835938 3.796875 -9.835938 3.796875 -8.703125 C 3.796875 -7.617188 3.929688 -6.644531 4.203125 -5.78125 C 4.472656 -4.925781 4.84375 -4.195312 5.3125 -3.59375 C 5.789062 -3 6.367188 -2.539062 7.046875 -2.21875 C 7.722656 -1.894531 8.457031 -1.734375 9.25 -1.734375 C 9.820312 -1.734375 10.410156 -1.800781 11.015625 -1.9375 C 11.628906 -2.082031 12.179688 -2.328125 12.671875 -2.671875 C 13.171875 -3.023438 13.578125 -3.488281 13.890625 -4.0625 C 14.210938 -4.644531 14.375 -5.390625 14.375 -6.296875 L 14.375 -6.859375 L 9.3125 -6.859375 L 9.3125 -8.96875 L 16.6875 -8.96875 L 16.6875 0 L 15.28125 0 L 14.640625 -2.1875 C 14.085938 -1.300781 13.328125 -0.660156 12.359375 -0.265625 C 11.398438 0.117188 10.332031 0.3125 9.15625 0.3125 C 7.90625 0.3125 6.796875 0.09375 5.828125 -0.34375 C 4.859375 -0.789062 4.035156 -1.410156 3.359375 -2.203125 C 2.679688 -3.003906 2.164062 -3.957031 1.8125 -5.0625 C 1.46875 -6.175781 1.296875 -7.390625 1.296875 -8.703125 C 1.296875 -10.054688 1.484375 -11.285156 1.859375 -12.390625 C 2.242188 -13.492188 2.785156 -14.4375 3.484375 -15.21875 C 4.191406 -16.007812 5.046875 -16.617188 6.046875 -17.046875 C 7.046875 -17.472656 8.160156 -17.6875 9.390625 -17.6875 Z M 9.390625 -17.6875 "/>
</symbol>
<symbol overflow="visible" id="glyph0-4">
<path style="stroke:none;" d="M 6.78125 -17.390625 L 9.515625 -17.390625 L 16.015625 0 L 13.421875 0 L 12.09375 -3.796875 L 4.1875 -3.796875 L 2.859375 0 L 0.265625 0 Z M 4.9375 -5.90625 L 11.34375 -5.90625 L 8.140625 -14.921875 Z M 4.9375 -5.90625 "/>
</symbol>
<symbol overflow="visible" id="glyph0-5">
<path style="stroke:none;" d="M 1.96875 0 L 1.96875 -17.375 L 5.59375 -17.375 L 13.5 -2.59375 L 13.5 -17.375 L 15.9375 -17.375 L 15.9375 0 L 12.34375 0 L 4.421875 -14.84375 L 4.421875 0 Z M 1.96875 0 "/>
</symbol>
<symbol overflow="visible" id="glyph0-6">
<path style="stroke:none;" d="M 9.390625 -17.6875 C 10.859375 -17.6875 12.164062 -17.347656 13.3125 -16.671875 C 14.46875 -15.992188 15.351562 -15.019531 15.96875 -13.75 L 13.828125 -12.96875 C 13.429688 -13.75 12.851562 -14.382812 12.09375 -14.875 C 11.34375 -15.375 10.394531 -15.625 9.25 -15.625 C 8.488281 -15.625 7.773438 -15.472656 7.109375 -15.171875 C 6.441406 -14.878906 5.859375 -14.441406 5.359375 -13.859375 C 4.867188 -13.285156 4.484375 -12.566406 4.203125 -11.703125 C 3.929688 -10.835938 3.796875 -9.835938 3.796875 -8.703125 C 3.796875 -7.617188 3.929688 -6.644531 4.203125 -5.78125 C 4.472656 -4.925781 4.851562 -4.195312 5.34375 -3.59375 C 5.832031 -3 6.414062 -2.539062 7.09375 -2.21875 C 7.769531 -1.894531 8.515625 -1.734375 9.328125 -1.734375 C 10.472656 -1.734375 11.425781 -1.976562 12.1875 -2.46875 C 12.957031 -2.957031 13.539062 -3.597656 13.9375 -4.390625 L 16.0625 -3.609375 C 15.4375 -2.304688 14.515625 -1.328125 13.296875 -0.671875 C 12.085938 -0.015625 10.710938 0.3125 9.171875 0.3125 C 7.929688 0.3125 6.820312 0.09375 5.84375 -0.34375 C 4.875 -0.789062 4.050781 -1.410156 3.375 -2.203125 C 2.695312 -3.003906 2.179688 -3.957031 1.828125 -5.0625 C 1.472656 -6.175781 1.296875 -7.390625 1.296875 -8.703125 C 1.296875 -10.054688 1.484375 -11.285156 1.859375 -12.390625 C 2.242188 -13.492188 2.785156 -14.4375 3.484375 -15.21875 C 4.191406 -16.007812 5.046875 -16.617188 6.046875 -17.046875 C 7.046875 -17.472656 8.160156 -17.6875 9.390625 -17.6875 Z M 9.390625 -17.6875 "/>
</symbol>
<symbol overflow="visible" id="glyph0-7">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph0-8">
<path style="stroke:none;" d="M 1.71875 -15.4375 L 1.71875 -17.375 L 9.046875 -17.375 L 9.046875 -15.4375 L 6.609375 -15.4375 L 6.609375 -1.921875 L 9.046875 -1.921875 L 9.046875 0 L 1.71875 0 L 1.71875 -1.921875 L 4.15625 -1.921875 L 4.15625 -15.4375 Z M 1.71875 -15.4375 "/>
</symbol>
<symbol overflow="visible" id="glyph0-9">
<path style="stroke:none;" d="M 3.296875 -4.46875 C 3.453125 -4 3.679688 -3.59375 3.984375 -3.25 C 4.296875 -2.90625 4.65625 -2.625 5.0625 -2.40625 C 5.46875 -2.1875 5.90625 -2.019531 6.375 -1.90625 C 6.851562 -1.789062 7.328125 -1.734375 7.796875 -1.734375 C 8.316406 -1.734375 8.820312 -1.796875 9.3125 -1.921875 C 9.8125 -2.054688 10.25 -2.25 10.625 -2.5 C 11 -2.757812 11.300781 -3.082031 11.53125 -3.46875 C 11.757812 -3.863281 11.875 -4.320312 11.875 -4.84375 C 11.875 -5.238281 11.796875 -5.582031 11.640625 -5.875 C 11.484375 -6.164062 11.234375 -6.425781 10.890625 -6.65625 C 10.546875 -6.894531 10.09375 -7.109375 9.53125 -7.296875 C 8.96875 -7.492188 8.269531 -7.679688 7.4375 -7.859375 C 6.757812 -7.992188 6.054688 -8.160156 5.328125 -8.359375 C 4.597656 -8.554688 3.925781 -8.84375 3.3125 -9.21875 C 2.695312 -9.59375 2.191406 -10.082031 1.796875 -10.6875 C 1.398438 -11.289062 1.203125 -12.070312 1.203125 -13.03125 C 1.203125 -13.757812 1.378906 -14.410156 1.734375 -14.984375 C 2.097656 -15.566406 2.578125 -16.054688 3.171875 -16.453125 C 3.773438 -16.859375 4.457031 -17.164062 5.21875 -17.375 C 5.988281 -17.582031 6.769531 -17.6875 7.5625 -17.6875 C 8.164062 -17.6875 8.769531 -17.617188 9.375 -17.484375 C 9.988281 -17.359375 10.554688 -17.160156 11.078125 -16.890625 C 11.609375 -16.617188 12.09375 -16.28125 12.53125 -15.875 C 12.96875 -15.46875 13.320312 -14.988281 13.59375 -14.4375 L 11.359375 -13.78125 C 11.015625 -14.382812 10.476562 -14.84375 9.75 -15.15625 C 9.019531 -15.46875 8.257812 -15.625 7.46875 -15.625 C 7 -15.625 6.535156 -15.566406 6.078125 -15.453125 C 5.628906 -15.335938 5.226562 -15.164062 4.875 -14.9375 C 4.519531 -14.71875 4.238281 -14.4375 4.03125 -14.09375 C 3.820312 -13.757812 3.71875 -13.367188 3.71875 -12.921875 C 3.71875 -12.429688 3.835938 -12.03125 4.078125 -11.71875 C 4.328125 -11.414062 4.65625 -11.160156 5.0625 -10.953125 C 5.476562 -10.742188 5.957031 -10.566406 6.5 -10.421875 C 7.039062 -10.285156 7.601562 -10.15625 8.1875 -10.03125 C 8.945312 -9.875 9.695312 -9.679688 10.4375 -9.453125 C 11.1875 -9.234375 11.859375 -8.929688 12.453125 -8.546875 C 13.046875 -8.171875 13.523438 -7.675781 13.890625 -7.0625 C 14.265625 -6.445312 14.453125 -5.671875 14.453125 -4.734375 C 14.453125 -3.929688 14.257812 -3.210938 13.875 -2.578125 C 13.5 -1.953125 12.992188 -1.425781 12.359375 -1 C 11.722656 -0.570312 11 -0.242188 10.1875 -0.015625 C 9.375 0.203125 8.546875 0.3125 7.703125 0.3125 C 6.984375 0.3125 6.273438 0.226562 5.578125 0.0625 C 4.878906 -0.101562 4.226562 -0.351562 3.625 -0.6875 C 3.03125 -1.03125 2.503906 -1.457031 2.046875 -1.96875 C 1.597656 -2.488281 1.265625 -3.097656 1.046875 -3.796875 Z M 3.296875 -4.46875 "/>
</symbol>
<symbol overflow="visible" id="glyph0-10">
<path style="stroke:none;" d="M 1.296875 -8.703125 C 1.296875 -10.003906 1.484375 -11.207031 1.859375 -12.3125 C 2.242188 -13.414062 2.785156 -14.363281 3.484375 -15.15625 C 4.191406 -15.957031 5.046875 -16.578125 6.046875 -17.015625 C 7.054688 -17.460938 8.1875 -17.6875 9.4375 -17.6875 C 10.6875 -17.6875 11.816406 -17.460938 12.828125 -17.015625 C 13.847656 -16.578125 14.707031 -15.957031 15.40625 -15.15625 C 16.101562 -14.363281 16.644531 -13.414062 17.03125 -12.3125 C 17.414062 -11.207031 17.609375 -10.003906 17.609375 -8.703125 C 17.609375 -7.390625 17.414062 -6.179688 17.03125 -5.078125 C 16.644531 -3.984375 16.101562 -3.035156 15.40625 -2.234375 C 14.707031 -1.441406 13.847656 -0.816406 12.828125 -0.359375 C 11.816406 0.0859375 10.6875 0.3125 9.4375 0.3125 C 8.1875 0.3125 7.054688 0.0859375 6.046875 -0.359375 C 5.046875 -0.816406 4.191406 -1.441406 3.484375 -2.234375 C 2.785156 -3.035156 2.242188 -3.984375 1.859375 -5.078125 C 1.484375 -6.179688 1.296875 -7.390625 1.296875 -8.703125 Z M 3.796875 -8.703125 C 3.796875 -7.578125 3.941406 -6.582031 4.234375 -5.71875 C 4.535156 -4.851562 4.9375 -4.125 5.4375 -3.53125 C 5.9375 -2.945312 6.53125 -2.5 7.21875 -2.1875 C 7.914062 -1.882812 8.65625 -1.734375 9.4375 -1.734375 C 10.238281 -1.734375 10.976562 -1.882812 11.65625 -2.1875 C 12.34375 -2.5 12.941406 -2.945312 13.453125 -3.53125 C 13.960938 -4.125 14.363281 -4.851562 14.65625 -5.71875 C 14.957031 -6.582031 15.109375 -7.578125 15.109375 -8.703125 C 15.109375 -9.835938 14.957031 -10.832031 14.65625 -11.6875 C 14.363281 -12.539062 13.960938 -13.257812 13.453125 -13.84375 C 12.941406 -14.425781 12.34375 -14.867188 11.65625 -15.171875 C 10.976562 -15.472656 10.238281 -15.625 9.4375 -15.625 C 8.65625 -15.625 7.914062 -15.472656 7.21875 -15.171875 C 6.53125 -14.867188 5.9375 -14.425781 5.4375 -13.84375 C 4.9375 -13.257812 4.535156 -12.539062 4.234375 -11.6875 C 3.941406 -10.832031 3.796875 -9.835938 3.796875 -8.703125 Z M 3.796875 -8.703125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-11">
<path style="stroke:none;" d="M 0.265625 -17.375 L 14.25 -17.375 L 14.25 -15.265625 L 8.46875 -15.265625 L 8.46875 0 L 6.03125 0 L 6.03125 -15.265625 L 0.265625 -15.265625 Z M 0.265625 -17.375 "/>
</symbol>
<symbol overflow="visible" id="glyph0-12">
<path style="stroke:none;" d="M 1.96875 -17.375 L 6.703125 -17.375 C 8.085938 -17.375 9.359375 -17.226562 10.515625 -16.9375 C 11.671875 -16.65625 12.671875 -16.179688 13.515625 -15.515625 C 14.367188 -14.847656 15.03125 -13.957031 15.5 -12.84375 C 15.96875 -11.738281 16.203125 -10.359375 16.203125 -8.703125 C 16.203125 -7.046875 15.96875 -5.65625 15.5 -4.53125 C 15.03125 -3.414062 14.367188 -2.523438 13.515625 -1.859375 C 12.671875 -1.191406 11.671875 -0.710938 10.515625 -0.421875 C 9.359375 -0.140625 8.085938 0 6.703125 0 L 1.96875 0 Z M 4.421875 -15.3125 L 4.421875 -2.046875 L 6.65625 -2.046875 C 7.5625 -2.046875 8.429688 -2.113281 9.265625 -2.25 C 10.109375 -2.394531 10.859375 -2.695312 11.515625 -3.15625 C 12.171875 -3.613281 12.695312 -4.285156 13.09375 -5.171875 C 13.5 -6.054688 13.703125 -7.234375 13.703125 -8.703125 C 13.703125 -10.179688 13.5 -11.351562 13.09375 -12.21875 C 12.695312 -13.082031 12.171875 -13.742188 11.515625 -14.203125 C 10.859375 -14.660156 10.109375 -14.957031 9.265625 -15.09375 C 8.429688 -15.238281 7.5625 -15.3125 6.65625 -15.3125 Z M 4.421875 -15.3125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-13">
<path style="stroke:none;" d="M 1.96875 -17.375 L 7.40625 -17.375 C 8.46875 -17.375 9.4375 -17.296875 10.3125 -17.140625 C 11.195312 -16.992188 11.960938 -16.722656 12.609375 -16.328125 C 13.253906 -15.941406 13.753906 -15.410156 14.109375 -14.734375 C 14.460938 -14.066406 14.640625 -13.191406 14.640625 -12.109375 C 14.640625 -11.035156 14.460938 -10.160156 14.109375 -9.484375 C 13.753906 -8.804688 13.253906 -8.273438 12.609375 -7.890625 C 11.960938 -7.515625 11.195312 -7.257812 10.3125 -7.125 C 9.4375 -6.988281 8.46875 -6.921875 7.40625 -6.921875 L 4.421875 -6.921875 L 4.421875 -0.03125 L 1.96875 -0.03125 Z M 4.421875 -15.3125 L 4.421875 -9.015625 L 7.625 -9.015625 C 8.238281 -9.015625 8.820312 -9.046875 9.375 -9.109375 C 9.9375 -9.171875 10.421875 -9.304688 10.828125 -9.515625 C 11.234375 -9.722656 11.550781 -10.03125 11.78125 -10.4375 C 12.019531 -10.84375 12.140625 -11.398438 12.140625 -12.109375 C 12.140625 -12.828125 12.019531 -13.394531 11.78125 -13.8125 C 11.550781 -14.238281 11.234375 -14.5625 10.828125 -14.78125 C 10.421875 -15 9.9375 -15.140625 9.375 -15.203125 C 8.820312 -15.273438 8.238281 -15.3125 7.625 -15.3125 Z M 4.421875 -15.3125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-14">
<path style="stroke:none;" d="M 1.96875 -17.375 L 8.96875 -17.375 C 9.90625 -17.375 10.710938 -17.25 11.390625 -17 C 12.078125 -16.757812 12.640625 -16.4375 13.078125 -16.03125 C 13.515625 -15.632812 13.835938 -15.175781 14.046875 -14.65625 C 14.253906 -14.144531 14.359375 -13.609375 14.359375 -13.046875 C 14.359375 -12.359375 14.203125 -11.675781 13.890625 -11 C 13.578125 -10.320312 13.125 -9.734375 12.53125 -9.234375 C 13.394531 -8.773438 14.039062 -8.160156 14.46875 -7.390625 C 14.894531 -6.617188 15.109375 -5.816406 15.109375 -4.984375 C 15.109375 -4.367188 14.984375 -3.757812 14.734375 -3.15625 C 14.492188 -2.5625 14.132812 -2.03125 13.65625 -1.5625 C 13.1875 -1.09375 12.59375 -0.710938 11.875 -0.421875 C 11.164062 -0.140625 10.335938 0 9.390625 0 L 1.96875 0 Z M 4.421875 -8.015625 L 4.421875 -2.046875 L 9.640625 -2.046875 C 10.128906 -2.046875 10.554688 -2.132812 10.921875 -2.3125 C 11.285156 -2.488281 11.59375 -2.71875 11.84375 -3 C 12.09375 -3.289062 12.273438 -3.613281 12.390625 -3.96875 C 12.515625 -4.320312 12.578125 -4.6875 12.578125 -5.0625 C 12.578125 -5.425781 12.515625 -5.785156 12.390625 -6.140625 C 12.273438 -6.503906 12.09375 -6.820312 11.84375 -7.09375 C 11.59375 -7.375 11.285156 -7.597656 10.921875 -7.765625 C 10.554688 -7.929688 10.125 -8.015625 9.625 -8.015625 Z M 4.421875 -15.3125 L 4.421875 -9.9375 L 9.234375 -9.9375 C 9.679688 -9.9375 10.066406 -10.015625 10.390625 -10.171875 C 10.722656 -10.328125 11 -10.523438 11.21875 -10.765625 C 11.4375 -11.003906 11.597656 -11.285156 11.703125 -11.609375 C 11.816406 -11.929688 11.875 -12.253906 11.875 -12.578125 C 11.875 -12.929688 11.816406 -13.265625 11.703125 -13.578125 C 11.597656 -13.898438 11.429688 -14.191406 11.203125 -14.453125 C 10.984375 -14.710938 10.707031 -14.921875 10.375 -15.078125 C 10.039062 -15.234375 9.660156 -15.3125 9.234375 -15.3125 Z M 4.421875 -15.3125 "/>
</symbol>
<symbol overflow="visible" id="glyph0-15">
<path style="stroke:none;" d="M 4.421875 -17.375 L 4.421875 -7.078125 C 4.421875 -5.359375 4.757812 -4.046875 5.4375 -3.140625 C 6.125 -2.242188 7.300781 -1.796875 8.96875 -1.796875 C 10.632812 -1.796875 11.804688 -2.242188 12.484375 -3.140625 C 13.171875 -4.046875 13.515625 -5.359375 13.515625 -7.078125 L 13.515625 -17.375 L 15.96875 -17.375 L 15.96875 -7.25 C 15.96875 -5.988281 15.835938 -4.882812 15.578125 -3.9375 C 15.328125 -2.988281 14.921875 -2.195312 14.359375 -1.5625 C 13.796875 -0.9375 13.070312 -0.46875 12.1875 -0.15625 C 11.3125 0.15625 10.238281 0.3125 8.96875 0.3125 C 7.707031 0.3125 6.632812 0.15625 5.75 -0.15625 C 4.863281 -0.46875 4.140625 -0.9375 3.578125 -1.5625 C 3.023438 -2.195312 2.617188 -2.988281 2.359375 -3.9375 C 2.097656 -4.882812 1.96875 -5.988281 1.96875 -7.25 L 1.96875 -17.375 Z M 4.421875 -17.375 "/>
</symbol>
<symbol overflow="visible" id="glyph0-16">
<path style="stroke:none;" d="M 6.625 -8.9375 L 0.625 -17.375 L 3.53125 -17.375 L 8.09375 -11 L 12.640625 -17.375 L 15.578125 -17.375 L 9.5625 -8.9375 L 15.9375 0 L 13 0 L 8.09375 -6.890625 L 3.203125 0 L 0.265625 0 Z M 6.625 -8.9375 "/>
</symbol>
<symbol overflow="visible" id="glyph0-17">
<path style="stroke:none;" d="M 7.484375 -17.375 C 8.546875 -17.375 9.515625 -17.304688 10.390625 -17.171875 C 11.273438 -17.046875 12.039062 -16.800781 12.6875 -16.4375 C 13.332031 -16.070312 13.832031 -15.5625 14.1875 -14.90625 C 14.539062 -14.257812 14.71875 -13.414062 14.71875 -12.375 C 14.71875 -11.78125 14.65625 -11.21875 14.53125 -10.6875 C 14.414062 -10.164062 14.175781 -9.6875 13.8125 -9.25 C 13.457031 -8.820312 12.96875 -8.457031 12.34375 -8.15625 C 11.71875 -7.851562 10.90625 -7.628906 9.90625 -7.484375 L 15.28125 0 L 12.296875 0 L 7.015625 -7.3125 L 4.421875 -7.3125 L 4.421875 0 L 1.96875 0 L 1.96875 -17.375 Z M 4.421875 -9.359375 L 7.671875 -9.359375 C 8.304688 -9.359375 8.898438 -9.390625 9.453125 -9.453125 C 10.015625 -9.515625 10.5 -9.644531 10.90625 -9.84375 C 11.3125 -10.039062 11.628906 -10.332031 11.859375 -10.71875 C 12.097656 -11.113281 12.21875 -11.648438 12.21875 -12.328125 C 12.21875 -13.003906 12.097656 -13.535156 11.859375 -13.921875 C 11.628906 -14.316406 11.3125 -14.613281 10.90625 -14.8125 C 10.5 -15.019531 10.015625 -15.15625 9.453125 -15.21875 C 8.898438 -15.28125 8.304688 -15.3125 7.671875 -15.3125 L 4.421875 -15.3125 Z M 4.421875 -9.359375 "/>
</symbol>
<symbol overflow="visible" id="glyph0-18">
<path style="stroke:none;" d="M 0.265625 -17.375 L 2.9375 -17.375 L 7.75 -8.96875 L 12.53125 -17.375 L 15.203125 -17.375 L 8.96875 -6.734375 L 8.96875 0 L 6.53125 0 L 6.53125 -6.734375 Z M 0.265625 -17.375 "/>
</symbol>
<symbol overflow="visible" id="glyph0-19">
<path style="stroke:none;" d="M 0.984375 -1.375 C 0.984375 -1.820312 1.144531 -2.210938 1.46875 -2.546875 C 1.800781 -2.878906 2.195312 -3.046875 2.65625 -3.046875 C 3.125 -3.046875 3.519531 -2.878906 3.84375 -2.546875 C 4.175781 -2.210938 4.34375 -1.820312 4.34375 -1.375 C 4.34375 -1.164062 4.300781 -0.953125 4.21875 -0.734375 L 2.59375 3.453125 L 1.171875 3.453125 L 2.390625 0.28125 C 1.992188 0.21875 1.660156 0.03125 1.390625 -0.28125 C 1.117188 -0.59375 0.984375 -0.957031 0.984375 -1.375 Z M 0.984375 -1.375 "/>
</symbol>
<symbol overflow="visible" id="glyph0-20">
<path style="stroke:none;" d="M 1.96875 0 L 1.96875 -17.375 L 6.03125 -17.375 L 10.65625 -3.171875 L 15.28125 -17.375 L 19.34375 -17.375 L 19.34375 0 L 16.90625 0 L 16.90625 -14.8125 L 11.875 0 L 9.46875 0 L 4.421875 -14.8125 L 4.421875 0 Z M 1.96875 0 "/>
</symbol>
<symbol overflow="visible" id="glyph0-21">
<path style="stroke:none;" d="M 1.96875 0 L 1.96875 -17.375 L 4.421875 -17.375 L 4.421875 -9.984375 L 13.515625 -9.984375 L 13.515625 -17.375 L 15.96875 -17.375 L 15.96875 0 L 13.515625 0 L 13.515625 -7.875 L 4.421875 -7.875 L 4.421875 0 Z M 1.96875 0 "/>
</symbol>
<symbol overflow="visible" id="glyph0-22">
<path style="stroke:none;" d="M 0.265625 -17.375 L 2.9375 -17.375 L 6.3125 -3.015625 L 9.484375 -17.375 L 12.34375 -17.375 L 15.515625 -3.015625 L 18.90625 -17.375 L 21.578125 -17.375 L 17.234375 0 L 14.28125 0 L 10.921875 -14.359375 L 7.5625 0 L 4.625 0 Z M 0.265625 -17.375 "/>
</symbol>
<symbol overflow="visible" id="glyph0-23">
<path style="stroke:none;" d="M 1.96875 0 L 1.96875 -17.375 L 13.265625 -17.375 L 13.265625 -15.265625 L 4.421875 -15.265625 L 4.421875 -9.984375 L 13.265625 -9.984375 L 13.265625 -7.875 L 4.421875 -7.875 L 4.421875 0 Z M 1.96875 0 "/>
</symbol>
<symbol overflow="visible" id="glyph0-24">
<path style="stroke:none;" d="M 0.984375 -1.359375 C 0.984375 -1.816406 1.144531 -2.210938 1.46875 -2.546875 C 1.800781 -2.878906 2.195312 -3.046875 2.65625 -3.046875 C 3.125 -3.046875 3.519531 -2.878906 3.84375 -2.546875 C 4.175781 -2.210938 4.34375 -1.816406 4.34375 -1.359375 C 4.34375 -0.898438 4.175781 -0.503906 3.84375 -0.171875 C 3.519531 0.148438 3.125 0.3125 2.65625 0.3125 C 2.195312 0.3125 1.800781 0.148438 1.46875 -0.171875 C 1.144531 -0.503906 0.984375 -0.898438 0.984375 -1.359375 Z M 0.984375 -1.359375 "/>
</symbol>
<symbol overflow="visible" id="glyph1-0">
<path style="stroke:none;" d="M 1.5 0 L 1.5 -11.421875 L 8.078125 -11.421875 L 8.078125 0 Z M 2.3125 -0.8125 L 7.265625 -0.8125 L 7.265625 -10.609375 L 2.3125 -10.609375 Z M 2.3125 -0.8125 "/>
</symbol>
<symbol overflow="visible" id="glyph1-1">
<path style="stroke:none;" d="M 0.640625 -3.65625 L 0.640625 -4.90625 L 15.359375 -4.90625 L 15.359375 -3.65625 Z M 0.640625 -3.65625 "/>
</symbol>
<symbol overflow="visible" id="glyph2-0">
<path style="stroke:none;" d="M 0.796875 -11.203125 L 7.625 -11.203125 L 7.625 0 L 0.796875 0 Z M 7.1875 -10.875 L 1.25 -10.875 L 4.203125 -5.9375 Z M 7.3125 -10.4375 L 4.421875 -5.59375 L 7.3125 -0.75 Z M 4.015625 -5.59375 L 1.140625 -10.40625 L 1.140625 -0.78125 Z M 7.1875 -0.34375 L 4.21875 -5.265625 L 1.265625 -0.34375 Z M 7.1875 -0.34375 "/>
</symbol>
<symbol overflow="visible" id="glyph2-1">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph2-2">
<path style="stroke:none;" d="M 1.21875 0 L 1.21875 -10.6875 L 8.46875 -10.6875 L 8.46875 -9.390625 L 2.71875 -9.390625 L 2.71875 -6.140625 L 6.953125 -6.140625 L 6.953125 -4.84375 L 2.71875 -4.84375 L 2.71875 -1.296875 L 8.46875 -1.296875 L 8.46875 0 Z M 1.21875 0 "/>
</symbol>
<symbol overflow="visible" id="glyph2-3">
<path style="stroke:none;" d="M 4.015625 -8.0625 C 4.640625 -8.0625 5.160156 -7.9375 5.578125 -7.6875 C 6.003906 -7.4375 6.34375 -7.101562 6.59375 -6.6875 L 6.59375 -10.6875 L 7.9375 -10.6875 L 7.9375 -2.984375 C 7.9375 -2.722656 7.945312 -2.335938 7.96875 -1.828125 C 7.988281 -1.316406 8.066406 -0.707031 8.203125 0 L 6.9375 0 L 6.59375 -1.203125 C 6.34375 -0.773438 6.003906 -0.4375 5.578125 -0.1875 C 5.160156 0.0625 4.640625 0.1875 4.015625 0.1875 C 3.566406 0.1875 3.132812 0.09375 2.71875 -0.09375 C 2.300781 -0.28125 1.9375 -0.546875 1.625 -0.890625 C 1.320312 -1.242188 1.078125 -1.675781 0.890625 -2.1875 C 0.703125 -2.695312 0.609375 -3.28125 0.609375 -3.9375 C 0.609375 -4.582031 0.703125 -5.160156 0.890625 -5.671875 C 1.078125 -6.191406 1.320312 -6.625 1.625 -6.96875 C 1.9375 -7.320312 2.300781 -7.59375 2.71875 -7.78125 C 3.132812 -7.96875 3.566406 -8.0625 4.015625 -8.0625 Z M 2.109375 -3.9375 C 2.109375 -2.988281 2.3125 -2.253906 2.71875 -1.734375 C 3.132812 -1.210938 3.6875 -0.953125 4.375 -0.953125 C 5.050781 -0.953125 5.59375 -1.210938 6 -1.734375 C 6.414062 -2.253906 6.625 -2.988281 6.625 -3.9375 C 6.625 -4.882812 6.414062 -5.613281 6 -6.125 C 5.59375 -6.644531 5.050781 -6.90625 4.375 -6.90625 C 3.6875 -6.90625 3.132812 -6.644531 2.71875 -6.125 C 2.3125 -5.613281 2.109375 -4.882812 2.109375 -3.9375 Z M 2.109375 -3.9375 "/>
</symbol>
<symbol overflow="visible" id="glyph2-4">
<path style="stroke:none;" d="M 1.796875 -2.265625 C 1.859375 -2.035156 1.953125 -1.832031 2.078125 -1.65625 C 2.210938 -1.488281 2.375 -1.351562 2.5625 -1.25 C 2.75 -1.144531 2.945312 -1.066406 3.15625 -1.015625 C 3.375 -0.960938 3.597656 -0.9375 3.828125 -0.9375 C 4.054688 -0.9375 4.28125 -0.960938 4.5 -1.015625 C 4.726562 -1.078125 4.929688 -1.160156 5.109375 -1.265625 C 5.285156 -1.367188 5.425781 -1.492188 5.53125 -1.640625 C 5.644531 -1.785156 5.703125 -1.945312 5.703125 -2.125 C 5.703125 -2.488281 5.570312 -2.757812 5.3125 -2.9375 C 5.0625 -3.125 4.75 -3.265625 4.375 -3.359375 C 4.007812 -3.460938 3.609375 -3.550781 3.171875 -3.625 C 2.742188 -3.707031 2.34375 -3.820312 1.96875 -3.96875 C 1.59375 -4.125 1.28125 -4.347656 1.03125 -4.640625 C 0.78125 -4.941406 0.65625 -5.351562 0.65625 -5.875 C 0.65625 -6.226562 0.742188 -6.539062 0.921875 -6.8125 C 1.097656 -7.09375 1.328125 -7.328125 1.609375 -7.515625 C 1.890625 -7.703125 2.210938 -7.84375 2.578125 -7.9375 C 2.953125 -8.03125 3.332031 -8.078125 3.71875 -8.078125 C 4.34375 -8.078125 4.929688 -7.945312 5.484375 -7.6875 C 6.035156 -7.425781 6.4375 -7.019531 6.6875 -6.46875 L 5.421875 -6 C 5.285156 -6.320312 5.039062 -6.554688 4.6875 -6.703125 C 4.34375 -6.859375 3.984375 -6.9375 3.609375 -6.9375 C 3.410156 -6.9375 3.210938 -6.910156 3.015625 -6.859375 C 2.828125 -6.816406 2.65625 -6.753906 2.5 -6.671875 C 2.351562 -6.585938 2.234375 -6.476562 2.140625 -6.34375 C 2.054688 -6.207031 2.015625 -6.054688 2.015625 -5.890625 C 2.015625 -5.566406 2.140625 -5.328125 2.390625 -5.171875 C 2.640625 -5.023438 2.953125 -4.90625 3.328125 -4.8125 C 3.703125 -4.726562 4.101562 -4.648438 4.53125 -4.578125 C 4.96875 -4.503906 5.367188 -4.378906 5.734375 -4.203125 C 6.109375 -4.035156 6.421875 -3.796875 6.671875 -3.484375 C 6.929688 -3.179688 7.0625 -2.742188 7.0625 -2.171875 C 7.0625 -1.796875 6.96875 -1.460938 6.78125 -1.171875 C 6.601562 -0.878906 6.359375 -0.628906 6.046875 -0.421875 C 5.742188 -0.222656 5.398438 -0.0703125 5.015625 0.03125 C 4.640625 0.132812 4.242188 0.1875 3.828125 0.1875 C 3.484375 0.1875 3.140625 0.144531 2.796875 0.0625 C 2.453125 -0.0078125 2.128906 -0.125 1.828125 -0.28125 C 1.535156 -0.445312 1.269531 -0.65625 1.03125 -0.90625 C 0.800781 -1.15625 0.625 -1.453125 0.5 -1.796875 Z M 1.796875 -2.265625 "/>
</symbol>
<symbol overflow="visible" id="glyph2-5">
<path style="stroke:none;" d="M 3.96875 -8.0625 C 4.601562 -8.0625 5.117188 -7.9375 5.515625 -7.6875 C 5.921875 -7.4375 6.25 -7.101562 6.5 -6.6875 L 6.859375 -7.9375 L 7.84375 -7.9375 L 7.84375 -0.75 C 7.84375 -0.351562 7.828125 0.0195312 7.796875 0.375 C 7.773438 0.726562 7.695312 1.054688 7.5625 1.359375 C 7.4375 1.671875 7.242188 1.945312 6.984375 2.1875 C 6.722656 2.4375 6.363281 2.644531 5.90625 2.8125 C 5.675781 2.894531 5.429688 2.957031 5.171875 3 C 4.921875 3.050781 4.660156 3.078125 4.390625 3.078125 C 4.066406 3.078125 3.738281 3.039062 3.40625 2.96875 C 3.082031 2.894531 2.78125 2.785156 2.5 2.640625 C 2.226562 2.492188 1.984375 2.300781 1.765625 2.0625 C 1.554688 1.832031 1.398438 1.550781 1.296875 1.21875 L 2.640625 0.84375 C 2.710938 1.0625 2.8125 1.234375 2.9375 1.359375 C 3.070312 1.492188 3.21875 1.597656 3.375 1.671875 C 3.53125 1.753906 3.695312 1.8125 3.875 1.84375 C 4.050781 1.875 4.222656 1.890625 4.390625 1.890625 C 4.585938 1.890625 4.765625 1.875 4.921875 1.84375 C 5.085938 1.8125 5.207031 1.785156 5.28125 1.765625 C 5.519531 1.671875 5.71875 1.566406 5.875 1.453125 C 6.03125 1.335938 6.15625 1.191406 6.25 1.015625 C 6.34375 0.835938 6.40625 0.628906 6.4375 0.390625 C 6.476562 0.148438 6.5 -0.128906 6.5 -0.453125 L 6.5 -1.5 C 6.25 -1.082031 5.921875 -0.75 5.515625 -0.5 C 5.117188 -0.257812 4.601562 -0.140625 3.96875 -0.140625 C 3.53125 -0.140625 3.109375 -0.222656 2.703125 -0.390625 C 2.296875 -0.566406 1.9375 -0.820312 1.625 -1.15625 C 1.320312 -1.488281 1.078125 -1.898438 0.890625 -2.390625 C 0.703125 -2.890625 0.609375 -3.457031 0.609375 -4.09375 C 0.609375 -4.738281 0.703125 -5.304688 0.890625 -5.796875 C 1.078125 -6.285156 1.320312 -6.695312 1.625 -7.03125 C 1.9375 -7.363281 2.296875 -7.617188 2.703125 -7.796875 C 3.109375 -7.972656 3.53125 -8.0625 3.96875 -8.0625 Z M 2.0625 -4.09375 C 2.0625 -3.1875 2.269531 -2.488281 2.6875 -2 C 3.101562 -1.507812 3.640625 -1.265625 4.296875 -1.265625 C 4.597656 -1.265625 4.882812 -1.316406 5.15625 -1.421875 C 5.425781 -1.523438 5.660156 -1.691406 5.859375 -1.921875 C 6.066406 -2.148438 6.234375 -2.441406 6.359375 -2.796875 C 6.484375 -3.160156 6.546875 -3.59375 6.546875 -4.09375 C 6.546875 -4.59375 6.484375 -5.019531 6.359375 -5.375 C 6.234375 -5.738281 6.066406 -6.03125 5.859375 -6.25 C 5.660156 -6.476562 5.425781 -6.644531 5.15625 -6.75 C 4.882812 -6.851562 4.597656 -6.90625 4.296875 -6.90625 C 3.640625 -6.90625 3.101562 -6.660156 2.6875 -6.171875 C 2.269531 -5.691406 2.0625 -5 2.0625 -4.09375 Z M 2.0625 -4.09375 "/>
</symbol>
<symbol overflow="visible" id="glyph2-6">
<path style="stroke:none;" d="M 4.46875 -8.0625 C 5.09375 -8.0625 5.644531 -7.9375 6.125 -7.6875 C 6.601562 -7.4375 7 -7.101562 7.3125 -6.6875 C 7.632812 -6.269531 7.863281 -5.789062 8 -5.25 C 8.144531 -4.71875 8.195312 -4.164062 8.15625 -3.59375 L 2.046875 -3.59375 C 2.066406 -3.09375 2.160156 -2.675781 2.328125 -2.34375 C 2.492188 -2.007812 2.695312 -1.742188 2.9375 -1.546875 C 3.175781 -1.347656 3.429688 -1.203125 3.703125 -1.109375 C 3.984375 -1.023438 4.25 -0.984375 4.5 -0.984375 C 4.945312 -0.984375 5.320312 -1.050781 5.625 -1.1875 C 5.925781 -1.332031 6.171875 -1.53125 6.359375 -1.78125 L 7.640625 -1.390625 C 7.359375 -0.921875 6.945312 -0.539062 6.40625 -0.25 C 5.875 0.0390625 5.238281 0.1875 4.5 0.1875 C 3.875 0.1875 3.316406 0.0820312 2.828125 -0.125 C 2.347656 -0.34375 1.941406 -0.632812 1.609375 -1 C 1.285156 -1.375 1.035156 -1.8125 0.859375 -2.3125 C 0.691406 -2.820312 0.609375 -3.367188 0.609375 -3.953125 C 0.609375 -4.578125 0.707031 -5.144531 0.90625 -5.65625 C 1.101562 -6.164062 1.375 -6.597656 1.71875 -6.953125 C 2.0625 -7.304688 2.46875 -7.578125 2.9375 -7.765625 C 3.40625 -7.960938 3.914062 -8.0625 4.46875 -8.0625 Z M 6.734375 -4.671875 C 6.734375 -4.953125 6.679688 -5.226562 6.578125 -5.5 C 6.472656 -5.769531 6.320312 -6.007812 6.125 -6.21875 C 5.925781 -6.425781 5.6875 -6.59375 5.40625 -6.71875 C 5.125 -6.84375 4.8125 -6.90625 4.46875 -6.90625 C 4.164062 -6.90625 3.875 -6.863281 3.59375 -6.78125 C 3.320312 -6.695312 3.078125 -6.566406 2.859375 -6.390625 C 2.648438 -6.210938 2.472656 -5.984375 2.328125 -5.703125 C 2.179688 -5.421875 2.09375 -5.078125 2.0625 -4.671875 Z M 6.734375 -4.671875 "/>
</symbol>
<symbol overflow="visible" id="glyph2-7">
<path style="stroke:none;" d="M 1.125 -7.9375 L 2.09375 -7.9375 L 2.53125 -6.46875 C 2.800781 -6.945312 3.171875 -7.332031 3.640625 -7.625 C 4.117188 -7.914062 4.691406 -8.0625 5.359375 -8.0625 L 5.359375 -6.671875 C 4.816406 -6.671875 4.359375 -6.597656 3.984375 -6.453125 C 3.617188 -6.304688 3.320312 -6.097656 3.09375 -5.828125 C 2.863281 -5.554688 2.703125 -5.21875 2.609375 -4.8125 C 2.515625 -4.40625 2.46875 -3.9375 2.46875 -3.40625 L 2.46875 0 L 1.125 0 Z M 1.125 -7.9375 "/>
</symbol>
<symbol overflow="visible" id="glyph2-8">
<path style="stroke:none;" d="M 0.15625 -10.6875 L 1.8125 -10.6875 L 3.890625 -1.859375 L 5.84375 -10.6875 L 7.59375 -10.6875 L 9.546875 -1.859375 L 11.625 -10.6875 L 13.28125 -10.6875 L 10.609375 0 L 8.78125 0 L 6.71875 -8.828125 L 4.65625 0 L 2.84375 0 Z M 0.15625 -10.6875 "/>
</symbol>
<symbol overflow="visible" id="glyph2-9">
<path style="stroke:none;" d="M 0.609375 -0.828125 C 0.609375 -1.117188 0.707031 -1.363281 0.90625 -1.5625 C 1.113281 -1.769531 1.351562 -1.875 1.625 -1.875 C 1.914062 -1.875 2.160156 -1.769531 2.359375 -1.5625 C 2.566406 -1.363281 2.671875 -1.117188 2.671875 -0.828125 C 2.671875 -0.554688 2.566406 -0.316406 2.359375 -0.109375 C 2.160156 0.0859375 1.914062 0.1875 1.625 0.1875 C 1.351562 0.1875 1.113281 0.0859375 0.90625 -0.109375 C 0.707031 -0.316406 0.609375 -0.554688 0.609375 -0.828125 Z M 0.609375 -0.828125 "/>
</symbol>
<symbol overflow="visible" id="glyph2-10">
<path style="stroke:none;" d="M 1.21875 -10.6875 L 4.125 -10.6875 C 4.976562 -10.6875 5.757812 -10.597656 6.46875 -10.421875 C 7.175781 -10.242188 7.789062 -9.945312 8.3125 -9.53125 C 8.84375 -9.125 9.25 -8.578125 9.53125 -7.890625 C 9.820312 -7.210938 9.96875 -6.367188 9.96875 -5.359375 C 9.96875 -4.335938 9.820312 -3.484375 9.53125 -2.796875 C 9.25 -2.109375 8.84375 -1.554688 8.3125 -1.140625 C 7.789062 -0.734375 7.175781 -0.441406 6.46875 -0.265625 C 5.757812 -0.0859375 4.976562 0 4.125 0 L 1.21875 0 Z M 2.71875 -9.421875 L 2.71875 -1.265625 L 4.09375 -1.265625 C 4.644531 -1.265625 5.179688 -1.304688 5.703125 -1.390625 C 6.222656 -1.472656 6.6875 -1.65625 7.09375 -1.9375 C 7.5 -2.226562 7.820312 -2.644531 8.0625 -3.1875 C 8.3125 -3.726562 8.4375 -4.453125 8.4375 -5.359375 C 8.4375 -6.265625 8.3125 -6.984375 8.0625 -7.515625 C 7.820312 -8.046875 7.5 -8.453125 7.09375 -8.734375 C 6.6875 -9.023438 6.222656 -9.210938 5.703125 -9.296875 C 5.179688 -9.378906 4.644531 -9.421875 4.09375 -9.421875 Z M 2.71875 -9.421875 "/>
</symbol>
<symbol overflow="visible" id="glyph2-11">
<path style="stroke:none;" d="M 1.5 -10.453125 C 1.5 -10.722656 1.59375 -10.953125 1.78125 -11.140625 C 1.976562 -11.335938 2.21875 -11.4375 2.5 -11.4375 C 2.769531 -11.4375 3.003906 -11.335938 3.203125 -11.140625 C 3.398438 -10.953125 3.5 -10.722656 3.5 -10.453125 C 3.5 -10.171875 3.398438 -9.929688 3.203125 -9.734375 C 3.003906 -9.535156 2.769531 -9.4375 2.5 -9.4375 C 2.21875 -9.4375 1.976562 -9.535156 1.78125 -9.734375 C 1.59375 -9.929688 1.5 -10.171875 1.5 -10.453125 Z M 0.71875 -7.9375 L 3.171875 -7.9375 L 3.171875 0 L 1.828125 0 L 1.828125 -6.859375 L 0.71875 -6.859375 Z M 0.71875 -7.9375 "/>
</symbol>
<symbol overflow="visible" id="glyph2-12">
<path style="stroke:none;" d="M -0.921875 2.546875 L -0.921875 1.375 C -0.773438 1.382812 -0.644531 1.390625 -0.53125 1.390625 C -0.414062 1.390625 -0.296875 1.390625 -0.171875 1.390625 C 0.171875 1.390625 0.441406 1.367188 0.640625 1.328125 C 0.847656 1.296875 1.007812 1.21875 1.125 1.09375 C 1.25 0.976562 1.332031 0.816406 1.375 0.609375 C 1.414062 0.410156 1.4375 0.144531 1.4375 -0.1875 L 1.4375 -7.9375 L 2.78125 -7.9375 L 2.78125 -0.109375 C 2.78125 0.398438 2.734375 0.828125 2.640625 1.171875 C 2.554688 1.523438 2.40625 1.800781 2.1875 2 C 1.976562 2.207031 1.6875 2.351562 1.3125 2.4375 C 0.945312 2.53125 0.492188 2.578125 -0.046875 2.578125 C -0.179688 2.578125 -0.320312 2.570312 -0.46875 2.5625 C -0.613281 2.5625 -0.765625 2.554688 -0.921875 2.546875 Z M 1.109375 -10.453125 C 1.109375 -10.722656 1.207031 -10.953125 1.40625 -11.140625 C 1.601562 -11.335938 1.835938 -11.4375 2.109375 -11.4375 C 2.390625 -11.4375 2.625 -11.335938 2.8125 -11.140625 C 3.007812 -10.953125 3.109375 -10.722656 3.109375 -10.453125 C 3.109375 -10.171875 3.007812 -9.929688 2.8125 -9.734375 C 2.625 -9.535156 2.390625 -9.4375 2.109375 -9.4375 C 1.835938 -9.4375 1.601562 -9.535156 1.40625 -9.734375 C 1.207031 -9.929688 1.109375 -10.171875 1.109375 -10.453125 Z M 1.109375 -10.453125 "/>
</symbol>
<symbol overflow="visible" id="glyph2-13">
<path style="stroke:none;" d="M 1.125 0 L 1.125 -10.6875 L 2.46875 -10.6875 L 2.46875 -4.375 L 5.65625 -7.9375 L 7.28125 -7.9375 L 4.28125 -4.65625 L 7.6875 0 L 6.03125 0 L 3.390625 -3.65625 L 2.46875 -2.65625 L 2.46875 0 Z M 1.125 0 "/>
</symbol>
<symbol overflow="visible" id="glyph2-14">
<path style="stroke:none;" d="M 1.65625 -7.9375 L 1.65625 -9.9375 L 3.015625 -9.9375 L 3.015625 -7.9375 L 4.546875 -7.9375 L 4.546875 -6.859375 L 3.015625 -6.859375 L 3.015625 -2.203125 C 3.015625 -2.003906 3.019531 -1.835938 3.03125 -1.703125 C 3.039062 -1.566406 3.070312 -1.460938 3.125 -1.390625 C 3.1875 -1.316406 3.269531 -1.265625 3.375 -1.234375 C 3.476562 -1.203125 3.628906 -1.1875 3.828125 -1.1875 L 4.546875 -1.1875 L 4.546875 0 L 3.53125 0 C 3.144531 0 2.832031 -0.0234375 2.59375 -0.078125 C 2.351562 -0.128906 2.164062 -0.226562 2.03125 -0.375 C 1.894531 -0.519531 1.796875 -0.71875 1.734375 -0.96875 C 1.679688 -1.226562 1.65625 -1.566406 1.65625 -1.984375 L 1.65625 -6.859375 L 0.3125 -6.859375 L 0.3125 -7.9375 Z M 1.65625 -7.9375 "/>
</symbol>
<symbol overflow="visible" id="glyph2-15">
<path style="stroke:none;" d="M 5.96875 -4.890625 C 5.988281 -5.566406 5.851562 -6.082031 5.5625 -6.4375 C 5.28125 -6.800781 4.816406 -6.984375 4.171875 -6.984375 C 3.691406 -6.984375 3.300781 -6.875 3 -6.65625 C 2.695312 -6.445312 2.503906 -6.148438 2.421875 -5.765625 L 1.125 -6.140625 C 1.332031 -6.753906 1.710938 -7.226562 2.265625 -7.5625 C 2.816406 -7.894531 3.445312 -8.0625 4.15625 -8.0625 C 5.257812 -8.0625 6.054688 -7.804688 6.546875 -7.296875 C 7.046875 -6.785156 7.300781 -5.96875 7.3125 -4.84375 L 7.328125 -2.984375 C 7.335938 -2.316406 7.363281 -1.742188 7.40625 -1.265625 C 7.457031 -0.796875 7.519531 -0.375 7.59375 0 L 6.375 0 L 6.046875 -1.09375 C 5.804688 -0.6875 5.472656 -0.367188 5.046875 -0.140625 C 4.617188 0.078125 4.050781 0.1875 3.34375 0.1875 C 2.96875 0.1875 2.613281 0.132812 2.28125 0.03125 C 1.957031 -0.0625 1.671875 -0.207031 1.421875 -0.40625 C 1.171875 -0.601562 0.972656 -0.84375 0.828125 -1.125 C 0.679688 -1.40625 0.609375 -1.726562 0.609375 -2.09375 C 0.609375 -2.5625 0.734375 -2.957031 0.984375 -3.28125 C 1.242188 -3.601562 1.601562 -3.867188 2.0625 -4.078125 C 2.53125 -4.285156 3.09375 -4.445312 3.75 -4.5625 C 4.414062 -4.6875 5.15625 -4.796875 5.96875 -4.890625 Z M 2.09375 -2.125 C 2.09375 -1.75 2.226562 -1.445312 2.5 -1.21875 C 2.769531 -0.988281 3.144531 -0.875 3.625 -0.875 C 3.9375 -0.875 4.238281 -0.914062 4.53125 -1 C 4.820312 -1.082031 5.082031 -1.21875 5.3125 -1.40625 C 5.539062 -1.59375 5.722656 -1.84375 5.859375 -2.15625 C 6.003906 -2.46875 6.078125 -2.859375 6.078125 -3.328125 L 6.078125 -3.828125 C 5.472656 -3.765625 4.925781 -3.691406 4.4375 -3.609375 C 3.945312 -3.523438 3.523438 -3.421875 3.171875 -3.296875 C 2.828125 -3.171875 2.5625 -3.015625 2.375 -2.828125 C 2.1875 -2.640625 2.09375 -2.40625 2.09375 -2.125 Z M 2.09375 -2.125 "/>
</symbol>
</g>
<clipPath id="clip1">
  <path d="M 288.828125 30 L 300 30 L 300 47.25 L 288.828125 47.25 Z M 288.828125 30 "/>
</clipPath>
<clipPath id="clip2">
  <path d="M 300 30 L 311.328125 30 L 311.328125 47.25 L 300 47.25 Z M 300 30 "/>
</clipPath>
</defs>
<g id="surface1">
<rect x="0" y="0" width="600" height="299.999988" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
<rect x="0" y="0" width="600" height="299.999988" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
<rect x="0" y="0" width="600" height="299.999988" style="fill:rgb(98.039246%,97.24884%,96.469116%);fill-opacity:1;stroke:none;"/>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-1" x="171.784374" y="83.749992"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-2" x="189.121962" y="83.749992"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-1" x="205.731762" y="83.749992"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-3" x="223.069351" y="83.749992"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-4" x="244.123817" y="83.749992"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-5" x="262.994946" y="83.749992"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-6" x="283.503581" y="83.749992"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-1" x="303.154481" y="83.749992"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-7" x="320.492072" y="83.749992"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-8" x="330.369902" y="83.749992"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-9" x="343.730684" y="83.749992"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-7" x="361.822052" y="83.749992"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-5" x="371.69987" y="83.749992"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-10" x="392.208505" y="83.749992"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-11" x="413.704834" y="83.749992"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-4" x="122.811722" y="119.749989"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-7" x="141.682851" y="119.749989"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-12" x="151.560675" y="119.749989"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-8" x="171.653437" y="119.749989"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-9" x="185.014213" y="119.749989"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-13" x="203.105575" y="119.749989"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-1" x="221.326897" y="119.749989"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-5" x="238.664489" y="119.749989"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-9" x="259.173124" y="119.749989"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-4" x="277.264492" y="119.749989"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-14" x="296.135614" y="119.749989"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-2" x="314.824799" y="119.749989"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-1" x="331.434592" y="119.749989"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-7" x="348.772184" y="119.749989"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-2" x="358.650014" y="119.749989"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-15" x="375.259807" y="119.749989"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-16" x="395.794443" y="119.749989"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-15" x="414.587586" y="119.749989"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-17" x="435.122223" y="119.749989"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-18" x="453.785406" y="119.749989"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-19" x="471.850773" y="119.749989"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-14" x="128.717972" y="155.749986"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-15" x="147.407152" y="155.749986"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-11" x="167.941783" y="155.749986"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-7" x="185.045443" y="155.749986"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-4" x="194.923267" y="155.749986"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-7" x="213.794396" y="155.749986"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-6" x="223.67222" y="155.749986"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-17" x="243.323115" y="155.749986"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-15" x="261.98631" y="155.749986"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-6" x="282.520946" y="155.749986"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-8" x="302.171846" y="155.749986"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-4" x="315.532627" y="155.749986"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-2" x="334.403761" y="155.749986"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-7" x="351.013555" y="155.749986"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-20" x="360.891384" y="155.749986"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-4" x="384.805003" y="155.749986"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-11" x="403.676125" y="155.749986"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-11" x="420.779777" y="155.749986"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-1" x="437.883429" y="155.749986"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-17" x="455.221021" y="155.749986"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-11" x="125.260941" y="191.749984"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-21" x="142.364599" y="191.749984"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-4" x="162.899231" y="191.749984"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-11" x="181.770362" y="191.749984"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-7" x="198.874019" y="191.749984"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-12" x="208.751843" y="191.749984"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-1" x="228.84461" y="191.749984"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-6" x="246.182202" y="191.749984"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-8" x="265.833102" y="191.749984"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-12" x="279.193884" y="191.749984"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-1" x="299.286651" y="191.749984"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-9" x="316.624243" y="191.749984"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-7" x="334.715611" y="191.749984"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-14" x="344.593441" y="191.749984"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-1" x="363.282626" y="191.749984"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-11" x="380.620217" y="191.749984"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-22" x="397.723869" y="191.749984"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-1" x="422.157324" y="191.749984"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-1" x="439.494916" y="191.749984"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-5" x="456.832507" y="191.749984"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-9" x="130.88594" y="227.749981"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-15" x="148.977303" y="227.749981"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-6" x="169.511933" y="227.749981"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-6" x="189.162828" y="227.749981"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-1" x="208.813722" y="227.749981"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-9" x="226.151308" y="227.749981"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-9" x="244.242671" y="227.749981"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-7" x="262.334028" y="227.749981"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-4" x="272.211857" y="227.749981"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-5" x="291.08298" y="227.749981"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-12" x="311.591615" y="227.749981"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-7" x="331.684371" y="227.749981"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-23" x="341.562201" y="227.749981"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-4" x="358.405935" y="227.749981"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-8" x="377.277057" y="227.749981"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-2" x="390.637828" y="227.749981"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-15" x="407.247621" y="227.749981"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-17" x="427.782257" y="227.749981"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-1" x="446.445441" y="227.749981"/>
</g>
<g style="fill:rgb(16.859436%,16.859436%,16.859436%);fill-opacity:1;">
  <use xlink:href="#glyph0-24" x="463.783033" y="227.749981"/>
</g>
<g clip-path="url(#clip1)" clip-rule="nonzero">
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(87.059021%,76.078796%,72.938538%);fill-opacity:1;" d="M 294.652344 37.386719 C 293.585938 37.386719 292.609375 37.746094 291.816406 38.34375 C 291.894531 35.855469 293.800781 33.363281 297.558594 30.875 L 297 30.003906 C 291.554688 33.417969 288.828125 37.167969 288.828125 41.25 C 288.828125 43.125 289.335938 44.59375 290.347656 45.652344 C 291.355469 46.714844 292.636719 47.246094 294.183594 47.246094 C 295.734375 47.246094 296.980469 46.820312 297.929688 45.964844 C 298.878906 45.113281 299.355469 44.082031 299.355469 42.875 C 299.355469 42.859375 299.351562 42.851562 299.351562 42.835938 C 299.382812 42.621094 299.402344 42.40625 299.402344 42.179688 C 299.402344 39.535156 297.273438 37.386719 294.652344 37.386719 Z M 294.652344 37.386719 "/>
</g>
<g clip-path="url(#clip2)" clip-rule="nonzero">
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(87.059021%,76.078796%,72.938538%);fill-opacity:1;" d="M 310.011719 45.492188 C 310.074219 45.417969 310.148438 45.351562 310.203125 45.277344 C 310.902344 44.441406 311.328125 43.363281 311.328125 42.183594 C 311.328125 39.535156 309.203125 37.386719 306.578125 37.386719 C 305.378906 37.386719 304.285156 37.839844 303.445312 38.585938 C 303.445312 38.554688 303.441406 38.53125 303.441406 38.5 C 303.441406 35.957031 305.359375 33.417969 309.199219 30.875 L 308.644531 30.003906 C 303.195312 33.417969 300.46875 37.167969 300.46875 41.25 C 300.46875 43.125 300.972656 44.59375 301.988281 45.652344 C 302.996094 46.71875 304.277344 47.25 305.824219 47.25 C 307.371094 47.25 308.621094 46.820312 309.570312 45.964844 C 309.707031 45.847656 309.808594 45.714844 309.925781 45.585938 C 309.953125 45.554688 309.980469 45.523438 310.011719 45.492188 Z M 310.011719 45.492188 "/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph1-1" x="421.512482" y="264.199987"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph2-1" x="437.508643" y="264.199987"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph2-2" x="441.987563" y="264.199987"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph2-3" x="451.057382" y="264.199987"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph2-4" x="460.079217" y="264.199987"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph2-5" x="467.613411" y="264.199987"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph2-6" x="476.571262" y="264.199987"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph2-7" x="485.193194" y="264.199987"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph2-1" x="490.631884" y="264.199987"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph2-8" x="495.110804" y="264.199987"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph2-9" x="508.547574" y="264.199987"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph2-1" x="511.826786" y="264.199987"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph2-10" x="516.305706" y="264.199987"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph2-11" x="527.071116" y="264.199987"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph2-12" x="531.51805" y="264.199987"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph2-13" x="535.581068" y="264.199987"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph2-4" x="543.419183" y="264.199987"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph2-14" x="550.953378" y="264.199987"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph2-7" x="556.136132" y="264.199987"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
  <use xlink:href="#glyph2-15" x="561.574822" y="264.199987"/>
</g>
</g>
</svg>

Thank you!

Hey, there's no issue or problem -- I just wanted to say thank you for making this great piece of software.

Everything, from Optimizt's elegant design to the brilliant, well written and simple documentation is perfect.
Just, sincerely -- thank you :)

Does it work on m1 macbooks?

I'm getting
npm ERR! Cannot find libjpeg or you have too old version (v6 or later required).
But I have libjpeg installed via homebrew.

It works incorrectly

Folder have 2 files for test:
banner-img-joy-smile-desctop.jpg
banner-img-joy-smile-desctop-ok.jpg

Call:
$ find . -iname *.jpg -exec optimizt --webp --avif {} +
ℹ Converting 2 images (lossy)...
✔ banner-img-joy-smile-desctop-ok.avif
100.776 KB → 50.825 KB. Ratio: 50%
✔ banner-img-joy-smile-desctop.avif
487.15 KB → 54.317 KB. Ratio: 89%
✔ banner-img-joy-smile-desctop.webp
487.15 KB → 127.719 KB. Ratio: 74%

ℹ Yay! You saved 826.768 KB (70%)

Result 3 files:
banner-img-joy-smile-desctop.avif
banner-img-joy-smile-desctop.webp
banner-img-joy-smile-desctop-ok.avif
banner-img-joy-smile-desctop-ok.webp - is not created


$ optimizt --webp /Images_Site/Home/test2/banner-img-joy-smile-desctop-ok.jpg
ℹ Converting 1 image (lossy)...
ℹ Done!
File banner-img-joy-smile-desctop-ok.webp - is not created

Unable to customize input and output directory on Windows

Hi,
I installed and ran the command that's mentioned in the documentation but I'm getting this error. Could you please help?

> optimizt --verbose --force --avif --webp .

Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file and data are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'd:'
    at new NodeError (node:internal/errors:399:5)
    at throwIfUnsupportedURLScheme (node:internal/modules/esm/resolve:1059:11)
    at defaultResolve (node:internal/modules/esm/resolve:1135:3)
    at nextResolve (node:internal/modules/esm/loader:163:28)
    at ESMLoader.resolve (node:internal/modules/esm/loader:838:30)
    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:424:18)
    at ESMLoader.import (node:internal/modules/esm/loader:525:22)
    at importModuleDynamically (node:internal/modules/esm/translators:110:35)
    at importModuleDynamicallyCallback (node:internal/process/esm_loader:35:14)
    at optimizt (file:///D:/Code/webapi-monorepo-poc/images/node_modules/@funboxteam/optimizt/index.js:11:22) {
  code: 'ERR_UNSUPPORTED_ESM_URL_SCHEME'
}

I also tried specifying input and output directories, but I get the same error as mentioned above.
I'm using Windows 11, trying this using VS Code PowerShell terminal.
Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.