GithubHelp home page GithubHelp logo

domoszlai / juicy-gcode Goto Github PK

View Code? Open in Web Editor NEW
109.0 109.0 7.0 2.38 MB

A lightweight SVG to GCode converter for maximal curve fitting

Home Page: https://hackage.haskell.org/package/juicy-gcode

License: MIT License

Haskell 1.18% G-code 98.79% Shell 0.03%

juicy-gcode's People

Contributors

bodigrim avatar domoszlai avatar

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

juicy-gcode's Issues

-d option is not considered when svg height and width are length in centimeters

Given a SVG file with height and width as real length in centimeters

    <svg height="26cm" version="1.2" viewBox="0 0 500.0 500.0" width="26cm">

Actual behavior

the -d DPI option is silently ignored

Expected behavior

Either

  • a warning is given stating "-d option ignored because SVG height and width are in centimeters"
  • the program stops with error message "-d conflicts with SVG height and width in centimeters"

Does colour support have an "after" option?

Is that an exhaustive number of settings?
It may also be worth adding a 'default' option in the event of failed detection

colors:
   "000000": 
      before: |
        ; black
      passes: 1
      parameters:
        F: 1.0 
        S: 80
   "FF0000": 
      before: |
        ; red
      passes: 1
      parameters:
        F: 2.0 
        S: 25

Is it possible to remove the transformations?

I'd like to use this program without flipping the Y axis and without changing the X axis.
My SVG file's points are in the same units as my plotter..

<svg>
<path d="M10,10 L 25,25"

I want to send to the plotter

G01 X10 Y10
G01 X25 y25

I believe the dpi setting is throwing off my X axis I can't pass a float (25.4) as a parameter. Also the Y axis is flipped upside down.

I'm hoping that you could provide (or help me to add a --as-is parameter so as to not adjust the points prior to plotting them.

I found your program trying to find a way to convert a bezier curve into a series of G2 and G3 (arcs) I have not found a way to do this.

Thanks

Quadratic spline

Since cubic G5 is working fine, may we extend support to G5.1 (and even scared to say perhaps G5.2)?

Tag <line> is not parsed properly

<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="850.4px" height="850.4px" viewBox="0 0 850.4 850.4" enable-background="new 0 0 850.4 850.4" xml:space="preserve">
<rect x="141.7" y="141.7" fill="none" stroke="#231F20" stroke-miterlimit="10" width="566.9" height="566.9"/>
<circle fill="none" stroke="#231F20" stroke-miterlimit="10" cx="425.2" cy="425.2" r="141.7"/>
<line fill="none" stroke="#231F20" stroke-miterlimit="10" x1="525.4" y1="525.4" x2="708.7" y2="708.7"/>
<line fill="none" stroke="#231F20" stroke-miterlimit="10" x1="141.7" y1="141.7" x2="325" y2="325"/>
<line fill="none" stroke="#231F20" stroke-miterlimit="10" x1="325" y1="525.4" x2="141.7" y2="708.7"/>
<line fill="none" stroke="#231F20" stroke-miterlimit="10" x1="708.7" y1="141.7" x2="525.4" y2="325"/>
<line fill="none" stroke="#231F20" stroke-miterlimit="10" x1="141.7" y1="425.2" x2="708.7" y2="425.2"/>
<line fill="none" stroke="#231F20" stroke-miterlimit="10" x1="425.2" y1="141.7" x2="425.2" y2="708.7"/>
</svg>

this parsed in:

G00 Z9 F800
G00 X49.9886 Y49.9886
G01 Z7.5 F800
G01 X249.9783 Y49.9886
G01 X249.9783 Y249.9783
G01 X49.9886 Y249.9783
G01 X49.9886 Y49.9886
G00 Z9 F800
G00 X100.0125 Y150.0011
G01 Z7.5 F800
G03 X100.6705 Y141.8762 I50.4891 J0.0000
G03 X102.6151 Y134.0391 I48.8960 J7.9725
G03 X113.7950 Y115.5156 I47.3541 J15.9451
G03 X131.7707 Y103.4409 I36.2368 J34.5284
G03 X140.6842 Y100.8810 I18.0648 J46.1019
G03 X150.0011 Y100.0125 I9.3170 J49.5426
G03 X158.1261 Y100.6705 I0.0000 J50.4891
G03 X165.9631 Y102.6151 I-7.9725 J48.8960
G03 X184.4866 Y113.7950 I-15.9451 J47.3541
G03 X196.5613 Y131.7707 I-34.5284 J36.2368
G03 X199.1213 Y140.6842 I-46.1019 J18.0648
G03 X199.9897 Y150.0011 I-49.5426 J9.3170
G03 X199.3317 Y158.1261 I-50.4891 J0.0000
G03 X197.3871 Y165.9631 I-48.8960 J-7.9725
G03 X186.2072 Y184.4866 I-47.3541 J-15.9451
G03 X168.2315 Y196.5613 I-36.2368 J-34.5284
G03 X159.3181 Y199.1213 I-18.0648 J-46.1019
G03 X150.0011 Y199.9897 I-9.3170 J-49.5426
G03 X141.8762 Y199.3317 I0.0000 J-50.4891
G03 X134.0391 Y197.3871 I7.9725 J-48.8960
G03 X115.5156 Y186.2072 I15.9451 J-47.3541
G03 X103.4409 Y168.2315 I34.5284 J-36.2368
G03 X100.8810 Y159.3181 I46.1019 J-18.0648
G03 X100.0125 Y150.0011 I49.5426 J-9.3170
G00 Z9 F800
G00 X185.3494 Y185.3494
G01 Z7.5 F800
G01 X185.3494 Y185.3494
G00 Z9 F800
G00 X49.9886 Y49.9886
G01 Z7.5 F800
G01 X49.9886 Y49.9886
G00 Z9 F800
G00 X114.6528 Y185.3494
G01 Z7.5 F800
G01 X114.6528 Y185.3494
G00 Z9 F800
G00 X250.0136 Y49.9886
G01 Z7.5 F800
G01 X250.0136 Y49.9886
G00 Z9 F800
G00 X49.9886 Y150.0011
G01 Z7.5 F800
G01 X49.9886 Y150.0011
G00 Z9 F800
G00 X150.0011 Y49.9886
G01 Z7.5 F800
G01 X150.0011 Y49.9886
G0 Z10

Generates INaN JNaN IInfinity JInfinity

I get this "GCode":

G00 X-0.2646 Y10.3188
G01 Z0 F10.00
G02 X0.2646 Y10.8479 IInfinity J-Infinity
G02 X0.2646 Y10.8479 INaN JNaN
G00 Z10
G00 X0.2646 Y10.3188
G01 Z0 F10.00
G02 X-0.2646 Y10.8479 IInfinity JInfinity
G02 X-0.2646 Y10.8479 INaN JNaN
G00 Z10
G00 X0.2646 Y10.5833

I don't think this is correct in any way.

Floating point dpi values

Hello,
some svg files has dpi value 25.4 because of exactly created by inch measurements

but dpi parameter doesnt except floating values.

I have tried to fix it but got error at last after several trial steps:
In a pattern binding: (w, h) = SVG.documentSize dpi doc

can you tell me if it can be done or not ?
Thanks in advance.

Series of Points instead of arcs (Feature Request)

There are couple important aspects to this approach:

Many consumer CNCs require recompiling the firmware to use arcs. For example, I had to recompile the marlin firmware of my 3d printer to run the resulting g-codes.

There are often problems when reproducing arcs that are too small. I am now experimenting with robots and using g-codes to convert to commands directly on the robot and too small values fall under calculation problems

Getting NaN values in arc commands

Hello
I have been trying out your tool with relatively good success. However, I have noticed that some curves in the SVG image return a NaN value for coordinates in the GCode. I've attached both the svg and the output from JuicyGcode as a text file (polytest_2 is the svg). I've tried this on multiple files and I always get this value somewhere in the GCode.

NaN_Values.txt
polytest_2.txt

Output mirrored in Y axis?

Really enjoying using your tool - runs fast and reliably. Thanks for writing it. The only issue I'm facing is that the output seems to be mirrored relative to the SVG, in the y axis. Is that deliberate? Any way to disable it?

cannot build with stack 2.3.3

hi @domoszlai thanks a lot for your work on juicy-gcode.

however, build does not work on my machine.

any suggestion to make progress?

Thanks!

$ stack --version
2.3.3 x86_64

$ stack build
Stack has not been tested with GHC versions above 8.10, and using 9.4.7, this may fail
Preparing to install GHC (tinfo6) to an isolated location.
This will not interfere with any system-level installation.
Already downloaded.                       
Unpacking GHC into /home/martin/.stack/programs/x86_64-linux/ghc-tinfo6-9.4.7.temp/                                                                                     Did not find executable at specified path: /home/martin/.stack/programs/x86_64-linux/ghc-tinfo6-9.4.7.temp/ghc-9.4.7/configure
                   
Error: Error encountered while configuring GHC with
         /home/martin/.stack/programs/x86_64-linux/ghc-tinfo6-9.4.7.temp/ghc-9.4.7/configure --prefix=/home/martin/.stack/programs/x86_64-linux/ghc-tinfo6-9.4.7/
         run in /home/martin/.stack/programs/x86_64-linux/ghc-tinfo6-9.4.7.temp/ghc-9.4.7/
       
       The following directories may now contain files, but won't be used by stack:
         - /home/martin/.stack/programs/x86_64-linux/ghc-tinfo6-9.4.7.temp/
         - /home/martin/.stack/programs/x86_64-linux/ghc-tinfo6-9.4.7/
       
       For more information consider rerunning with --verbose flag
       
Configuring GHC ...
$ stack --version
2.3.3 x86_64
Compiled with:
- Cabal-3.0.1.0
- Glob-0.10.1
- StateVar-1.2
- aeson-1.4.7.1
- annotated-wl-pprint-0.7.0
- ansi-terminal-0.10.3
- ansi-wl-pprint-0.6.9
- array-0.5.4.0
- asn1-encoding-0.9.6
- asn1-parse-0.9.5
- asn1-types-0.3.4
- async-2.2.2
- attoparsec-0.13.2.4
- attoparsec-iso8601-1.0.1.0
- auto-update-0.1.6
- base-4.13.0.0
- base-compat-0.11.1
- base-compat-batteries-0.11.1
- base-orphans-0.8.2
- base16-bytestring-0.1.1.7
- base64-bytestring-1.0.0.3
- basement-0.0.11
- bifunctors-5.5.7
- binary-0.8.7.0
- bitarray-0.0.1.1
- blaze-builder-0.4.1.0
- blaze-html-0.9.1.2
- blaze-markup-0.8.2.7
- bytestring-0.10.10.1
- casa-client-0.0.1
- casa-types-0.0.1
- case-insensitive-1.2.1.0
- cereal-0.5.8.1
- clock-0.8
- colour-2.3.5
- comonad-5.0.6
- conduit-1.3.2
- conduit-extra-1.3.5
- connection-0.3.1
- constraints-0.12
- containers-0.6.2.1
- contravariant-1.5.2
- cookie-0.4.5
- cryptohash-sha256-0.11.101.0
- cryptonite-0.26
- cryptonite-conduit-0.2.2
- data-default-class-0.1.2.0
- deepseq-1.4.4.0
- digest-0.0.1.2
- directory-1.3.6.0
- distributive-0.6.2
- dlist-0.8.0.8
- easy-file-0.2.2
- echo-0.1.3
- ed25519-0.0.5.0
- either-5.0.1.1
- enclosed-exceptions-1.0.3
- exceptions-0.10.4
- extra-1.7.4
- fast-logger-3.0.1
- file-embed-0.0.12.0
- filelock-0.1.1.5
- filepath-1.4.2.1
- fsnotify-0.3.0.1
- generic-deriving-1.13.1
- ghc-boot-th-8.8.4
- ghc-prim-0.5.3
- hackage-security-0.6.0.1
- hashable-1.3.0.0
- hi-file-parser-0.1.0.0
- hinotify-0.4
- hourglass-0.2.12
- hpack-0.34.2
- hpc-0.6.0.3
- http-api-data-0.4.1.1
- http-client-0.6.4.1
- http-client-tls-0.3.5.3
- http-conduit-2.3.7.3
- http-download-0.2.0.0
- http-types-0.12.3
- infer-license-0.2.0
- integer-gmp-1.0.2.0
- integer-logarithms-1.0.3
- libyaml-0.1.2
- lifted-async-0.10.1.2
- lifted-base-0.2.3.12
- megaparsec-8.0.0
- memory-0.15.0
- microlens-0.4.11.2
- microlens-mtl-0.2.0.1
- microlens-th-0.4.3.5
- mime-types-0.1.0.9
- monad-control-1.0.2.3
- monad-logger-0.3.34
- monad-loops-0.4.3
- mono-traversable-1.0.15.1
- mtl-2.2.2
- mustache-2.3.1
- neat-interpolation-0.3.2.6
- network-3.1.1.1
- network-uri-2.6.3.0
- old-locale-1.0.0.7
- old-time-1.1.0.3
- open-browser-0.2.1.0
- optparse-applicative-0.15.1.0
- pantry-0.4.0.2
- parsec-3.1.14.0
- parser-combinators-1.2.1
- path-0.7.0
- path-io-1.6.0
- path-pieces-0.2.1
- pem-0.2.4
- persistent-2.10.5.2
- persistent-sqlite-2.10.6.2
- persistent-template-2.8.2.3
- pretty-1.1.3.6
- primitive-0.7.0.1
- process-1.6.9.0
- profunctors-5.5.2
- project-template-0.2.1.0
- random-1.1
- regex-applicative-0.3.3.1
- regex-applicative-text-0.1.0.1
- resource-pool-0.2.3.2
- resourcet-1.2.4.2
- retry-0.8.1.2
- rio-0.1.18.0
- rio-orphans-0.1.1.0
- rio-prettyprint-0.1.1.0
- rts-1.0
- safe-0.3.19
- safe-exceptions-0.1.7.0
- scientific-0.3.6.2
- semigroupoids-5.3.4
- semigroups-0.19.1
- shelly-1.9.0
- silently-1.2.5.1
- socks-0.6.1
- split-0.2.3.4
- stm-2.5.0.0
- stm-chans-3.0.0.4
- streaming-commons-0.2.2.1
- syb-0.7.1
- tagged-0.8.6
- tar-0.5.1.1
- tar-conduit-0.3.2
- template-haskell-2.15.0.0
- temporary-1.3
- text-1.2.4.0
- text-metrics-0.3.0
- th-abstraction-0.3.2.0
- th-expand-syns-0.4.6.0
- th-lift-0.8.1
- th-lift-instances-0.1.17
- th-reify-many-0.1.9
- time-1.9.3
- time-compat-1.9.3
- tls-1.5.4
- transformers-0.5.6.2
- transformers-base-0.4.5.2
- transformers-compat-0.6.5
- type-equality-1
- typed-process-0.2.6.0
- unicode-transforms-0.3.6
- unix-2.7.2.2
- unix-compat-0.5.2
- unix-time-0.4.7
- unliftio-0.2.13
- unliftio-core-0.1.2.0
- unordered-containers-0.2.10.0
- uuid-types-1.0.3
- vector-0.12.1.2
- vector-algorithms-0.8.0.3
- x509-1.7.5
- x509-store-1.6.7
- x509-system-1.6.6
- x509-validation-1.6.11
- yaml-0.11.4.0
- zip-archive-0.4.1
- zlib-0.6.2.2

Control feedrate with object colour (Feature Request)

I think it would be helpful if juicy gcode could be able to get the colour of an object and use that to set that paths feedrate (and laser power).

Im trying to read through the code and do it myself, but im not very familiar with Haskell.
Any guidance would be great, if you dont want to do it your self.

Parametric tokens to use with flavor

I use PrusaSlicer a lot. And it has a very unique and powerful feature - it has internal parametric computable tokens. Almost every parameter in the application has a token name. And you can use them in any place of your gcode manipulation: if you want to write your personal parking routine, you can use width of heatbed or thickness of layer. You can even write some kind of script and test parameters changing with a layer height.

I found myself writing something like this:

Now I'm implementing token replacement and it's working great in my setup. But what if we could use some kind of scripting in our configuration? Width and height of the canvas can be used to write routines to center on image, date, filename, number of commands and comments - first thing that comes to mind

PrusaSlicer Example

Very simple example, but some people make very powerful combinations

Compiled binaries for rpi (armv6hf)

I want to use juicy-gcode in a project running on an rpi 3b. However the currently provided release binaries are only 64 bit. Would it be possible to also provide armv6hf binaries? I dont have any knowledge on Haskell and Stack and therefore I am not sure if this is possible.

How to support metric drawings?

Hello and thank you for this wonderful software!

I'm attempting to use this to plot a metric svg and am running into issues because -d assumes I'm using inches and does not support decimal values.

I would be able to do this if the -d option allowed decimal values, as I'd be able to put 25.4 in as the DPI (because 1 inch === 25.4mm) but the -d option is of type Int and a naive replacement of Int with Float or Double led me down a path towards Graphics.Svg.CssTypes.toUserUnit expecting Int, which is pretty reasonable.

I'm hoping I'm missing something simple here and that there's an easy way to provide svgs that are assuming the units are metric. :) I've attached the simple svg to provide an example of what I am trying to do.

Thank you again!

simple-square-svg.txt

Provide a sample flavour with software

How about attaching the template file to the release?
But you might like my other idea — what if you add this as an option argument to generate the template with a specific name?

Some NaN values generated

Hello,
for some of the svg files, generated NaN values for the G2 or G3

Can we overcome with this solution via constraint a conversion limit or sth. like that.


G01 X8.3642 Y53.2708
G01 X8.3748 Y53.2785
G02 XNaN YNaN INaN JNaN
G02 X8.3748 Y53.2979 INaN JNaN

Archive.zip*
*There is testtext.svg and testtext.gcode files in this archive

I cant really exactly understand how this code generating g2 conversion. There is numerical solution with iterations as i understand but it is really hard for to understand how it is implemented in haskell. I have tried to solve but i cant manage to do.
If you can help, it will be really really big favor.
Thanks in advance

Some files cause a freeze

This svg code cause a freeze
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<svg version="1.1" id="Layer_2_1_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="850.4px" height="948.4px" viewBox="0 0 850.4 948.4" enable-background="new 0 0 850.4 948.4" xml:space="preserve">
<g>
	<g>
		<g>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M593.1,518.8l-0.5,0.3L592,519
				c0,0,0.2-0.6,0.3-1.2c0.2-0.6,0.3-1.2,0.3-1.2l-0.2-0.3l0.1-0.4l1.4,0.3c0,0,0.2-0.8,0.5-2s0.6-2.7,0.9-4.3
				c0.3-1.6,0.6-3.1,0.8-4.3c0.1-0.6,0.2-1.1,0.2-1.4c0.1-0.3,0.1-0.5,0.1-0.5l-0.3-0.4l0.1-0.7l0.6,0.9c0,0,0,0.2-0.1,0.6
				s-0.1,0.9-0.3,1.5c-0.1,0.6-0.3,1.4-0.4,2.2c-0.1,0.8-0.3,1.7-0.5,2.5c-0.4,1.7-0.7,3.4-1,4.7s-0.5,2.1-0.5,2.1s-0.1,0.5-0.2,1
				c-0.1,0.5-0.2,1-0.2,1L593.1,518.8z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M590.3,534.6c0,0,0.2-0.4,0.4-1.1
				s0.6-1.8,1-3s0.8-2.7,1.3-4.3c0.4-1.6,0.9-3.2,1.4-4.9c0.4-1.7,0.9-3.4,1.2-5c0.2-0.8,0.4-1.6,0.5-2.3c0.2-0.7,0.3-1.4,0.4-2.1
				c0.3-1.3,0.5-2.3,0.6-3.1c0.1-0.7,0.2-1.2,0.2-1.2l0.3,0.5c0,0-0.1,0.4-0.2,1.2c-0.1,0.7-0.4,1.8-0.6,3.1
				c-0.5,2.6-1.3,5.9-2.2,9.3c-0.5,1.7-0.9,3.4-1.4,4.9c-0.5,1.6-0.9,3-1.3,4.3c-0.4,1.2-0.8,2.3-1,3c-0.1,0.4-0.2,0.6-0.3,0.8
				s-0.1,0.3-0.1,0.3L590.3,534.6z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M603.3,518.3c0,0-0.4-0.7-0.9-1.7
				c-0.3-0.5-0.6-1.1-1-1.7c-0.4-0.6-0.8-1.3-1.2-1.9c-0.8-1.3-1.6-2.6-2.2-3.6c-0.6-1-1-1.6-1-1.6s0.1-0.8,0.4-2
				c0.2-1.2,0.4-2.8,0.7-4.4c0.2-1.6,0.4-3.2,0.6-4.4c0.1-1.2,0.2-2,0.2-2l1.2-1c0,0,0.1-0.4,0.1-1.1c0.1-0.7,0.1-1.6,0.2-2.4
				c0.1-0.9,0.1-1.8,0.2-2.4c0-0.7,0.1-1.1,0.1-1.1l5,0.3c0,0,0,0.8-0.1,2s-0.2,2.8-0.4,4.4s-0.3,3.2-0.5,4.4s-0.3,2-0.3,2
				s0.8,1.1,1.6,2.3c0.8,1.1,1.5,2.3,1.5,2.3s-0.1,0.7-0.3,1.8s-0.4,2.5-0.7,3.9c-0.2,1.4-0.6,2.8-0.8,3.9s-0.4,1.8-0.4,1.8
				l-0.8,0.6l-0.5,2.1L603.3,518.3z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M602.5,515c0,0,0.3-1.3,0.7-3.4
				c0.2-1,0.4-2.2,0.6-3.5c0.2-1.3,0.5-2.6,0.7-4c0.9-5.4,1.4-10.9,1.4-10.9s-1-1.3-2-2.5c-0.5-0.6-1-1.2-1.4-1.7s-0.6-0.8-0.6-0.8
				l-9.1-0.6c0,0,0,0.3,0,0.7s-0.1,1-0.1,1.5c-0.1,1.1-0.2,2.2-0.2,2.2l-2.6-0.2c0,0-0.2,0.2-0.5,0.4s-0.6,0.5-1,0.8
				c-0.7,0.6-1.5,1.2-1.5,1.2l-10.2-1.1l-1.3,1l-3.6-0.4c0,0-1-1.1-1.9-2.1c-0.5-0.5-1-1-1.3-1.4c-0.4-0.4-0.6-0.6-0.6-0.6l-2-0.2
				l-1.3-1.3l0.1-0.8l7.9,0.6l1.7,1.9c0,0,0,0.6-0.1,1.2s-0.1,1.2-0.1,1.2l7.9,0.8l0.2-1.4c0,0,0.6-0.5,1.2-1c0.6-0.5,1.2-1,1.2-1
				l6.8,0.6c0,0,0-0.5,0.1-1.2s0.1-1.7,0.2-2.6c0.1-0.9,0.1-1.9,0.1-2.6s0-1.2,0-1.2l1.8-1.7l2.8,0.1l-0.1,2.3l2,0.1
				c0,0,1.2-1.2,2.4-2.3c1.2-1.2,2.3-2.4,2.3-2.4l12.8,0.1c0,0,0,0.8,0,1.6s0,1.6,0,1.6l-2.2,2.3l-3.9-0.2c0,0,0,0.2,0,0.5
				s0,0.8-0.1,1.3c-0.1,1.1-0.2,2.6-0.2,4c-0.1,1.5-0.2,2.9-0.3,4c0,0.5-0.1,1-0.1,1.3s-0.1,0.5-0.1,0.5s-0.7,0.6-1.4,1.2
				s-1.4,1.2-1.4,1.2s0,0.3-0.1,0.7c-0.1,0.5-0.2,1.2-0.3,2c-0.2,1.6-0.6,3.8-0.9,6c-0.2,1.1-0.4,2.2-0.6,3.2
				c-0.1,0.5-0.2,1-0.3,1.5c-0.1,0.5-0.2,0.9-0.3,1.3c-0.3,1.6-0.6,2.7-0.6,2.7L602.5,515z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M592.6,490.9l8,0.7c0,0,0.5,0.6,1,1.2
				c0.2,0.3,0.5,0.6,0.7,0.9c0.2,0.2,0.3,0.4,0.3,0.4l2.3,0.2c0,0-0.1,1-0.2,2c-0.1,0.5-0.1,1-0.2,1.4c0,0.4-0.1,0.6-0.1,0.6l-1-0.1
				c0,0-0.1,0.7-0.2,1.7c-0.1,0.5-0.1,1.1-0.2,1.7c-0.1,0.6-0.2,1.3-0.3,2c-0.2,1.3-0.4,2.7-0.6,3.7c-0.2,1-0.3,1.7-0.3,1.7l0.6,1
				l1.1,0.2c0,0,0.2-1.1,0.5-2.6c0.2-0.8,0.3-1.7,0.4-2.7c0.2-1,0.3-2,0.5-3.1c0.3-2.1,0.6-4.2,0.7-5.8c0.1-0.8,0.2-1.5,0.2-1.9
				c0.1-0.5,0.1-0.7,0.1-0.7s-1-1.3-2-2.5c-0.5-0.6-1-1.2-1.4-1.7s-0.6-0.8-0.6-0.8l-9.1-0.6c0,0,0,0.8-0.1,1.6
				C592.6,490.1,592.6,490.9,592.6,490.9z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M614.8,480.9l-1.2,1.3l-12.1-0.4
				c0,0,0.6-0.6,1.1-1.1c0.6-0.6,1.1-1.2,1.1-1.2l11.1,0.2c0,0,0,0.3,0,0.6C614.8,480.7,614.8,480.9,614.8,480.9z"/>
			<polygon fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" points="607.5,481.7 606,483.2 601.5,483.1 
				601.5,481.9 			"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M609.3,483.7c0,0,0,0.6-0.1,1.5
				s-0.1,2.2-0.2,3.4c-0.1,1.2-0.2,2.5-0.3,3.4s-0.1,1.5-0.1,1.5l-0.8,0.7l-0.8-0.1c0,0,0.1-0.6,0.1-1.4c0.1-0.8,0.2-2,0.3-3.1
				s0.1-2.3,0.2-3.1c0-0.8,0.1-1.4,0.1-1.4l-0.6-0.8v-0.9L609.3,483.7z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M599.8,493.1l-3-0.3c0,0-0.1,0.6-0.2,1.4
				c-0.1,0.9-0.2,2-0.4,3.2c-0.2,1.1-0.3,2.3-0.4,3.2c-0.1,0.4-0.1,0.8-0.2,1c0,0.3-0.1,0.4-0.1,0.4l1.4,2c0,0-0.2,1.3-0.5,3.2
				s-0.8,4.4-1.4,6.9c-0.3,1.3-0.6,2.5-0.9,3.7c-0.3,1.2-0.6,2.3-0.8,3.2s-0.5,1.7-0.6,2.3c-0.2,0.5-0.2,0.9-0.2,0.9L592,524
				c0,0-0.2,0.6-0.3,1.1c-0.2,0.6-0.3,1.1-0.3,1.1l-0.4-0.1l-0.5,1.5l0.4,0.8c0,0-0.1,0.2-0.1,0.5c-0.1,0.3-0.2,0.7-0.4,1.3
				c-0.4,1-0.8,2.4-1.3,3.8c-0.5,1.4-1,2.7-1.4,3.8c-0.4,1-0.7,1.7-0.7,1.7s0.5,1.2,0.9,2.3c0.2,0.6,0.4,1.2,0.6,1.6
				c0.2,0.4,0.3,0.7,0.3,0.7l1.6,0.6c0,0-0.5,1.1-0.9,2.2c-0.2,0.6-0.5,1.1-0.7,1.5s-0.3,0.7-0.3,0.7l0.5,1.5l2.5,1.1l0.4-0.8
				l1.9,0.9l-0.4,0.8l1.3,0.6c0,0,0.2-0.4,0.5-1s0.6-1.4,1-2.2c0.7-1.6,1.4-3.3,1.4-3.3l-2.3-0.9c0,0-0.1-0.2-0.2-0.5
				c-0.1-0.3-0.3-0.8-0.5-1.4c-0.5-1.2-1.1-2.8-1.7-4.3c-0.6-1.6-1.3-3.1-1.8-4.2c-0.5-1.1-0.8-1.9-0.8-1.9s0.1-0.4,0.4-1.1
				c0.2-0.7,0.6-1.8,1-3c0.8-2.5,1.8-5.9,2.6-9.2c0.2-0.8,0.4-1.7,0.6-2.5c0.2-0.8,0.4-1.7,0.6-2.5c0.1-0.4,0.2-0.8,0.3-1.2
				s0.2-0.8,0.2-1.1c0.2-0.7,0.3-1.4,0.4-2.1c0.3-1.3,0.4-2.4,0.6-3.1c0.1-0.8,0.2-1.2,0.2-1.2s0.5-0.4,1-0.7c0.5-0.4,1-0.8,1-0.8
				s0.1-0.7,0.3-1.7c0.1-0.5,0.2-1.1,0.3-1.7s0.2-1.3,0.3-2s0.2-1.3,0.3-2c0.1-0.6,0.1-1.2,0.2-1.7c0.1-1,0.2-1.7,0.2-1.7
				L599.8,493.1z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M592.1,537.7c0,0,0.3-1,0.9-2.4
				c0.3-0.7,0.5-1.6,0.8-2.5s0.6-1.9,0.9-2.8c0.3-1,0.6-1.9,0.9-2.9c0.3-0.9,0.5-1.8,0.7-2.5s0.4-1.3,0.5-1.8
				c0.1-0.4,0.2-0.7,0.2-0.7l-1.4-2.6l-1.3-0.3c0,0,0.2-0.6,0.3-1.2c0.1-0.3,0.1-0.6,0.2-0.8c0.1-0.2,0.1-0.4,0.1-0.4l2.6,0.6
				l1.3-0.9l1.3,0.3l-0.5,2.1l-0.8,0.5c0,0-0.2,0.6-0.4,1.5s-0.5,2.1-0.9,3.3c-0.3,1.2-0.7,2.4-0.9,3.3c-0.3,0.9-0.5,1.5-0.5,1.5
				l-0.6,0.4c0,0-0.1,0.5-0.4,1.2c-0.2,0.7-0.5,1.6-0.9,2.6c-0.3,0.9-0.6,1.9-0.9,2.6c-0.3,0.7-0.4,1.2-0.4,1.2s0.5,1.1,0.9,2.2
				c0.2,0.5,0.4,1.1,0.6,1.5c0.2,0.4,0.3,0.7,0.3,0.7l-0.6,1.5c0,0-0.5-1.3-1-2.6c-0.3-0.6-0.5-1.3-0.7-1.8
				C592.3,538,592.1,537.7,592.1,537.7z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M594.5,516.8c0,0,0,0.2-0.1,0.4
				s-0.1,0.5-0.2,0.8c-0.2,0.6-0.3,1.2-0.3,1.2l-1.7-0.4c0,0,0.2-0.6,0.3-1.2c0.1-0.3,0.1-0.6,0.2-0.8c0.1-0.2,0.1-0.4,0.1-0.4
				L594.5,516.8z"/>
			<g>
				<polygon fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" points="603,487.6 602,486.6 602,487.7 
					602.8,488.8 				"/>
				<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M603,489c0,0,0.7,0.9,1.5,1.9
					c0.7,1,1.5,1.9,1.5,1.9l0.1-1.2c0,0-0.7-0.9-1.5-1.9c-0.4-0.5-0.7-0.9-1-1.3c-0.3-0.3-0.5-0.6-0.5-0.6L603,489z"/>
			</g>
			<g>
				<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M592.3,484.5v0.8l0.6-0.5c0,0,0-0.2,0-0.4
					s0-0.4,0-0.4L592.3,484.5z"/>
				<polygon fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" points="592.3,482.5 592.3,484.3 
					592.8,483.7 592.8,482.8 593.8,481.9 593.8,481 				"/>
			</g>
			<polygon fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" points="587.3,493.4 586.8,493.8 
				584.8,493.6 585.3,493.2 			"/>
			<polygon fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" points="598,503.6 597.3,503.5 596.1,501.8 
				596.8,501.9 			"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M590,543.9l-0.6-0.3c0,0-0.4-1.1-0.8-2.2
				c-0.4-1.1-0.9-2.2-0.9-2.2l0.6,0.2c0,0,0.4,1.1,0.9,2.2C589.5,542.8,590,543.9,590,543.9z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M590.5,544.1L590.5,544.1
				c-0.1,0-0.5-1.1-0.9-2.2c-0.4-1.1-0.9-2.2-0.9-2.2h0.1c0,0,0.4,1.1,0.9,2.2C590.1,543,590.5,544.1,590.5,544.1z"/>
			<polygon fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" points="588,492.8 587.5,493.2 585.5,493 
				586,492.6 			"/>
			<polygon fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" points="575.8,493.3 575.1,493.7 
				573.3,493.5 573.8,493.1 			"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M599.6,498.9c0,0,0-0.3,0.1-0.7
				s0.1-1,0.2-1.6c0.1-1.2,0.3-2.4,0.3-2.4l-0.6-0.8l-1.7-0.2v0.3l1.1,0.1l0.7,0.9h0.3l-0.3,2.7l-0.3,0.2l-0.4,2.8l0.5,0.1
				L599.6,498.9z"/>
			<polygon fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" points="598.8,501 599.3,501.1 599.3,500.6 
				599,500.5 			"/>
			<polygon fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" points="599,497.5 598.5,500.2 598.6,500.2 
							"/>
			<polygon fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" points="588.5,538.6 588.3,539.3 
				587.6,539.1 588,538.4 			"/>
		</g>
		<g>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M593.1,433.6l-0.5-0.3l-0.6,0.2
				c0,0,0.2,0.6,0.3,1.2c0.2,0.6,0.3,1.2,0.3,1.2l-0.2,0.3l0.1,0.4l1.4-0.3c0,0,0.2,0.8,0.5,2s0.6,2.7,0.9,4.3
				c0.3,1.6,0.6,3.1,0.8,4.3c0.1,0.6,0.2,1.1,0.2,1.4c0.1,0.3,0.1,0.5,0.1,0.5l-0.3,0.4l0.1,0.7l0.6-0.9c0,0,0-0.2-0.1-0.6
				s-0.1-0.9-0.3-1.5c-0.1-0.6-0.3-1.4-0.4-2.2c-0.1-0.8-0.3-1.7-0.5-2.5c-0.4-1.7-0.7-3.4-1-4.7s-0.5-2.1-0.5-2.1s-0.1-0.5-0.2-1
				c-0.1-0.5-0.2-1-0.2-1L593.1,433.6z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M590.3,417.9c0,0,0.2,0.4,0.4,1.1
				s0.6,1.8,1,3s0.8,2.7,1.3,4.3c0.4,1.6,0.9,3.2,1.4,4.9c0.4,1.7,0.9,3.4,1.2,5c0.2,0.8,0.4,1.6,0.5,2.3c0.2,0.7,0.3,1.4,0.4,2.1
				c0.3,1.3,0.5,2.3,0.6,3.1c0.1,0.7,0.2,1.2,0.2,1.2l0.3-0.5c0,0-0.1-0.4-0.2-1.2c-0.1-0.7-0.4-1.8-0.6-3.1
				c-0.5-2.6-1.3-5.9-2.2-9.3c-0.5-1.7-0.9-3.4-1.4-4.9c-0.5-1.6-0.9-3-1.3-4.3c-0.4-1.2-0.8-2.3-1-3c-0.1-0.4-0.2-0.6-0.3-0.8
				s-0.1-0.3-0.1-0.3L590.3,417.9z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M603.3,434.1c0,0-0.4,0.7-0.9,1.7
				c-0.3,0.5-0.6,1.1-1,1.7s-0.8,1.3-1.2,1.9c-0.8,1.3-1.6,2.6-2.2,3.6c-0.6,1-1,1.6-1,1.6s0.1,0.8,0.4,2c0.2,1.2,0.4,2.8,0.7,4.4
				c0.2,1.6,0.4,3.2,0.6,4.4c0.1,1.2,0.2,2,0.2,2l1.2,1c0,0,0.1,0.4,0.1,1.1c0.1,0.7,0.1,1.6,0.2,2.4c0.1,0.9,0.1,1.8,0.2,2.4
				c0,0.7,0.1,1.1,0.1,1.1l5-0.3c0,0,0-0.8-0.1-2s-0.2-2.8-0.4-4.4s-0.3-3.2-0.5-4.4c-0.2-1.2-0.3-2-0.3-2s0.8-1.1,1.6-2.3
				c0.8-1.1,1.5-2.3,1.5-2.3s-0.1-0.7-0.3-1.8c-0.2-1.1-0.4-2.5-0.7-3.9c-0.2-1.4-0.6-2.8-0.8-3.9s-0.4-1.8-0.4-1.8l-0.8-0.6
				l-0.5-2.1L603.3,434.1z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M602.5,437.5c0,0,0.3,1.3,0.7,3.4
				c0.2,1,0.4,2.2,0.6,3.5c0.2,1.3,0.5,2.6,0.7,4c0.9,5.4,1.4,10.9,1.4,10.9s-1,1.3-2,2.5c-0.5,0.6-1,1.2-1.4,1.7s-0.6,0.8-0.6,0.8
				l-9.1,0.6c0,0,0-0.3,0-0.7s-0.1-1-0.1-1.5c-0.1-1.1-0.2-2.2-0.2-2.2l-2.6,0.2c0,0-0.2-0.2-0.5-0.4s-0.6-0.5-1-0.8
				c-0.7-0.6-1.5-1.2-1.5-1.2l-10.2,1.1l-1.3-1l-3.6,0.4c0,0-1,1.1-1.9,2.1c-0.5,0.5-1,1-1.3,1.4c-0.4,0.4-0.6,0.6-0.6,0.6l-2,0.2
				l-1.3,1.3l0.1,0.8l7.9-0.6l1.7-1.9c0,0,0-0.6-0.1-1.2s-0.1-1.2-0.1-1.2l7.9-0.8l0.2,1.4c0,0,0.6,0.5,1.2,1c0.6,0.5,1.2,1,1.2,1
				l6.8-0.6c0,0,0,0.5,0.1,1.2s0.1,1.7,0.2,2.6c0.1,0.9,0.1,1.9,0.1,2.6s0,1.2,0,1.2l1.8,1.7l2.8-0.1l-0.1-2.3l2-0.1
				c0,0,1.2,1.2,2.4,2.3c1.2,1.2,2.3,2.4,2.3,2.4L616,474c0,0,0-0.8,0-1.6s0-1.6,0-1.6l-2.2-2.3l-3.9,0.2c0,0,0-0.2,0-0.5
				s0-0.8-0.1-1.3c-0.1-1.1-0.2-2.6-0.2-4c-0.1-1.5-0.2-2.9-0.3-4c0-0.5-0.1-1-0.1-1.3s-0.1-0.5-0.1-0.5s-0.7-0.6-1.4-1.2
				s-1.4-1.2-1.4-1.2s0-0.3-0.1-0.7c-0.1-0.5-0.2-1.2-0.3-2c-0.2-1.6-0.6-3.8-0.9-6c-0.2-1.1-0.4-2.2-0.6-3.2
				c-0.1-0.5-0.2-1-0.3-1.5s-0.2-0.9-0.3-1.3c-0.3-1.6-0.6-2.7-0.6-2.7L602.5,437.5z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M592.6,461.6l8-0.7c0,0,0.5-0.6,1-1.2
				c0.2-0.3,0.5-0.6,0.7-0.9c0.2-0.2,0.3-0.4,0.3-0.4l2.3-0.2c0,0-0.1-1-0.2-2c-0.1-0.5-0.1-1-0.2-1.4c0-0.4-0.1-0.6-0.1-0.6l-1,0.1
				c0,0-0.1-0.7-0.2-1.7c-0.1-0.5-0.1-1.1-0.2-1.7c-0.1-0.6-0.2-1.3-0.3-2c-0.2-1.3-0.4-2.7-0.6-3.7c-0.2-1-0.3-1.7-0.3-1.7l0.6-1
				l1.1-0.2c0,0,0.2,1.1,0.5,2.6c0.2,0.8,0.3,1.7,0.4,2.7c0.2,1,0.3,2,0.5,3.1c0.3,2.1,0.6,4.2,0.7,5.8c0.1,0.8,0.2,1.5,0.2,1.9
				c0.1,0.5,0.1,0.7,0.1,0.7s-1,1.3-2,2.5c-0.5,0.6-1,1.2-1.4,1.7s-0.6,0.8-0.6,0.8l-9.1,0.6c0,0,0-0.8-0.1-1.6
				C592.6,462.4,592.6,461.6,592.6,461.6z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M614.8,471.5l-1.2-1.3l-12.1,0.4
				c0,0,0.6,0.6,1.1,1.1c0.6,0.6,1.1,1.2,1.1,1.2l11.1-0.2c0,0,0-0.3,0-0.6C614.8,471.8,614.8,471.5,614.8,471.5z"/>
			<polygon fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" points="607.5,470.8 606,469.2 601.5,469.4 
				601.5,470.6 			"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M609.3,468.8c0,0,0-0.6-0.1-1.5
				s-0.1-2.2-0.2-3.4c-0.1-1.2-0.2-2.5-0.3-3.4s-0.1-1.5-0.1-1.5l-0.8-0.7l-0.8,0.1c0,0,0.1,0.6,0.1,1.4c0.1,0.8,0.2,2,0.3,3.1
				s0.1,2.3,0.2,3.1c0,0.8,0.1,1.4,0.1,1.4l-0.6,0.8v0.9L609.3,468.8z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M599.8,459.4l-3,0.3c0,0-0.1-0.6-0.2-1.4
				c-0.1-0.9-0.2-2-0.4-3.2c-0.2-1.1-0.3-2.3-0.4-3.2c-0.1-0.4-0.1-0.8-0.2-1c0-0.3-0.1-0.4-0.1-0.4l1.4-2c0,0-0.2-1.3-0.5-3.2
				s-0.8-4.4-1.4-6.9c-0.3-1.3-0.6-2.5-0.9-3.7c-0.3-1.2-0.6-2.3-0.8-3.2c-0.2-0.9-0.5-1.7-0.6-2.3c-0.2-0.5-0.2-0.9-0.2-0.9
				l-0.6,0.2c0,0-0.2-0.6-0.3-1.1c-0.2-0.6-0.3-1.1-0.3-1.1l-0.4,0.1l-0.5-1.5l0.4-0.8c0,0-0.1-0.2-0.1-0.5
				c-0.1-0.3-0.2-0.7-0.4-1.3c-0.4-1-0.8-2.4-1.3-3.8s-1-2.7-1.4-3.8c-0.4-1-0.7-1.7-0.7-1.7s0.5-1.2,0.9-2.3
				c0.2-0.6,0.4-1.2,0.6-1.6c0.2-0.4,0.3-0.7,0.3-0.7l1.6-0.6c0,0-0.5-1.1-0.9-2.2c-0.2-0.6-0.5-1.1-0.7-1.5s-0.3-0.7-0.3-0.7
				l0.5-1.5l2.5-1.1l0.4,0.8l1.9-0.9l-0.4-0.8l1.3-0.6c0,0,0.2,0.4,0.5,1s0.6,1.4,1,2.2c0.7,1.6,1.4,3.3,1.4,3.3l-2.3,0.9
				c0,0-0.1,0.2-0.2,0.5c-0.1,0.3-0.3,0.8-0.5,1.4c-0.5,1.2-1.1,2.8-1.7,4.3c-0.6,1.6-1.3,3.1-1.8,4.2s-0.8,1.9-0.8,1.9
				s0.1,0.4,0.4,1.1c0.2,0.7,0.6,1.8,1,3c0.8,2.5,1.8,5.9,2.6,9.2c0.2,0.8,0.4,1.7,0.6,2.5c0.2,0.8,0.4,1.7,0.6,2.5
				c0.1,0.4,0.2,0.8,0.3,1.2c0.1,0.4,0.2,0.8,0.2,1.1c0.2,0.7,0.3,1.4,0.4,2.1c0.3,1.3,0.4,2.4,0.6,3.1c0.1,0.8,0.2,1.2,0.2,1.2
				s0.5,0.4,1,0.7c0.5,0.4,1,0.8,1,0.8s0.1,0.7,0.3,1.7c0.1,0.5,0.2,1.1,0.3,1.7s0.2,1.3,0.3,2s0.2,1.3,0.3,2
				c0.1,0.6,0.1,1.2,0.2,1.7c0.1,1,0.2,1.7,0.2,1.7L599.8,459.4z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M592.1,414.8c0,0,0.3,1,0.9,2.4
				c0.3,0.7,0.5,1.6,0.8,2.5s0.6,1.9,0.9,2.8c0.3,1,0.6,1.9,0.9,2.9c0.3,0.9,0.5,1.8,0.7,2.5s0.4,1.3,0.5,1.8
				c0.1,0.4,0.2,0.7,0.2,0.7l-1.4,2.6l-1.3,0.3c0,0,0.2,0.6,0.3,1.2c0.1,0.3,0.1,0.6,0.2,0.8c0.1,0.2,0.1,0.4,0.1,0.4l2.6-0.6
				l1.3,0.9l1.3-0.3l-0.5-2.1l-0.8-0.5c0,0-0.2-0.6-0.4-1.5s-0.5-2.1-0.9-3.3c-0.3-1.2-0.7-2.4-0.9-3.3c-0.3-0.9-0.5-1.5-0.5-1.5
				l-0.6-0.4c0,0-0.1-0.5-0.4-1.2c-0.2-0.7-0.5-1.6-0.9-2.6c-0.3-0.9-0.6-1.9-0.9-2.6c-0.3-0.7-0.4-1.2-0.4-1.2s0.5-1.1,0.9-2.2
				c0.2-0.5,0.4-1.1,0.6-1.5c0.2-0.4,0.3-0.7,0.3-0.7l-0.6-1.5c0,0-0.5,1.3-1,2.6c-0.3,0.6-0.5,1.3-0.7,1.8
				C592.3,414.4,592.1,414.8,592.1,414.8z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M594.5,435.7c0,0,0-0.2-0.1-0.4
				c-0.1-0.2-0.1-0.5-0.2-0.8c-0.2-0.6-0.3-1.2-0.3-1.2l-1.7,0.4c0,0,0.2,0.6,0.3,1.2c0.1,0.3,0.1,0.6,0.2,0.8
				c0.1,0.2,0.1,0.4,0.1,0.4L594.5,435.7z"/>
			<g>
				<polygon fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" points="603,464.9 602,465.9 602,464.8 
					602.8,463.7 				"/>
				<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M603,463.5c0,0,0.7-0.9,1.5-1.9
					c0.7-1,1.5-1.9,1.5-1.9l0.1,1.2c0,0-0.7,0.9-1.5,1.9c-0.4,0.5-0.7,0.9-1,1.3c-0.3,0.3-0.5,0.6-0.5,0.6L603,463.5z"/>
			</g>
			<g>
				<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M592.3,468v-0.8l0.6,0.5c0,0,0,0.2,0,0.4
					s0,0.4,0,0.4L592.3,468z"/>
				<polygon fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" points="592.3,470 592.3,468.2 
					592.8,468.7 592.8,469.7 593.8,470.6 593.8,471.5 				"/>
			</g>
			<polygon fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" points="587.3,459 586.8,458.6 584.8,458.8 
				585.3,459.2 			"/>
			<polygon fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" points="598,448.9 597.3,449 596.1,450.6 
				596.8,450.5 			"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M590,408.6l-0.6,0.3c0,0-0.4,1.1-0.8,2.2
				c-0.4,1.1-0.9,2.2-0.9,2.2l0.6-0.2c0,0,0.4-1.1,0.9-2.2C589.5,409.7,590,408.6,590,408.6z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M590.5,408.3L590.5,408.3
				c-0.1,0-0.5,1.1-0.9,2.2s-0.9,2.2-0.9,2.2h0.1c0,0,0.4-1.1,0.9-2.2C590.1,409.5,590.5,408.3,590.5,408.3z"/>
			<polygon fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" points="588,459.6 587.5,459.2 585.5,459.4 
				586,459.8 			"/>
			<polygon fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" points="575.8,459.1 575.1,458.8 573.3,459 
				573.8,459.4 			"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M599.6,453.6c0,0,0,0.3,0.1,0.7
				s0.1,1,0.2,1.6c0.1,1.2,0.3,2.4,0.3,2.4l-0.6,0.8l-1.7,0.2V459l1.1-0.1l0.7-0.9h0.3l-0.3-2.7l-0.3-0.2l-0.4-2.8l0.5-0.1
				L599.6,453.6z"/>
			<polygon fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" points="598.8,451.5 599.3,451.4 
				599.3,451.9 599,452 			"/>
			<polygon fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" points="599,455 598.5,452.2 598.6,452.2 
							"/>
			<polygon fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" points="588.5,413.8 588.3,413.2 
				587.6,413.4 588,414.1 			"/>
		</g>
	</g>
	<g>
		<g>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M579,578.4c0,0,0.1-0.1,0.2-0.3
				c0.1-0.2,0.3-0.4,0.5-0.7c0.4-0.6,1-1.6,1.7-2.6c1.4-2.2,3.2-5.2,4.9-8.2c0.9-1.5,1.7-3,2.4-4.5c0.7-1.4,1.4-2.8,2-4
				c1.1-2.3,1.9-3.9,1.9-3.9l1.4,0.6c0,0-0.8,1.6-1.9,3.9c-0.6,1.2-1.3,2.5-2,4c-0.8,1.4-1.6,3-2.5,4.5c-1.7,3-3.5,6-4.9,8.3
				c-0.7,1.1-1.3,2-1.7,2.7c-0.2,0.3-0.4,0.6-0.5,0.7c-0.1,0.2-0.2,0.3-0.2,0.3L579,578.4z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M576.8,576.9c0,0,0.1-0.1,0.2-0.3
				c0.1-0.2,0.3-0.4,0.5-0.7c0.4-0.6,1-1.5,1.7-2.6c1.4-2.2,3.1-5.1,4.8-8.1c0.8-1.5,1.6-3,2.4-4.4c0.7-1.4,1.4-2.8,2-3.9
				c1.1-2.3,1.8-3.9,1.8-3.9l0.6,0.3c0,0-0.7,1.5-1.9,3.9c-0.6,1.1-1.3,2.5-2,3.9c-0.8,1.4-1.6,2.9-2.4,4.4c-1.7,3-3.5,5.9-4.8,8.1
				c-0.7,1.1-1.3,2-1.7,2.6c-0.2,0.3-0.4,0.6-0.5,0.7c-0.1,0.2-0.2,0.3-0.2,0.3L576.8,576.9z"/>
		</g>
		<g>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M555.8,606.7c0,0,1.2-1.2,3-3.1
				c0.9-0.9,1.9-2.1,3-3.2c1.1-1.2,2.2-2.5,3.4-3.8c1.1-1.3,2.2-2.7,3.3-3.9c1-1.3,2-2.5,2.8-3.5c1.6-2.1,2.6-3.5,2.6-3.5l1.2,0.9
				c0,0-1.1,1.4-2.6,3.5c-0.8,1-1.8,2.2-2.8,3.5s-2.2,2.6-3.3,3.9c-1.2,1.3-2.3,2.6-3.4,3.8c-1.1,1.2-2.1,2.3-3,3.3
				c-1.8,1.9-3,3.1-3,3.1L555.8,606.7z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M553.8,604.8c0,0,1.2-1.2,3-3.1
				c0.9-0.9,1.9-2,3-3.2s2.2-2.5,3.3-3.7c1.1-1.3,2.2-2.6,3.2-3.8c1-1.3,1.9-2.4,2.7-3.4c1.5-2,2.6-3.4,2.6-3.4l0.5,0.4
				c0,0-1,1.4-2.6,3.4c-0.8,1-1.7,2.2-2.7,3.4s-2.1,2.6-3.2,3.9c-1.1,1.3-2.3,2.6-3.3,3.8c-1.1,1.2-2.1,2.3-3,3.2
				c-1.8,1.8-3,3.1-3,3.1L553.8,604.8z"/>
		</g>
		<g>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M574.8,584.3c0,0,0.8-1.1,1.6-2.2
				c0.4-0.6,0.8-1.1,1.1-1.5s0.5-0.7,0.5-0.7l1.2,0.8c0,0-0.2,0.3-0.5,0.7s-0.7,1-1.1,1.6c-0.8,1.1-1.6,2.2-1.6,2.2L574.8,584.3z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M572.6,582.7c0,0,0.8-1.1,1.6-2.2
				c0.4-0.5,0.8-1.1,1-1.5c0.3-0.4,0.5-0.7,0.5-0.7l0.5,0.3c0,0-0.2,0.3-0.5,0.7s-0.7,1-1.1,1.5c-0.8,1.1-1.6,2.2-1.6,2.2
				L572.6,582.7z"/>
		</g>
	</g>
	<g>
		<g>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M579,374.1c0,0,0.1,0.1,0.2,0.3
				c0.1,0.2,0.3,0.4,0.5,0.7c0.4,0.6,1,1.6,1.7,2.6c1.4,2.2,3.2,5.2,4.9,8.2c0.9,1.5,1.7,3,2.4,4.5c0.7,1.4,1.4,2.8,2,4
				c1.1,2.3,1.9,3.9,1.9,3.9l1.4-0.6c0,0-0.8-1.6-1.9-3.9c-0.6-1.2-1.3-2.5-2-4c-0.8-1.4-1.6-3-2.5-4.5c-1.7-3-3.5-6-4.9-8.3
				c-0.7-1.1-1.3-2-1.7-2.7c-0.2-0.3-0.4-0.6-0.5-0.7c-0.1-0.2-0.2-0.3-0.2-0.3L579,374.1z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M576.8,375.6c0,0,0.1,0.1,0.2,0.3
				c0.1,0.2,0.3,0.4,0.5,0.7c0.4,0.6,1,1.5,1.7,2.6c1.4,2.2,3.1,5.1,4.8,8.1c0.8,1.5,1.6,3,2.4,4.4c0.7,1.4,1.4,2.8,2,3.9
				c1.1,2.3,1.8,3.9,1.8,3.9l0.6-0.3c0,0-0.7-1.5-1.9-3.9c-0.6-1.1-1.3-2.5-2-3.9c-0.8-1.4-1.6-2.9-2.4-4.4c-1.7-3-3.5-5.9-4.8-8.1
				c-0.7-1.1-1.3-2-1.7-2.6c-0.2-0.3-0.4-0.6-0.5-0.7c-0.1-0.2-0.2-0.3-0.2-0.3L576.8,375.6z"/>
		</g>
		<g>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M555.8,345.7c0,0,1.2,1.2,3,3.1
				c0.9,0.9,1.9,2.1,3,3.2c1.1,1.2,2.2,2.5,3.4,3.8c1.1,1.3,2.2,2.7,3.3,3.9c1,1.3,2,2.5,2.8,3.5c1.6,2.1,2.6,3.5,2.6,3.5l1.2-0.9
				c0,0-1.1-1.4-2.6-3.5c-0.8-1-1.8-2.2-2.8-3.5s-2.2-2.6-3.3-3.9c-1.2-1.3-2.3-2.6-3.4-3.8c-1.1-1.2-2.1-2.3-3-3.3
				c-1.8-1.9-3-3.1-3-3.1L555.8,345.7z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M553.8,347.6c0,0,1.2,1.2,3,3.1
				c0.9,0.9,1.9,2,3,3.2s2.2,2.5,3.3,3.7c1.1,1.3,2.2,2.6,3.2,3.8c1,1.3,1.9,2.4,2.7,3.4c1.5,2,2.6,3.4,2.6,3.4l0.5-0.4
				c0,0-1-1.4-2.6-3.4c-0.8-1-1.7-2.2-2.7-3.4s-2.1-2.6-3.2-3.9c-1.1-1.3-2.3-2.6-3.3-3.8c-1.1-1.2-2.1-2.3-3-3.2
				c-1.8-1.8-3-3.1-3-3.1L553.8,347.6z"/>
		</g>
		<g>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M574.8,368.1c0,0,0.8,1.1,1.6,2.2
				c0.4,0.6,0.8,1.1,1.1,1.5s0.5,0.7,0.5,0.7l1.2-0.8c0,0-0.2-0.3-0.5-0.7c-0.3-0.4-0.7-1-1.1-1.6c-0.8-1.1-1.6-2.2-1.6-2.2
				L574.8,368.1z"/>
			<path fill="none" stroke="#231F20" stroke-width="0.2835" stroke-miterlimit="10" d="M572.6,369.7c0,0,0.8,1.1,1.6,2.2
				c0.4,0.5,0.8,1.1,1,1.5c0.3,0.4,0.5,0.7,0.5,0.7l0.5-0.3c0,0-0.2-0.3-0.5-0.7c-0.3-0.4-0.7-1-1.1-1.5c-0.8-1.1-1.6-2.2-1.6-2.2
				L572.6,369.7z"/>
		</g>
	</g>
</g>
</svg>

It can be rendered with -b command, but because of #10 (or something else) full file isn't drawing correctly.

Interactive mode feature

It occurred to me that it might be interesting to have such a tool as an interactive application, so that you could run it as a kind of microservice and just send pieces of vector to it in real time and execute the resulting code on the fly. This could be an interesting pipeline.

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.