diff --git a/Cargo.lock b/Cargo.lock index 317d74b..be8f229 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -914,9 +914,9 @@ checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "lyon_geom" -version = "1.0.6" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8af69edc087272df438b3ee436c4bb6d7c04aa8af665cfd398feae627dbd8570" +checksum = "4336502e29e32af93cf2dad2214ed6003c17ceb5bd499df77b1de663b9042b92" dependencies = [ "arrayvec", "euclid", @@ -1321,17 +1321,6 @@ dependencies = [ "zmij", ] -[[package]] -name = "serde_repr" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -1370,24 +1359,18 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "svg2gcode" -version = "0.3.4" +version = "0.4.0" dependencies = [ - "euclid", "g-code", - "log", "lyon_geom", "paste", - "peg", "pretty_assertions", - "rand", "roxmltree", "rust_decimal", - "rustc-hash", "serde", "serde_json", - "serde_repr", + "svg2star", "svgtypes", - "uom", ] [[package]] @@ -1410,7 +1393,6 @@ name = "svg2gcode-web" version = "0.0.18" dependencies = [ "base64", - "codespan", "codespan-reporting", "g-code", "gloo-file 0.3.0", @@ -1422,6 +1404,7 @@ dependencies = [ "serde", "serde_json", "svg2gcode", + "svg2star", "svgtypes", "thiserror", "wasm-bindgen", @@ -1433,6 +1416,23 @@ dependencies = [ "zip", ] +[[package]] +name = "svg2star" +version = "0.4.0" +dependencies = [ + "euclid", + "log", + "lyon_geom", + "peg", + "rand", + "roxmltree", + "rustc-hash", + "serde", + "serde_json", + "svgtypes", + "uom", +] + [[package]] name = "svgtypes" version = "0.16.1" diff --git a/Cargo.toml b/Cargo.toml index 3da08e3..1600cc9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -members = ["lib", "cli", "web"] +members = ["g_code", "cli", "web", "star"] default-members = ["cli"] resolver = "2" @@ -12,6 +12,7 @@ license = "MIT" [workspace.dependencies] g-code = "0.6.0" log = "0" +lyon_geom = "=1.0.19" roxmltree = "0.21" serde_json = "1" svgtypes = "0.16" diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 5e5e495..cbf92f4 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -8,7 +8,7 @@ repository.workspace = true license.workspace = true [dependencies] -svg2gcode = { path = "../lib", version = "0.3.4", features = ["serde"] } +svg2gcode = { path = "../g_code", version = "0.4.0", features = ["serde"] } env_logger = "0.11" log.workspace = true g-code.workspace = true diff --git a/cli/src/main.rs b/cli/src/main.rs index 0d6a5ef..395e6c5 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -1,3 +1,5 @@ +#![cfg_attr(not(test), deny(unused_crate_dependencies))] + use std::{ env, fs::File, @@ -14,7 +16,9 @@ use g_code::{ use log::{error, info}; use roxmltree::ParsingOptions; use svg2gcode::{ - ConversionOptions, Machine, Settings, SupportedFunctionality, Version, svg2program, + Machine, + config::{ConversionOptions, Settings, SupportedFunctionality, Version}, + svg_to_gcode, }; use svgtypes::LengthListParser; @@ -122,7 +126,7 @@ fn main() -> io::Result<()> { { let conversion = &mut settings.conversion; - conversion.dpi = opt.dpi.unwrap_or(conversion.dpi); + conversion.inner.dpi = opt.dpi.unwrap_or(conversion.inner.dpi); conversion.feedrate = opt.feedrate.unwrap_or(conversion.feedrate); conversion.tolerance = opt.tolerance.unwrap_or(conversion.tolerance); } @@ -160,7 +164,7 @@ fn main() -> io::Result<()> { .take(2) .enumerate() { - settings.conversion.origin[i] = Some(dimension_origin); + settings.conversion.inner.origin[i] = Some(dimension_origin); } } } @@ -177,12 +181,12 @@ fn main() -> io::Result<()> { settings.postprocess.newline_before_comment = newline_before_comment; } - settings.conversion.extra_attribute_name = opt.extra_attribute_name; + settings.conversion.inner.extra_attribute_name = opt.extra_attribute_name; if let Some(optimize_path_order) = opt.optimize_path_order { - settings.conversion.optimize_path_order = optimize_path_order; + settings.conversion.inner.optimize_path_order = optimize_path_order; } if let Some(selector_filter) = opt.selector_filter { - settings.conversion.selector_filter = Some(selector_filter); + settings.conversion.inner.selector_filter = Some(selector_filter); } if let Version::Unknown(ref unknown) = settings.version { @@ -334,7 +338,7 @@ fn main() -> io::Result<()> { ) .unwrap(); - let program = svg2program(&document, &settings.conversion, options, machine); + let program = svg_to_gcode(&document, &settings.conversion, options, machine); if let Some(out_path) = opt.out { format_gcode_io( diff --git a/lib/Cargo.toml b/g_code/Cargo.toml similarity index 70% rename from lib/Cargo.toml rename to g_code/Cargo.toml index 15fa32a..5f1b5c1 100644 --- a/lib/Cargo.toml +++ b/g_code/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "svg2gcode" -version = "0.3.4" +version = "0.4.0" description = "Convert paths in SVG files to GCode for a pen plotter, laser engraver, or other machine." authors.workspace = true edition.workspace = true @@ -8,20 +8,14 @@ repository.workspace = true license.workspace = true [features] -serde = ["dep:serde", "dep:serde_repr", "g-code/serde"] +serde = ["dep:serde", "g-code/serde", "svg2star/serde"] [dependencies] +svg2star = { path = "../star", version = "0.4.0" } g-code.workspace = true -peg = "0.8" -rand = "0.8" -rustc-hash = "1" rust_decimal = { version = "1", default-features = false } -lyon_geom = "=1.0.6" -euclid = "0.22" -log.workspace = true -uom = "0.38" +lyon_geom.workspace = true roxmltree.workspace = true -svgtypes.workspace = true paste = "1" [dependencies.serde] @@ -30,10 +24,7 @@ optional = true version = "1" features = ["derive", "std"] -[dependencies.serde_repr] -optional = true -version = "0.1" - [dev-dependencies] serde_json.workspace = true pretty_assertions = "1.4.1" +svgtypes.workspace = true diff --git a/g_code/src/config/mod.rs b/g_code/src/config/mod.rs new file mode 100644 index 0000000..3cc9f19 --- /dev/null +++ b/g_code/src/config/mod.rs @@ -0,0 +1,295 @@ +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; +pub use svg2star::lower::{ConversionConfig, ConversionOptions}; + +#[cfg(all(test, feature = "serde"))] +#[allow(dead_code)] +mod v0; +#[cfg(all(test, feature = "serde"))] +#[allow(dead_code)] +mod v1; +#[cfg(all(test, feature = "serde"))] +#[allow(dead_code)] +mod v2; +#[cfg(all(test, feature = "serde"))] +#[allow(dead_code)] +mod v3; +#[cfg(all(test, feature = "serde"))] +#[allow(dead_code)] +mod v4; +#[cfg(all(test, feature = "serde"))] +#[allow(dead_code)] +mod v5; + +/// A cross-platform type used to store all configuration types. +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] +#[derive(Debug, Default, Clone, PartialEq)] +pub struct Settings { + pub conversion: GCodeConfig, + pub machine: MachineConfig, + pub postprocess: PostprocessConfig, + #[cfg_attr(feature = "serde", serde(default = "Version::unknown"))] + pub version: Version, +} + +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] +#[derive(Debug, Default, Clone, PartialEq)] +pub struct MachineConfig { + pub supported_functionality: SupportedFunctionality, + pub tool_on_sequence: Option, + pub tool_off_sequence: Option, + pub begin_sequence: Option, + pub end_sequence: Option, +} + +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] +#[derive(Debug, Clone, PartialEq)] +pub struct GCodeConfig { + #[cfg_attr(feature = "serde", serde(flatten))] + pub inner: ConversionConfig, + pub tolerance: f64, + pub feedrate: f64, +} + +impl Default for GCodeConfig { + fn default() -> Self { + Self { + inner: Default::default(), + tolerance: 0.002, + feedrate: 300.0, + } + } +} + +#[derive(Debug, Default, Clone, PartialEq)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] +pub struct SupportedFunctionality { + /// Indicates support for G2/G3 circular interpolation. + /// + /// Most modern machines support this. Old ones like early MakerBot 3D printers do not. + pub circular_interpolation: bool, +} + +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] +#[derive(Debug, Default, Clone, PartialEq)] +/// Operations performed after G-Code generation. +pub struct PostprocessConfig { + /// Convenience field for [g_code::emit::FormatOptions] field + #[cfg_attr(feature = "serde", serde(default))] + pub checksums: bool, + /// Convenience field for [g_code::emit::FormatOptions] field + #[cfg_attr(feature = "serde", serde(default))] + pub line_numbers: bool, + /// Convenience field for [g_code::emit::FormatOptions] field + #[cfg_attr(feature = "serde", serde(default))] + pub newline_before_comment: bool, +} + +impl Settings { + /// Try to automatically upgrade the supported version. + /// + /// This will return an error if: + /// + /// - Settings version is [`Version::Unknown`]. + /// - There are breaking changes requiring manual intervention. In which case this does a partial update to that point. + pub fn try_upgrade(&mut self) -> Result<(), &'static str> { + loop { + match self.version { + // Compatibility for M2 by default + Version::V0 => { + self.machine.end_sequence = Some(format!( + "{} M2", + self.machine.end_sequence.take().unwrap_or_default() + )); + self.version = Version::V5; + } + Version::V5 => break Ok(()), + Version::Unknown(_) => break Err("cannot upgrade unknown version"), + } + } + } +} + +/// Used to control behavioral changes for [`Settings`]. +/// +/// There were already 3 non-breaking version bumps (V1 -> V4) so versioning starts off with [`Version::V5`]. +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] +pub enum Version { + /// Implicitly versioned settings from before this type was introduced. + V0, + /// M2 is no longer appended to the program by default. + V5, + #[cfg_attr(feature = "serde", serde(untagged))] + Unknown(String), +} + +impl Version { + /// Returns the most recent [`Version`]. This is useful for asking users to upgrade externally-stored settings. + pub const fn latest() -> Self { + Self::V5 + } + + /// Default version for old settings. + pub const fn unknown() -> Self { + Self::V0 + } +} + +impl std::fmt::Display for Version { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Version::V0 => f.write_str("V0"), + Version::V5 => f.write_str("V5"), + Version::Unknown(unknown) => f.write_str(unknown), + } + } +} + +impl Default for Version { + fn default() -> Self { + Self::latest() + } +} + +#[cfg(all(test, feature = "serde"))] +mod tests { + use super::*; + + #[test] + fn deserialize_v1_config_succeeds() { + let json = r#" + { + "conversion": { + "tolerance": 0.002, + "feedrate": 300.0, + "dpi": 96.0 + }, + "machine": { + "supported_functionality": { + "circular_interpolation": true + }, + "tool_on_sequence": null, + "tool_off_sequence": null, + "begin_sequence": null, + "end_sequence": null + }, + "postprocess": { + "origin": [ + 0.0, + 0.0 + ] + } + } + "#; + serde_json::from_str::(json).unwrap(); + } + + #[test] + fn deserialize_v2_config_succeeds() { + let json = r#" + { + "conversion": { + "tolerance": 0.002, + "feedrate": 300.0, + "dpi": 96.0 + }, + "machine": { + "supported_functionality": { + "circular_interpolation": true + }, + "tool_on_sequence": null, + "tool_off_sequence": null, + "begin_sequence": null, + "end_sequence": null + }, + "postprocess": { } + } + "#; + serde_json::from_str::(json).unwrap(); + } + + #[test] + fn deserialize_v3_config_succeeds() { + let json = r#" + { + "conversion": { + "tolerance": 0.002, + "feedrate": 300.0, + "dpi": 96.0 + }, + "machine": { + "supported_functionality": { + "circular_interpolation": true + }, + "tool_on_sequence": null, + "tool_off_sequence": null, + "begin_sequence": null, + "end_sequence": null + }, + "postprocess": { + "checksums": false, + "line_numbers": false + } + } + "#; + serde_json::from_str::(json).unwrap(); + } + + #[test] + fn deserialize_v4_config_succeeds() { + let json = r#" + { + "conversion": { + "tolerance": 0.002, + "feedrate": 300.0, + "dpi": 96.0 + }, + "machine": { + "supported_functionality": { + "circular_interpolation": true + }, + "tool_on_sequence": null, + "tool_off_sequence": null, + "begin_sequence": null, + "end_sequence": null + }, + "postprocess": { + "checksums": false, + "line_numbers": false, + "newline_before_comment": false + } + } + "#; + serde_json::from_str::(json).unwrap(); + } + + #[test] + fn deserialize_v5_config_succeeds() { + let json = r#" + { + "conversion": { + "tolerance": 0.002, + "feedrate": 300.0, + "dpi": 96.0 + }, + "machine": { + "supported_functionality": { + "circular_interpolation": true + }, + "tool_on_sequence": null, + "tool_off_sequence": null, + "begin_sequence": null, + "end_sequence": null + }, + "postprocess": { + "checksums": false, + "line_numbers": false, + "newline_before_comment": false + }, + "version": "V5" + } + "#; + serde_json::from_str::(json).unwrap(); + } +} diff --git a/g_code/src/config/v0.rs b/g_code/src/config/v0.rs new file mode 100644 index 0000000..fa03153 --- /dev/null +++ b/g_code/src/config/v0.rs @@ -0,0 +1,29 @@ +/// Shared types for the V1–V5 JSON format. +/// +/// `conversion` held `tolerance`, `feedrate`, and `dpi`. +/// `machine` held `supported_functionality` and the sequence strings. +use serde::Deserialize; + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Conversion { + pub tolerance: f64, + pub feedrate: f64, + pub dpi: f64, +} + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Machine { + pub supported_functionality: SupportedFunctionality, + pub tool_on_sequence: Option, + pub tool_off_sequence: Option, + pub begin_sequence: Option, + pub end_sequence: Option, +} + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +pub struct SupportedFunctionality { + pub circular_interpolation: bool, +} diff --git a/g_code/src/config/v1.rs b/g_code/src/config/v1.rs new file mode 100644 index 0000000..626d6cd --- /dev/null +++ b/g_code/src/config/v1.rs @@ -0,0 +1,18 @@ +/// V1 JSON format: `postprocess` had an `origin` field. +use serde::Deserialize; + +use super::v0::{Conversion, Machine}; + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Settings { + pub conversion: Conversion, + pub machine: Machine, + pub postprocess: Postprocess, +} + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Postprocess { + pub origin: [f64; 2], +} diff --git a/g_code/src/config/v2.rs b/g_code/src/config/v2.rs new file mode 100644 index 0000000..de49212 --- /dev/null +++ b/g_code/src/config/v2.rs @@ -0,0 +1,16 @@ +/// V2 JSON format: `postprocess` became an empty object. +use serde::Deserialize; + +use super::v0::{Conversion, Machine}; + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Settings { + pub conversion: Conversion, + pub machine: Machine, + pub postprocess: Postprocess, +} + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Postprocess {} diff --git a/g_code/src/config/v3.rs b/g_code/src/config/v3.rs new file mode 100644 index 0000000..7a6fde5 --- /dev/null +++ b/g_code/src/config/v3.rs @@ -0,0 +1,19 @@ +/// V3 JSON format: `postprocess` gained `checksums` and `line_numbers`. +use serde::Deserialize; + +use super::v0::{Conversion, Machine}; + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Settings { + pub conversion: Conversion, + pub machine: Machine, + pub postprocess: Postprocess, +} + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Postprocess { + pub checksums: bool, + pub line_numbers: bool, +} diff --git a/g_code/src/config/v4.rs b/g_code/src/config/v4.rs new file mode 100644 index 0000000..054e10c --- /dev/null +++ b/g_code/src/config/v4.rs @@ -0,0 +1,20 @@ +/// V4 JSON format: `postprocess` gained `newline_before_comment`. +use serde::Deserialize; + +use super::v0::{Conversion, Machine}; + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Settings { + pub conversion: Conversion, + pub machine: Machine, + pub postprocess: Postprocess, +} + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Postprocess { + pub checksums: bool, + pub line_numbers: bool, + pub newline_before_comment: bool, +} diff --git a/g_code/src/config/v5.rs b/g_code/src/config/v5.rs new file mode 100644 index 0000000..136ceb6 --- /dev/null +++ b/g_code/src/config/v5.rs @@ -0,0 +1,21 @@ +/// V5 JSON format: explicit `version` field introduced at the top level. +use serde::Deserialize; + +use super::v0::{Conversion, Machine}; + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Settings { + pub conversion: Conversion, + pub machine: Machine, + pub postprocess: Postprocess, + pub version: String, +} + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +pub struct Postprocess { + pub checksums: bool, + pub line_numbers: bool, + pub newline_before_comment: bool, +} diff --git a/g_code/src/lib.rs b/g_code/src/lib.rs new file mode 100644 index 0000000..06a410b --- /dev/null +++ b/g_code/src/lib.rs @@ -0,0 +1,35 @@ +//! Implementation of SVG to G-code conversion. + +#![cfg_attr(not(test), deny(unused_crate_dependencies))] + +use g_code::emit::Token; +use roxmltree::Document; +use svg2star::lower::{ConversionOptions, svg_to_turtle}; + +pub use self::{machine::Machine, turtle::GCodeTurtle}; +use crate::config::GCodeConfig; + +pub mod config; +/// Emulates the generic state of an arbitrary machine that runs G-Code. +pub mod machine; +/// Drives G-Code generation. +mod turtle; + +#[cfg(test)] +mod tests; + +/// Top-level function for converting an SVG [`Document`] into g-code +pub fn svg_to_gcode<'a, 'input: 'a>( + doc: &'a Document, + config: &GCodeConfig, + options: ConversionOptions, + machine: Machine<'input>, +) -> Vec> { + let gcode_turtle = self::turtle::GCodeTurtle { + machine, + tolerance: config.tolerance, + feedrate: config.feedrate, + program: vec![], + }; + svg_to_turtle(doc, &config.inner, options, gcode_turtle).program +} diff --git a/lib/src/machine.rs b/g_code/src/machine.rs similarity index 84% rename from lib/src/machine.rs rename to g_code/src/machine.rs index d25c57e..44c6bb3 100644 --- a/lib/src/machine.rs +++ b/g_code/src/machine.rs @@ -3,8 +3,8 @@ use g_code::{ emit::Token, parse::{ast::Snippet, snippet_parser}, }; -#[cfg(feature = "serde")] -use serde::{Deserialize, Serialize}; + +use crate::config::SupportedFunctionality; /// Whether the tool is active (i.e. cutting) #[derive(Copy, Clone, PartialEq, Eq, Debug)] @@ -35,25 +35,6 @@ pub struct Machine<'input> { empty_snippet: Snippet<'input>, } -#[derive(Debug, Default, Clone, PartialEq)] -#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] -pub struct MachineConfig { - pub supported_functionality: SupportedFunctionality, - pub tool_on_sequence: Option, - pub tool_off_sequence: Option, - pub begin_sequence: Option, - pub end_sequence: Option, -} - -#[derive(Debug, Default, Clone, PartialEq)] -#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] -pub struct SupportedFunctionality { - /// Indicates support for G2/G3 circular interpolation. - /// - /// Most modern machines support this. Old ones like early MakerBot 3D printers do not. - pub circular_interpolation: bool, -} - impl<'input> Machine<'input> { pub fn new( supported_functionality: SupportedFunctionality, diff --git a/g_code/src/tests.rs b/g_code/src/tests.rs new file mode 100644 index 0000000..04f7558 --- /dev/null +++ b/g_code/src/tests.rs @@ -0,0 +1,328 @@ +use ::g_code::emit::{FormatOptions, Token}; +use pretty_assertions::assert_eq; +use roxmltree::ParsingOptions; +use svg2star::lower::ConversionConfig; +use svgtypes::{Length, LengthUnit}; + +use super::*; +use crate::config::SupportedFunctionality; + +/// The values change between debug and release builds for circular interpolation, +/// so only check within a rough tolerance +const TOLERANCE: f64 = 1E-10; + +fn get_actual( + input: &str, + circular_interpolation: bool, + dimensions: [Option; 2], +) -> Vec> { + let gcode_config = Default::default(); + let options = ConversionOptions { dimensions }; + let document = roxmltree::Document::parse_with_options( + input, + ParsingOptions { + allow_dtd: true, + ..Default::default() + }, + ) + .unwrap(); + + let machine = Machine::new( + SupportedFunctionality { + circular_interpolation, + }, + None, + None, + None, + None, + ); + svg_to_gcode(&document, &gcode_config, options, machine) +} + +fn assert_close(left: Vec>, right: Vec>) { + let mut code = String::new(); + ::g_code::emit::format_gcode_fmt(left.iter(), FormatOptions::default(), &mut code).unwrap(); + assert_eq!(left.len(), right.len(), "{code}"); + for (i, pair) in left.into_iter().zip(right.into_iter()).enumerate() { + match pair { + (Token::Field(l), Token::Field(r)) => { + assert_eq!(l.letters, r.letters); + if let (Some(l_value), Some(r_value)) = (l.value.as_f64(), r.value.as_f64()) { + assert!( + (l_value - r_value).abs() < TOLERANCE, + "Values differ significantly at {i}: {l} vs {r} ({})", + (l_value - r_value).abs() + ); + } else { + assert_eq!(l, r); + } + } + (l, r) => { + assert_eq!(l, r, "Differs at {i}"); + } + } + } +} + +#[test] +fn square_produces_expected_gcode() { + let expected = ::g_code::parse::file_parser(include_str!("../tests/square.gcode")) + .unwrap() + .iter_emit_tokens() + .collect::>(); + let actual = get_actual(include_str!("../tests/square.svg"), false, [None; 2]); + + assert_close(actual, expected); +} + +#[test] +fn square_dimension_override_produces_expected_gcode() { + let side_length = Length { + number: 10., + unit: LengthUnit::Mm, + }; + + let expected = ::g_code::parse::file_parser(include_str!("../tests/square.gcode")) + .unwrap() + .iter_emit_tokens() + .collect::>(); + + for square in [ + include_str!("../tests/square.svg"), + include_str!("../tests/square_dimensionless.svg"), + ] { + assert_close( + get_actual(square, false, [Some(side_length); 2]), + expected.clone(), + ); + assert_close( + get_actual(square, false, [Some(side_length), None]), + expected.clone(), + ); + assert_close( + get_actual(square, false, [None, Some(side_length)]), + expected.clone(), + ); + } +} + +#[test] +fn square_transformed_produces_expected_gcode() { + let square_transformed = include_str!("../tests/square_transformed.svg"); + let expected = ::g_code::parse::file_parser(include_str!("../tests/square_transformed.gcode")) + .unwrap() + .iter_emit_tokens() + .collect::>(); + let actual = get_actual(square_transformed, false, [None; 2]); + + assert_close(actual, expected) +} + +#[test] +fn square_transformed_nested_produces_expected_gcode() { + let square_transformed = include_str!("../tests/square_transformed_nested.svg"); + let expected = + ::g_code::parse::file_parser(include_str!("../tests/square_transformed_nested.gcode")) + .unwrap() + .iter_emit_tokens() + .collect::>(); + let actual = get_actual(square_transformed, false, [None; 2]); + + assert_close(actual, expected) +} + +#[test] +fn square_viewport_produces_expected_gcode() { + let square_viewport = include_str!("../tests/square_viewport.svg"); + let expected = ::g_code::parse::file_parser(include_str!("../tests/square_viewport.gcode")) + .unwrap() + .iter_emit_tokens() + .collect::>(); + let actual = get_actual(square_viewport, false, [None; 2]); + + assert_close(actual, expected); +} + +#[test] +fn circular_interpolation_produces_expected_gcode() { + let circular_interpolation = include_str!("../tests/circular_interpolation.svg"); + let expected = + ::g_code::parse::file_parser(include_str!("../tests/circular_interpolation.gcode")) + .unwrap() + .iter_emit_tokens() + .collect::>(); + let actual = get_actual(circular_interpolation, true, [None; 2]); + + assert_close(actual, expected) +} + +#[test] +fn svg_with_smooth_curves_produces_expected_gcode() { + let svg = include_str!("../tests/smooth_curves.svg"); + + let expected = ::g_code::parse::file_parser(include_str!("../tests/smooth_curves.gcode")) + .unwrap() + .iter_emit_tokens() + .collect::>(); + + let file = if cfg!(debug_assertions) { + include_str!("../tests/smooth_curves_circular_interpolation.gcode") + } else { + include_str!("../tests/smooth_curves_circular_interpolation_release.gcode") + }; + let expected_circular_interpolation = ::g_code::parse::file_parser(file) + .unwrap() + .iter_emit_tokens() + .collect::>(); + assert_close(get_actual(svg, false, [None; 2]), expected); + + assert_close( + get_actual(svg, true, [None; 2]), + expected_circular_interpolation, + ); +} + +#[test] +fn shapes_produces_expected_gcode() { + let shapes = include_str!("../tests/shapes.svg"); + let expected = ::g_code::parse::file_parser(include_str!("../tests/shapes.gcode")) + .unwrap() + .iter_emit_tokens() + .collect::>(); + let actual = get_actual(shapes, false, [None; 2]); + + assert_close(actual, expected) +} + +#[test] +fn use_defs_produces_expected_gcode() { + let svg = include_str!("../tests/use_defs.svg"); + let expected = ::g_code::parse::file_parser(include_str!("../tests/use_defs.gcode")) + .unwrap() + .iter_emit_tokens() + .collect::>(); + let actual = get_actual(svg, false, [None; 2]); + + assert_close(actual, expected) +} + +#[test] +fn use_xlink_href_produces_expected_gcode() { + let svg = include_str!("../tests/use_xlink_href.svg"); + let expected = ::g_code::parse::file_parser(include_str!("../tests/use_xlink_href.gcode")) + .unwrap() + .iter_emit_tokens() + .collect::>(); + let actual = get_actual(svg, false, [None; 2]); + + assert_close(actual, expected) +} + +#[test] +fn use_symbol_produces_expected_gcode() { + let svg = include_str!("../tests/use_symbol.svg"); + let expected = ::g_code::parse::file_parser(include_str!("../tests/use_symbol.gcode")) + .unwrap() + .iter_emit_tokens() + .collect::>(); + let actual = get_actual(svg, false, [None; 2]); + + assert_close(actual, expected); +} + +#[test] +fn transform_origin_produces_expected_gcode() { + let svg = include_str!("../tests/transform_origin.svg"); + let expected = ::g_code::parse::file_parser(include_str!("../tests/transform_origin.gcode")) + .unwrap() + .iter_emit_tokens() + .collect::>(); + let actual = get_actual(svg, false, [None; 2]); + assert_close(actual, expected) +} + +/// `transform-origin="5 5"` with `rotate(90)` should be identical to the +/// manual SVG equivalent `translate(5,5) rotate(90) translate(-5,-5)` +#[test] +fn transform_origin_matches_manual_equivalent() { + let with_origin = get_actual( + include_str!("../tests/transform_origin.svg"), + false, + [None; 2], + ); + let manual = get_actual( + include_str!("../tests/transform_origin_equivalent.svg"), + false, + [None; 2], + ); + assert_close(with_origin, manual) +} + +/// Regression test for https://github.com/sameer/svg2gcode/issues/105 +#[test] +fn issue_105_optimize_path_order_does_not_shrink_output() { + let svg = include_str!("../tests/square.svg"); + let document = roxmltree::Document::parse_with_options( + svg, + ParsingOptions { + allow_dtd: true, + ..Default::default() + }, + ) + .unwrap(); + let machine = Machine::new( + SupportedFunctionality { + circular_interpolation: false, + }, + None, + None, + None, + None, + ); + let normal = svg_to_gcode( + &document, + &Default::default(), + ConversionOptions::default(), + machine.clone(), + ); + let optimized = svg_to_gcode( + &document, + &GCodeConfig { + inner: ConversionConfig { + optimize_path_order: true, + ..Default::default() + }, + ..Default::default() + }, + ConversionOptions::default(), + machine, + ); + + // Collect and sort all numeric coordinate values from each output. + // Path reordering changes token order but not the set of coordinate values. + // The bug caused optimized values to be ~0.265x smaller than normal. + let mut normal_values: Vec = normal + .iter() + .filter_map(|t| { + if let Token::Field(f) = t { + f.value.as_f64() + } else { + None + } + }) + .collect(); + let mut optimized_values: Vec = optimized + .iter() + .filter_map(|t| { + if let Token::Field(f) = t { + f.value.as_f64() + } else { + None + } + }) + .collect(); + + normal_values.sort_by(f64::total_cmp); + optimized_values.sort_by(f64::total_cmp); + assert_eq!(normal_values, optimized_values); +} diff --git a/lib/src/turtle/g_code.rs b/g_code/src/turtle.rs similarity index 98% rename from lib/src/turtle/g_code.rs rename to g_code/src/turtle.rs index 81b3636..3c3974a 100644 --- a/lib/src/turtle/g_code.rs +++ b/g_code/src/turtle.rs @@ -3,13 +3,13 @@ use std::{borrow::Cow, fmt::Debug}; use ::g_code::{command, emit::Token}; use lyon_geom::{CubicBezierSegment, Point, QuadraticBezierSegment, SvgArc}; use rust_decimal::{Decimal, prelude::*}; - -use super::Turtle; -use crate::{ - arc::{ArcOrLineSegment, FlattenWithArcs}, - machine::Machine, +use svg2star::turtle::{ + Turtle, + elements::{ArcOrLineSegment, FlattenWithArcs}, }; +use crate::machine::Machine; + /// Maps path segments into g-code operations #[derive(Debug)] pub struct GCodeTurtle<'input> { diff --git a/lib/tests/circular_interpolation.gcode b/g_code/tests/circular_interpolation.gcode similarity index 100% rename from lib/tests/circular_interpolation.gcode rename to g_code/tests/circular_interpolation.gcode diff --git a/lib/tests/circular_interpolation.svg b/g_code/tests/circular_interpolation.svg similarity index 100% rename from lib/tests/circular_interpolation.svg rename to g_code/tests/circular_interpolation.svg diff --git a/lib/tests/shapes.gcode b/g_code/tests/shapes.gcode similarity index 100% rename from lib/tests/shapes.gcode rename to g_code/tests/shapes.gcode diff --git a/lib/tests/shapes.svg b/g_code/tests/shapes.svg similarity index 100% rename from lib/tests/shapes.svg rename to g_code/tests/shapes.svg diff --git a/lib/tests/smooth_curves.gcode b/g_code/tests/smooth_curves.gcode similarity index 52% rename from lib/tests/smooth_curves.gcode rename to g_code/tests/smooth_curves.gcode index 4baff02..585a842 100644 --- a/lib/tests/smooth_curves.gcode +++ b/g_code/tests/smooth_curves.gcode @@ -22,39 +22,41 @@ G1 X25.114 Y32.879 F300 G1 X25.191 Y32.904 F300 G1 X25.264 Y32.94 F300 G1 X25.305 Y32.967 F300 -G1 X25.733 Y33.254 F300 -G1 X26.158 Y33.549 F300 -G1 X26.581 Y33.854 F300 -G1 X27 Y34.168 F300 -G1 X27.33 Y34.424 F300 -G1 X27.656 Y34.686 F300 -G1 X27.977 Y34.954 F300 -G1 X28.294 Y35.228 F300 -G1 X28.605 Y35.508 F300 -G1 X28.91 Y35.794 F300 -G1 X29.208 Y36.086 F300 -G1 X29.5 Y36.384 F300 -G1 X29.783 Y36.688 F300 -G1 X30.059 Y36.999 F300 -G1 X30.283 Y37.263 F300 -G1 X30.5 Y37.531 F300 -G1 X30.711 Y37.804 F300 -G1 X30.915 Y38.081 F300 -G1 X31.113 Y38.363 F300 -G1 X31.302 Y38.649 F300 -G1 X31.459 Y38.899 F300 -G1 X31.61 Y39.151 F300 -G1 X31.755 Y39.408 F300 -G1 X31.894 Y39.668 F300 -G1 X32.027 Y39.931 F300 -G1 X32.154 Y40.199 F300 -G1 X32.274 Y40.47 F300 -G1 X32.387 Y40.743 F300 -G1 X32.493 Y41.02 F300 -G1 X32.591 Y41.301 F300 -G1 X32.683 Y41.587 F300 -G1 X32.768 Y41.877 F300 -G1 X32.845 Y42.172 F300 +G1 X25.59 Y33.157 F300 +G1 X25.873 Y33.35 F300 +G1 X26.156 Y33.548 F300 +G1 X26.436 Y33.749 F300 +G1 X26.715 Y33.953 F300 +G1 X26.992 Y34.162 F300 +G1 X27.266 Y34.374 F300 +G1 X27.538 Y34.59 F300 +G1 X27.806 Y34.81 F300 +G1 X28.071 Y35.034 F300 +G1 X28.333 Y35.263 F300 +G1 X28.59 Y35.495 F300 +G1 X28.844 Y35.731 F300 +G1 X29.093 Y35.972 F300 +G1 X29.337 Y36.217 F300 +G1 X29.577 Y36.466 F300 +G1 X29.811 Y36.719 F300 +G1 X30.04 Y36.977 F300 +G1 X30.263 Y37.239 F300 +G1 X30.48 Y37.505 F300 +G1 X30.69 Y37.776 F300 +G1 X30.894 Y38.052 F300 +G1 X31.092 Y38.332 F300 +G1 X31.281 Y38.617 F300 +G1 X31.464 Y38.906 F300 +G1 X31.639 Y39.201 F300 +G1 X31.805 Y39.5 F300 +G1 X31.964 Y39.803 F300 +G1 X32.114 Y40.112 F300 +G1 X32.255 Y40.426 F300 +G1 X32.387 Y40.744 F300 +G1 X32.51 Y41.068 F300 +G1 X32.623 Y41.396 F300 +G1 X32.726 Y41.73 F300 +G1 X32.819 Y42.068 F300 G1 X32.914 Y42.471 F300 G1 X32.93 Y42.556 F300 G1 X32.934 Y42.643 F300 @@ -107,55 +109,52 @@ G1 X39.891 Y34.544 F300 G1 X40.129 Y34.337 F300 G1 X40.375 Y34.138 F300 G1 X40.482 Y34.057 F300 -G1 X40.681 Y33.913 F300 -G1 X40.886 Y33.775 F300 -G1 X41.097 Y33.642 F300 -G1 X41.313 Y33.515 F300 -G1 X41.535 Y33.393 F300 -G1 X41.762 Y33.278 F300 -G1 X41.991 Y33.169 F300 -G1 X42.223 Y33.068 F300 -G1 X42.459 Y32.972 F300 -G1 X42.699 Y32.884 F300 -G1 X42.942 Y32.802 F300 -G1 X43.187 Y32.728 F300 -G1 X43.435 Y32.66 F300 -G1 X43.684 Y32.6 F300 -G1 X43.935 Y32.548 F300 -G1 X44.187 Y32.503 F300 -G1 X44.439 Y32.466 F300 -G1 X44.693 Y32.437 F300 -G1 X44.948 Y32.416 F300 -G1 X45.203 Y32.403 F300 -G1 X45.457 Y32.399 F300 -G1 X45.71 Y32.403 F300 -G1 X45.962 Y32.415 F300 -G1 X46.214 Y32.436 F300 -G1 X46.464 Y32.467 F300 -G1 X46.713 Y32.506 F300 -G1 X46.959 Y32.554 F300 -G1 X47.203 Y32.612 F300 -G1 X47.445 Y32.679 F300 +G1 X40.699 Y33.901 F300 +G1 X40.922 Y33.751 F300 +G1 X41.152 Y33.609 F300 +G1 X41.388 Y33.473 F300 +G1 X41.629 Y33.344 F300 +G1 X41.875 Y33.223 F300 +G1 X42.125 Y33.11 F300 +G1 X42.38 Y33.004 F300 +G1 X42.638 Y32.906 F300 +G1 X42.9 Y32.816 F300 +G1 X43.165 Y32.734 F300 +G1 X43.432 Y32.661 F300 +G1 X43.702 Y32.596 F300 +G1 X43.973 Y32.541 F300 +G1 X44.246 Y32.494 F300 +G1 X44.52 Y32.456 F300 +G1 X44.795 Y32.428 F300 +G1 X45.071 Y32.409 F300 +G1 X45.346 Y32.4 F300 +G1 X45.62 Y32.4 F300 +G1 X45.894 Y32.411 F300 +G1 X46.167 Y32.432 F300 +G1 X46.438 Y32.463 F300 +G1 X46.707 Y32.505 F300 +G1 X46.974 Y32.557 F300 +G1 X47.238 Y32.621 F300 G1 X47.683 Y32.755 F300 -G1 X47.883 Y32.829 F300 -G1 X48.074 Y32.91 F300 -G1 X48.257 Y32.996 F300 -G1 X48.431 Y33.089 F300 -G1 X48.597 Y33.187 F300 -G1 X48.757 Y33.292 F300 -G1 X48.909 Y33.401 F300 -G1 X49.058 Y33.519 F300 -G1 X49.201 Y33.643 F300 -G1 X49.337 Y33.773 F300 -G1 X49.468 Y33.909 F300 -G1 X49.594 Y34.051 F300 -G1 X49.714 Y34.199 F300 -G1 X49.828 Y34.352 F300 -G1 X49.953 Y34.535 F300 -G1 X50.072 Y34.726 F300 -G1 X50.184 Y34.925 F300 -G1 X50.291 Y35.133 F300 -G1 X50.392 Y35.349 F300 +G1 X47.888 Y32.831 F300 +G1 X48.086 Y32.915 F300 +G1 X48.276 Y33.006 F300 +G1 X48.458 Y33.104 F300 +G1 X48.633 Y33.21 F300 +G1 X48.801 Y33.322 F300 +G1 X48.962 Y33.442 F300 +G1 X49.116 Y33.568 F300 +G1 X49.263 Y33.701 F300 +G1 X49.404 Y33.841 F300 +G1 X49.538 Y33.987 F300 +G1 X49.667 Y34.139 F300 +G1 X49.789 Y34.298 F300 +G1 X49.905 Y34.463 F300 +G1 X50.016 Y34.634 F300 +G1 X50.121 Y34.81 F300 +G1 X50.22 Y34.993 F300 +G1 X50.314 Y35.181 F300 +G1 X50.404 Y35.374 F300 G1 X50.488 Y35.573 F300 G1 X50.601 Y35.87 F300 G1 X50.703 Y36.172 F300 @@ -200,29 +199,32 @@ G1 X47.126 Y46.296 F300 G1 X47.35 Y46.488 F300 G1 X47.566 Y46.689 F300 G1 X47.635 Y46.756 F300 -G1 X47.825 Y46.953 F300 -G1 X48.006 Y47.154 F300 -G1 X48.179 Y47.359 F300 -G1 X48.344 Y47.569 F300 -G1 X48.502 Y47.782 F300 -G1 X48.653 Y48 F300 -G1 X48.798 Y48.223 F300 -G1 X48.936 Y48.449 F300 -G1 X49.068 Y48.679 F300 -G1 X49.194 Y48.913 F300 -G1 X49.315 Y49.15 F300 -G1 X49.43 Y49.39 F300 -G1 X49.562 Y49.681 F300 -G1 X49.686 Y49.975 F300 -G1 X49.804 Y50.274 F300 -G1 X49.916 Y50.575 F300 -G1 X50.023 Y50.88 F300 -G1 X50.149 Y51.262 F300 -G1 X50.268 Y51.648 F300 -G1 X50.38 Y52.035 F300 -G1 X50.487 Y52.423 F300 -G1 X50.623 Y52.944 F300 -G1 X50.752 Y53.461 F300 +G1 X47.844 Y46.973 F300 +G1 X48.042 Y47.196 F300 +G1 X48.231 Y47.424 F300 +G1 X48.412 Y47.658 F300 +G1 X48.583 Y47.897 F300 +G1 X48.746 Y48.142 F300 +G1 X48.901 Y48.391 F300 +G1 X49.049 Y48.645 F300 +G1 X49.189 Y48.903 F300 +G1 X49.323 Y49.166 F300 +G1 X49.45 Y49.431 F300 +G1 X49.57 Y49.7 F300 +G1 X49.685 Y49.973 F300 +G1 X49.794 Y50.248 F300 +G1 X49.898 Y50.525 F300 +G1 X49.997 Y50.805 F300 +G1 X50.092 Y51.086 F300 +G1 X50.183 Y51.37 F300 +G1 X50.27 Y51.654 F300 +G1 X50.353 Y51.94 F300 +G1 X50.433 Y52.226 F300 +G1 X50.511 Y52.513 F300 +G1 X50.586 Y52.8 F300 +G1 X50.659 Y53.087 F300 +G1 X50.73 Y53.373 F300 +G1 X50.8 Y53.659 F300 G1 X50.877 Y53.975 F300 G1 X50.877 Y53.975 F300 G1 X51.187 Y53.874 F300 @@ -233,31 +235,29 @@ G1 X52.461 Y53.585 F300 G1 X52.785 Y53.542 F300 G1 X53.11 Y53.511 F300 G1 X53.205 Y53.504 F300 -G1 X53.408 Y53.491 F300 -G1 X53.61 Y53.485 F300 -G1 X53.812 Y53.486 F300 -G1 X54.014 Y53.494 F300 -G1 X54.215 Y53.509 F300 -G1 X54.416 Y53.531 F300 -G1 X54.615 Y53.56 F300 -G1 X54.812 Y53.596 F300 -G1 X55.006 Y53.64 F300 -G1 X55.199 Y53.69 F300 -G1 X55.389 Y53.749 F300 -G1 X55.577 Y53.815 F300 -G1 X55.76 Y53.888 F300 -G1 X55.94 Y53.969 F300 -G1 X56.116 Y54.058 F300 -G1 X56.288 Y54.154 F300 -G1 X56.455 Y54.259 F300 -G1 X56.618 Y54.371 F300 -G1 X56.775 Y54.491 F300 -G1 X56.927 Y54.62 F300 -G1 X57.048 Y54.732 F300 -G1 X57.166 Y54.85 F300 -G1 X57.279 Y54.974 F300 -G1 X57.387 Y55.105 F300 -G1 X57.492 Y55.242 F300 +G1 X53.413 Y53.491 F300 +G1 X53.622 Y53.485 F300 +G1 X53.83 Y53.486 F300 +G1 X54.038 Y53.495 F300 +G1 X54.246 Y53.512 F300 +G1 X54.452 Y53.535 F300 +G1 X54.656 Y53.567 F300 +G1 X54.859 Y53.606 F300 +G1 X55.059 Y53.653 F300 +G1 X55.257 Y53.707 F300 +G1 X55.452 Y53.77 F300 +G1 X55.643 Y53.84 F300 +G1 X55.832 Y53.919 F300 +G1 X56.016 Y54.006 F300 +G1 X56.195 Y54.101 F300 +G1 X56.37 Y54.204 F300 +G1 X56.54 Y54.316 F300 +G1 X56.705 Y54.436 F300 +G1 X56.864 Y54.565 F300 +G1 X57.017 Y54.702 F300 +G1 X57.163 Y54.848 F300 +G1 X57.303 Y55.003 F300 +G1 X57.435 Y55.166 F300 G1 X57.592 Y55.385 F300 G1 X57.634 Y55.457 F300 G1 X57.666 Y55.534 F300 @@ -291,23 +291,24 @@ G1 X58.336 Y59.013 F300 G1 X58.258 Y59.162 F300 G1 X58.169 Y59.304 F300 G1 X58.071 Y59.439 F300 -G1 X58.053 Y59.618 F300 -G1 X58.026 Y59.794 F300 -G1 X57.989 Y59.966 F300 -G1 X57.944 Y60.135 F300 -G1 X57.89 Y60.301 F300 -G1 X57.828 Y60.465 F300 -G1 X57.759 Y60.625 F300 -G1 X57.682 Y60.783 F300 -G1 X57.599 Y60.938 F300 -G1 X57.51 Y61.091 F300 -G1 X57.39 Y61.277 F300 -G1 X57.263 Y61.459 F300 -G1 X57.128 Y61.636 F300 -G1 X56.988 Y61.809 F300 -G1 X56.841 Y61.979 F300 -G1 X56.691 Y62.143 F300 -G1 X56.538 Y62.303 F300 +G1 X58.052 Y59.626 F300 +G1 X58.023 Y59.811 F300 +G1 X57.983 Y59.992 F300 +G1 X57.933 Y60.17 F300 +G1 X57.874 Y60.344 F300 +G1 X57.807 Y60.516 F300 +G1 X57.731 Y60.684 F300 +G1 X57.648 Y60.849 F300 +G1 X57.557 Y61.011 F300 +G1 X57.46 Y61.17 F300 +G1 X57.357 Y61.326 F300 +G1 X57.249 Y61.478 F300 +G1 X57.135 Y61.627 F300 +G1 X57.018 Y61.773 F300 +G1 X56.896 Y61.916 F300 +G1 X56.771 Y62.056 F300 +G1 X56.644 Y62.193 F300 +G1 X56.514 Y62.327 F300 G1 X56.383 Y62.458 F300 G1 X56.124 Y62.701 F300 G1 X55.857 Y62.936 F300 @@ -360,95 +361,94 @@ G1 X48.811 Y71.482 F300 G1 X48.557 Y71.484 F300 G1 X48.303 Y71.473 F300 G1 X48.104 Y71.456 F300 -G1 X47.945 Y71.433 F300 -G1 X47.779 Y71.403 F300 -G1 X47.609 Y71.364 F300 -G1 X47.44 Y71.319 F300 +G1 X47.989 Y71.44 F300 +G1 X47.872 Y71.421 F300 +G1 X47.753 Y71.397 F300 +G1 X47.633 Y71.37 F300 +G1 X47.512 Y71.339 F300 +G1 X47.391 Y71.304 F300 G1 X47.272 Y71.265 F300 -G1 X47.106 Y71.203 F300 -G1 X46.984 Y71.15 F300 -G1 X46.867 Y71.093 F300 -G1 X46.753 Y71.031 F300 -G1 X46.645 Y70.964 F300 -G1 X46.54 Y70.891 F300 -G1 X46.443 Y70.813 F300 -G1 X46.353 Y70.73 F300 -G1 X46.271 Y70.643 F300 -G1 X46.211 Y70.568 F300 -G1 X46.157 Y70.489 F300 -G1 X46.109 Y70.407 F300 -G1 X46.067 Y70.321 F300 +G1 X47.153 Y71.221 F300 +G1 X47.037 Y71.174 F300 +G1 X46.923 Y71.121 F300 +G1 X46.813 Y71.065 F300 +G1 X46.707 Y71.003 F300 +G1 X46.605 Y70.937 F300 +G1 X46.508 Y70.867 F300 +G1 X46.417 Y70.791 F300 +G1 X46.333 Y70.711 F300 +G1 X46.256 Y70.625 F300 +G1 X46.187 Y70.534 F300 +G1 X46.126 Y70.439 F300 +G1 X46.074 Y70.338 F300 G1 X46.032 Y70.231 F300 G1 X45.753 Y70.205 F300 G1 X45.475 Y70.167 F300 G1 X45.198 Y70.117 F300 G1 X44.974 Y70.067 F300 G1 X44.747 Y70.013 F300 -G1 X44.522 Y69.953 F300 -G1 X44.298 Y69.887 F300 -G1 X44.075 Y69.814 F300 +G1 X44.521 Y69.953 F300 +G1 X44.297 Y69.887 F300 +G1 X44.074 Y69.814 F300 G1 X43.854 Y69.734 F300 G1 X43.636 Y69.648 F300 G1 X43.421 Y69.555 F300 G1 X43.209 Y69.456 F300 G1 X43.001 Y69.349 F300 G1 X42.797 Y69.236 F300 -G1 X42.597 Y69.114 F300 +G1 X42.598 Y69.115 F300 G1 X42.403 Y68.986 F300 -G1 X42.213 Y68.851 F300 +G1 X42.214 Y68.851 F300 G1 X42.03 Y68.708 F300 G1 X41.852 Y68.557 F300 -G1 X41.709 Y68.426 F300 -G1 X41.571 Y68.29 F300 -G1 X41.438 Y68.147 F300 -G1 X41.31 Y68 F300 -G1 X41.187 Y67.846 F300 +G1 X41.681 Y68.399 F300 +G1 X41.517 Y68.232 F300 +G1 X41.36 Y68.058 F300 +G1 X41.21 Y67.876 F300 G1 X41.069 Y67.686 F300 -G1 X40.97 Y67.54 F300 -G1 X40.878 Y67.391 F300 -G1 X40.794 Y67.24 F300 -G1 X40.717 Y67.088 F300 -G1 X40.647 Y66.933 F300 -G1 X40.583 Y66.776 F300 -G1 X40.515 Y66.584 F300 -G1 X40.456 Y66.389 F300 -G1 X40.406 Y66.192 F300 -G1 X40.366 Y65.993 F300 -G1 X40.334 Y65.793 F300 -G1 X40.31 Y65.591 F300 -G1 X40.295 Y65.388 F300 -G1 X40.288 Y65.185 F300 -G1 X40.29 Y64.98 F300 -G1 X40.299 Y64.775 F300 -G1 X40.315 Y64.571 F300 -G1 X40.34 Y64.367 F300 -G1 X40.371 Y64.165 F300 -G1 X40.41 Y63.963 F300 -G1 X40.456 Y63.762 F300 -G1 X40.508 Y63.563 F300 -G1 X40.568 Y63.366 F300 -G1 X40.633 Y63.171 F300 -G1 X40.705 Y62.98 F300 +G1 X40.948 Y67.506 F300 +G1 X40.838 Y67.321 F300 +G1 X40.739 Y67.133 F300 +G1 X40.65 Y66.941 F300 +G1 X40.571 Y66.745 F300 +G1 X40.503 Y66.546 F300 +G1 X40.444 Y66.345 F300 +G1 X40.395 Y66.141 F300 +G1 X40.356 Y65.935 F300 +G1 X40.325 Y65.728 F300 +G1 X40.304 Y65.519 F300 +G1 X40.292 Y65.309 F300 +G1 X40.288 Y65.098 F300 +G1 X40.293 Y64.888 F300 +G1 X40.306 Y64.677 F300 +G1 X40.327 Y64.466 F300 +G1 X40.356 Y64.256 F300 +G1 X40.393 Y64.047 F300 +G1 X40.437 Y63.839 F300 +G1 X40.489 Y63.633 F300 +G1 X40.548 Y63.43 F300 +G1 X40.613 Y63.228 F300 +G1 X40.686 Y63.029 F300 G1 X40.783 Y62.791 F300 -G1 X40.871 Y62.597 F300 -G1 X40.965 Y62.408 F300 -G1 X41.065 Y62.223 F300 -G1 X41.171 Y62.041 F300 -G1 X41.283 Y61.864 F300 +G1 X40.889 Y62.56 F300 +G1 X41.004 Y62.334 F300 +G1 X41.128 Y62.114 F300 +G1 X41.26 Y61.9 F300 G1 X41.4 Y61.69 F300 -G1 X41.547 Y61.487 F300 +G1 X41.548 Y61.486 F300 G1 X41.702 Y61.288 F300 -G1 X41.863 Y61.094 F300 -G1 X42.031 Y60.906 F300 +G1 X41.864 Y61.094 F300 +G1 X42.031 Y60.905 F300 G1 X42.205 Y60.722 F300 -G1 X42.384 Y60.543 F300 +G1 X42.384 Y60.542 F300 G1 X42.568 Y60.368 F300 G1 X42.757 Y60.198 F300 -G1 X42.95 Y60.033 F300 +G1 X42.95 Y60.032 F300 G1 X43.147 Y59.871 F300 -G1 X43.398 Y59.675 F300 -G1 X43.654 Y59.486 F300 -G1 X43.913 Y59.303 F300 +G1 X43.347 Y59.714 F300 +G1 X43.551 Y59.561 F300 +G1 X43.757 Y59.413 F300 +G1 X43.965 Y59.268 F300 G1 X44.175 Y59.126 F300 G1 X43.906 Y58.951 F300 G1 X43.644 Y58.765 F300 @@ -460,71 +460,71 @@ G1 X42.445 Y57.696 F300 G1 X42.23 Y57.456 F300 G1 X42.024 Y57.209 F300 G1 X41.936 Y57.097 F300 -G1 X41.76 Y56.862 F300 -G1 X41.592 Y56.624 F300 -G1 X41.432 Y56.381 F300 -G1 X41.28 Y56.135 F300 -G1 X41.136 Y55.885 F300 -G1 X40.999 Y55.632 F300 -G1 X40.868 Y55.374 F300 -G1 X40.745 Y55.114 F300 -G1 X40.629 Y54.85 F300 -G1 X40.52 Y54.583 F300 -G1 X40.417 Y54.314 F300 +G1 X41.745 Y56.842 F300 +G1 X41.563 Y56.581 F300 +G1 X41.391 Y56.316 F300 +G1 X41.227 Y56.046 F300 +G1 X41.073 Y55.771 F300 +G1 X40.927 Y55.492 F300 +G1 X40.789 Y55.209 F300 +G1 X40.66 Y54.922 F300 +G1 X40.539 Y54.632 F300 +G1 X40.426 Y54.338 F300 G1 X40.321 Y54.041 F300 -G1 X40.214 Y53.712 F300 -G1 X40.117 Y53.38 F300 -G1 X40.028 Y53.044 F300 -G1 X39.948 Y52.706 F300 -G1 X39.876 Y52.366 F300 -G1 X39.812 Y52.024 F300 -G1 X39.756 Y51.681 F300 -G1 X39.708 Y51.337 F300 -G1 X39.668 Y50.992 F300 +G1 X40.224 Y53.742 F300 +G1 X40.134 Y53.44 F300 +G1 X40.051 Y53.136 F300 +G1 X39.976 Y52.829 F300 +G1 X39.908 Y52.521 F300 +G1 X39.846 Y52.211 F300 +G1 X39.791 Y51.9 F300 +G1 X39.743 Y51.588 F300 +G1 X39.701 Y51.274 F300 +G1 X39.665 Y50.961 F300 G1 X39.635 Y50.647 F300 G1 X39.635 Y50.647 F300 -G1 X38.575 Y50.731 F300 -G1 X37.517 Y50.807 F300 -G1 X36.461 Y50.875 F300 -G1 X35.406 Y50.935 F300 -G1 X34.352 Y50.987 F300 +G1 X38.365 Y50.747 F300 +G1 X37.097 Y50.835 F300 +G1 X35.83 Y50.912 F300 +G1 X34.565 Y50.977 F300 G1 X33.3 Y51.03 F300 -G1 X32.351 Y51.074 F300 -G1 X32.032 Y51.085 F300 -G1 X31.714 Y51.091 F300 -G1 X31.396 Y51.09 F300 -G1 X31.158 Y51.082 F300 -G1 X30.921 Y51.068 F300 -G1 X30.684 Y51.047 F300 +G1 X33.042 Y51.041 F300 +G1 X32.783 Y51.054 F300 +G1 X32.524 Y51.066 F300 +G1 X32.264 Y51.077 F300 +G1 X32.004 Y51.086 F300 +G1 X31.743 Y51.091 F300 +G1 X31.483 Y51.091 F300 +G1 X31.223 Y51.085 F300 +G1 X30.964 Y51.071 F300 +G1 X30.706 Y51.049 F300 G1 X30.448 Y51.017 F300 G1 X30.403 Y51.017 F300 -G1 X30.399 Y51.258 F300 -G1 X30.386 Y51.496 F300 -G1 X30.364 Y51.731 F300 -G1 X30.334 Y51.965 F300 -G1 X30.295 Y52.196 F300 -G1 X30.249 Y52.425 F300 -G1 X30.195 Y52.652 F300 -G1 X30.133 Y52.878 F300 -G1 X30.063 Y53.1 F300 -G1 X29.987 Y53.32 F300 -G1 X29.903 Y53.537 F300 -G1 X29.812 Y53.752 F300 -G1 X29.714 Y53.963 F300 -G1 X29.61 Y54.172 F300 -G1 X29.5 Y54.377 F300 -G1 X29.383 Y54.58 F300 -G1 X29.26 Y54.779 F300 -G1 X29.131 Y54.975 F300 -G1 X28.968 Y55.205 F300 -G1 X28.798 Y55.429 F300 -G1 X28.621 Y55.648 F300 -G1 X28.436 Y55.862 F300 -G1 X28.243 Y56.07 F300 -G1 X28.044 Y56.271 F300 -G1 X27.839 Y56.466 F300 -G1 X27.628 Y56.655 F300 -G1 X27.411 Y56.837 F300 +G1 X30.397 Y51.292 F300 +G1 X30.38 Y51.565 F300 +G1 X30.351 Y51.835 F300 +G1 X30.312 Y52.103 F300 +G1 X30.261 Y52.368 F300 +G1 X30.2 Y52.63 F300 +G1 X30.129 Y52.889 F300 +G1 X30.048 Y53.145 F300 +G1 X29.958 Y53.398 F300 +G1 X29.858 Y53.646 F300 +G1 X29.748 Y53.891 F300 +G1 X29.631 Y54.133 F300 +G1 X29.504 Y54.37 F300 +G1 X29.369 Y54.602 F300 +G1 X29.226 Y54.831 F300 +G1 X29.076 Y55.054 F300 +G1 X28.918 Y55.273 F300 +G1 X28.753 Y55.487 F300 +G1 X28.58 Y55.696 F300 +G1 X28.402 Y55.9 F300 +G1 X28.216 Y56.098 F300 +G1 X28.025 Y56.29 F300 +G1 X27.828 Y56.477 F300 +G1 X27.625 Y56.658 F300 +G1 X27.417 Y56.832 F300 G1 X27.189 Y57.012 F300 G1 X26.871 Y57.237 F300 G1 X26.548 Y57.451 F300 @@ -548,19 +548,22 @@ G1 X21.98 Y59.964 F300 G1 X21.748 Y60.209 F300 G1 X21.525 Y60.461 F300 G1 X21.413 Y60.595 F300 -G1 X21.122 Y60.931 F300 -G1 X20.83 Y61.266 F300 -G1 X20.631 Y61.486 F300 -G1 X20.429 Y61.7 F300 -G1 X20.221 Y61.907 F300 -G1 X20.061 Y62.058 F300 -G1 X19.896 Y62.203 F300 -G1 X19.726 Y62.341 F300 -G1 X19.551 Y62.473 F300 -G1 X19.408 Y62.573 F300 -G1 X19.26 Y62.667 F300 -G1 X19.107 Y62.757 F300 -G1 X18.949 Y62.84 F300 +G1 X21.276 Y60.753 F300 +G1 X21.14 Y60.911 F300 +G1 X21.002 Y61.07 F300 +G1 X20.865 Y61.227 F300 +G1 X20.725 Y61.383 F300 +G1 X20.584 Y61.536 F300 +G1 X20.441 Y61.687 F300 +G1 X20.295 Y61.835 F300 +G1 X20.146 Y61.979 F300 +G1 X19.993 Y62.118 F300 +G1 X19.837 Y62.252 F300 +G1 X19.675 Y62.381 F300 +G1 X19.509 Y62.503 F300 +G1 X19.338 Y62.619 F300 +G1 X19.16 Y62.727 F300 +G1 X18.976 Y62.827 F300 G1 X18.785 Y62.918 F300 G1 X18.693 Y62.954 F300 G1 X18.597 Y62.978 F300 @@ -587,146 +590,143 @@ G1 X17.423 Y61.447 F300 G1 X17.444 Y61.307 F300 G1 X17.476 Y61.169 F300 G1 X17.494 Y61.108 F300 -G1 X17.537 Y60.978 F300 -G1 X17.586 Y60.852 F300 -G1 X17.643 Y60.729 F300 -G1 X17.706 Y60.609 F300 -G1 X17.798 Y60.454 F300 -G1 X17.898 Y60.302 F300 +G1 X17.543 Y60.96 F300 +G1 X17.602 Y60.817 F300 +G1 X17.669 Y60.677 F300 +G1 X17.744 Y60.542 F300 +G1 X17.826 Y60.41 F300 +G1 X17.914 Y60.281 F300 G1 X18.006 Y60.154 F300 -G1 X18.177 Y59.939 F300 -G1 X18.354 Y59.729 F300 +G1 X18.103 Y60.03 F300 +G1 X18.202 Y59.909 F300 +G1 X18.303 Y59.789 F300 +G1 X18.406 Y59.67 F300 +G1 X18.508 Y59.553 F300 +G1 X18.609 Y59.436 F300 G1 X18.709 Y59.32 F300 G1 X20.251 Y57.491 F300 -G1 X20.345 Y57.379 F300 -G1 X20.418 Y57.284 F300 -G1 X20.46 Y57.219 F300 -G1 X20.494 Y57.157 F300 -G1 X20.519 Y57.095 F300 -G1 X20.538 Y57.032 F300 -G1 X20.549 Y56.964 F300 -G1 X20.553 Y56.889 F300 -G1 X20.549 Y56.814 F300 -G1 X20.537 Y56.727 F300 +G1 X20.309 Y57.423 F300 +G1 X20.361 Y57.359 F300 +G1 X20.407 Y57.298 F300 +G1 X20.447 Y57.24 F300 +G1 X20.481 Y57.182 F300 +G1 X20.508 Y57.125 F300 +G1 X20.529 Y57.066 F300 +G1 X20.544 Y57.005 F300 +G1 X20.551 Y56.94 F300 +G1 X20.553 Y56.871 F300 +G1 X20.547 Y56.797 F300 +G1 X20.535 Y56.715 F300 G1 X20.516 Y56.626 F300 -G1 X20.451 Y56.357 F300 -G1 X20.389 Y56.088 F300 -G1 X20.351 Y55.909 F300 -G1 X20.317 Y55.729 F300 +G1 X20.464 Y56.411 F300 +G1 X20.413 Y56.196 F300 +G1 X20.366 Y55.981 F300 +G1 X20.324 Y55.765 F300 G1 X20.288 Y55.547 F300 -G1 X20.255 Y55.277 F300 -G1 X20.23 Y55.008 F300 -G1 X20.213 Y54.738 F300 -G1 X20.205 Y54.467 F300 -G1 X20.205 Y54.197 F300 -G1 X20.213 Y53.926 F300 -G1 X20.23 Y53.656 F300 -G1 X20.255 Y53.387 F300 -G1 X20.289 Y53.12 F300 -G1 X20.331 Y52.854 F300 -G1 X20.381 Y52.589 F300 -G1 X20.44 Y52.327 F300 -G1 X20.507 Y52.066 F300 -G1 X20.583 Y51.809 F300 -G1 X20.667 Y51.554 F300 -G1 X20.76 Y51.303 F300 -G1 X20.86 Y51.055 F300 -G1 X20.97 Y50.811 F300 -G1 X21.07 Y50.605 F300 -G1 X21.177 Y50.402 F300 -G1 X21.29 Y50.203 F300 -G1 X21.409 Y50.007 F300 -G1 X21.534 Y49.815 F300 -G1 X21.666 Y49.626 F300 -G1 X21.804 Y49.442 F300 -G1 X21.948 Y49.262 F300 -G1 X22.098 Y49.087 F300 -G1 X22.254 Y48.917 F300 -G1 X22.416 Y48.751 F300 -G1 X22.586 Y48.589 F300 -G1 X22.762 Y48.433 F300 +G1 X20.254 Y55.271 F300 +G1 X20.229 Y54.994 F300 +G1 X20.212 Y54.717 F300 +G1 X20.204 Y54.439 F300 +G1 X20.205 Y54.161 F300 +G1 X20.215 Y53.884 F300 +G1 X20.234 Y53.607 F300 +G1 X20.262 Y53.332 F300 +G1 X20.298 Y53.057 F300 +G1 X20.343 Y52.785 F300 +G1 X20.397 Y52.514 F300 +G1 X20.46 Y52.245 F300 +G1 X20.532 Y51.979 F300 +G1 X20.613 Y51.716 F300 +G1 X20.702 Y51.456 F300 +G1 X20.801 Y51.199 F300 +G1 X20.908 Y50.946 F300 +G1 X21.024 Y50.698 F300 +G1 X21.149 Y50.453 F300 +G1 X21.284 Y50.214 F300 +G1 X21.427 Y49.979 F300 +G1 X21.578 Y49.75 F300 +G1 X21.739 Y49.527 F300 +G1 X21.909 Y49.309 F300 +G1 X22.088 Y49.098 F300 +G1 X22.276 Y48.894 F300 +G1 X22.472 Y48.696 F300 +G1 X22.678 Y48.506 F300 G1 X22.945 Y48.281 F300 G1 X23.181 Y48.1 F300 G1 X23.423 Y47.928 F300 G1 X23.673 Y47.767 F300 G1 X23.834 Y47.67 F300 -G1 X23.589 Y47.572 F300 -G1 X23.348 Y47.467 F300 -G1 X23.111 Y47.355 F300 -G1 X22.879 Y47.236 F300 -G1 X22.651 Y47.11 F300 -G1 X22.427 Y46.977 F300 -G1 X22.206 Y46.838 F300 -G1 X21.99 Y46.692 F300 -G1 X21.778 Y46.541 F300 -G1 X21.571 Y46.383 F300 -G1 X21.368 Y46.219 F300 -G1 X21.17 Y46.05 F300 -G1 X20.976 Y45.875 F300 -G1 X20.787 Y45.694 F300 -G1 X20.572 Y45.477 F300 -G1 X20.364 Y45.254 F300 -G1 X20.163 Y45.024 F300 -G1 X19.969 Y44.788 F300 -G1 X19.781 Y44.545 F300 -G1 X19.6 Y44.296 F300 -G1 X19.427 Y44.043 F300 -G1 X19.261 Y43.784 F300 -G1 X19.103 Y43.521 F300 -G1 X18.952 Y43.252 F300 -G1 X18.809 Y42.98 F300 -G1 X18.673 Y42.703 F300 -G1 X18.545 Y42.422 F300 -G1 X18.426 Y42.137 F300 -G1 X18.314 Y41.85 F300 -G1 X18.211 Y41.56 F300 -G1 X18.117 Y41.267 F300 -G1 X18.03 Y40.971 F300 -G1 X17.953 Y40.672 F300 -G1 X17.884 Y40.372 F300 -G1 X17.824 Y40.071 F300 -G1 X17.773 Y39.768 F300 -G1 X17.731 Y39.464 F300 -G1 X17.699 Y39.159 F300 -G1 X17.678 Y38.896 F300 -G1 X17.664 Y38.634 F300 -G1 X17.658 Y38.372 F300 -G1 X17.658 Y38.109 F300 -G1 X17.666 Y37.848 F300 -G1 X17.681 Y37.586 F300 +G1 X23.542 Y47.553 F300 +G1 X23.257 Y47.425 F300 +G1 X22.976 Y47.287 F300 +G1 X22.702 Y47.139 F300 +G1 X22.433 Y46.981 F300 +G1 X22.17 Y46.814 F300 +G1 X21.913 Y46.638 F300 +G1 X21.663 Y46.454 F300 +G1 X21.419 Y46.261 F300 +G1 X21.181 Y46.059 F300 +G1 X20.949 Y45.85 F300 +G1 X20.725 Y45.633 F300 +G1 X20.507 Y45.409 F300 +G1 X20.296 Y45.178 F300 +G1 X20.093 Y44.94 F300 +G1 X19.896 Y44.696 F300 +G1 X19.707 Y44.445 F300 +G1 X19.525 Y44.189 F300 +G1 X19.351 Y43.927 F300 +G1 X19.185 Y43.66 F300 +G1 X19.026 Y43.387 F300 +G1 X18.876 Y43.11 F300 +G1 X18.734 Y42.829 F300 +G1 X18.599 Y42.543 F300 +G1 X18.474 Y42.254 F300 +G1 X18.356 Y41.961 F300 +G1 X18.247 Y41.665 F300 +G1 X18.148 Y41.365 F300 +G1 X18.056 Y41.063 F300 +G1 X17.974 Y40.759 F300 +G1 X17.901 Y40.452 F300 +G1 X17.838 Y40.144 F300 +G1 X17.783 Y39.834 F300 +G1 X17.739 Y39.523 F300 +G1 X17.704 Y39.211 F300 +G1 X17.678 Y38.898 F300 +G1 X17.663 Y38.584 F300 +G1 X17.657 Y38.271 F300 +G1 X17.662 Y37.958 F300 +G1 X17.677 Y37.645 F300 G1 X17.703 Y37.325 F300 -G1 X17.73 Y37.093 F300 -G1 X17.764 Y36.863 F300 -G1 X17.805 Y36.633 F300 -G1 X17.853 Y36.404 F300 -G1 X17.909 Y36.177 F300 -G1 X17.973 Y35.952 F300 -G1 X18.044 Y35.729 F300 -G1 X18.122 Y35.51 F300 -G1 X18.207 Y35.294 F300 -G1 X18.3 Y35.081 F300 -G1 X18.4 Y34.872 F300 -G1 X18.508 Y34.667 F300 -G1 X18.622 Y34.467 F300 -G1 X18.744 Y34.273 F300 -G1 X18.873 Y34.084 F300 -G1 X18.987 Y33.931 F300 -G1 X19.105 Y33.782 F300 -G1 X19.228 Y33.638 F300 -G1 X19.357 Y33.498 F300 -G1 X19.49 Y33.364 F300 -G1 X19.628 Y33.234 F300 -G1 X19.771 Y33.111 F300 -G1 X19.919 Y32.992 F300 -G1 X20.073 Y32.88 F300 -G1 X20.231 Y32.774 F300 -G1 X20.395 Y32.673 F300 -G1 X20.564 Y32.579 F300 -G1 X20.736 Y32.493 F300 -G1 X20.913 Y32.413 F300 -G1 X21.095 Y32.34 F300 -G1 X21.284 Y32.275 F300 -G1 X21.479 Y32.216 F300 +G1 X17.728 Y37.108 F300 +G1 X17.759 Y36.891 F300 +G1 X17.797 Y36.675 F300 +G1 X17.841 Y36.46 F300 +G1 X17.892 Y36.246 F300 +G1 X17.949 Y36.034 F300 +G1 X18.012 Y35.825 F300 +G1 X18.083 Y35.617 F300 +G1 X18.159 Y35.413 F300 +G1 X18.242 Y35.211 F300 +G1 X18.332 Y35.012 F300 +G1 X18.428 Y34.817 F300 +G1 X18.53 Y34.626 F300 +G1 X18.639 Y34.44 F300 +G1 X18.754 Y34.258 F300 +G1 X18.876 Y34.08 F300 +G1 X19.004 Y33.908 F300 +G1 X19.139 Y33.741 F300 +G1 X19.28 Y33.581 F300 +G1 X19.427 Y33.426 F300 +G1 X19.581 Y33.278 F300 +G1 X19.741 Y33.136 F300 +G1 X19.907 Y33.002 F300 +G1 X20.08 Y32.875 F300 +G1 X20.259 Y32.756 F300 +G1 X20.445 Y32.644 F300 +G1 X20.636 Y32.542 F300 +G1 X20.835 Y32.447 F300 +G1 X21.039 Y32.362 F300 +G1 X21.25 Y32.286 F300 G1 X21.68 Y32.165 F300 G0 X27.472 Y36.153 G1 X27.695 Y36.635 F300 @@ -755,30 +755,29 @@ G1 X31.734 Y42.963 F300 G1 X31.773 Y42.955 F300 G1 X31.74 Y42.876 F300 G1 X31.718 Y42.802 F300 -G1 X31.651 Y42.512 F300 -G1 X31.575 Y42.228 F300 -G1 X31.493 Y41.948 F300 -G1 X31.403 Y41.673 F300 -G1 X31.306 Y41.403 F300 -G1 X31.202 Y41.137 F300 -G1 X31.091 Y40.875 F300 -G1 X30.972 Y40.614 F300 -G1 X30.848 Y40.358 F300 -G1 X30.716 Y40.106 F300 -G1 X30.579 Y39.857 F300 -G1 X30.436 Y39.612 F300 -G1 X30.287 Y39.371 F300 -G1 X30.132 Y39.133 F300 -G1 X29.944 Y38.86 F300 -G1 X29.75 Y38.592 F300 -G1 X29.548 Y38.328 F300 -G1 X29.34 Y38.069 F300 -G1 X29.125 Y37.814 F300 -G1 X28.904 Y37.563 F300 -G1 X28.633 Y37.269 F300 -G1 X28.353 Y36.981 F300 -G1 X28.066 Y36.699 F300 -G1 X27.772 Y36.423 F300 +G1 X31.64 Y42.471 F300 +G1 X31.552 Y42.145 F300 +G1 X31.453 Y41.825 F300 +G1 X31.345 Y41.51 F300 +G1 X31.227 Y41.2 F300 +G1 X31.1 Y40.895 F300 +G1 X30.964 Y40.596 F300 +G1 X30.819 Y40.301 F300 +G1 X30.665 Y40.011 F300 +G1 X30.503 Y39.726 F300 +G1 X30.334 Y39.446 F300 +G1 X30.157 Y39.17 F300 +G1 X29.972 Y38.9 F300 +G1 X29.781 Y38.633 F300 +G1 X29.582 Y38.372 F300 +G1 X29.378 Y38.115 F300 +G1 X29.167 Y37.862 F300 +G1 X28.95 Y37.614 F300 +G1 X28.727 Y37.37 F300 +G1 X28.499 Y37.13 F300 +G1 X28.266 Y36.895 F300 +G1 X28.029 Y36.664 F300 +G1 X27.786 Y36.436 F300 G1 X27.472 Y36.153 F300 G0 X49.578 Y40.741 G1 X49.652 Y40.453 F300 @@ -793,53 +792,55 @@ G1 X49.817 Y38.092 F300 G1 X49.784 Y37.797 F300 G1 X49.739 Y37.503 F300 G1 X49.689 Y37.24 F300 -G1 X49.642 Y37.031 F300 -G1 X49.589 Y36.817 F300 +G1 X49.654 Y37.082 F300 +G1 X49.616 Y36.922 F300 +G1 X49.574 Y36.761 F300 G1 X49.529 Y36.598 F300 -G1 X49.464 Y36.382 F300 -G1 X49.39 Y36.166 F300 +G1 X49.481 Y36.436 F300 +G1 X49.428 Y36.273 F300 +G1 X49.37 Y36.111 F300 G1 X49.308 Y35.951 F300 G1 X49.242 Y35.793 F300 G1 X49.17 Y35.637 F300 G1 X49.093 Y35.485 F300 G1 X49.011 Y35.336 F300 -G1 X48.923 Y35.191 F300 -G1 X48.828 Y35.051 F300 -G1 X48.728 Y34.917 F300 +G1 X48.923 Y35.192 F300 +G1 X48.829 Y35.052 F300 +G1 X48.729 Y34.918 F300 G1 X48.622 Y34.789 F300 -G1 X48.532 Y34.692 F300 -G1 X48.438 Y34.598 F300 -G1 X48.339 Y34.51 F300 -G1 X48.236 Y34.426 F300 +G1 X48.509 Y34.668 F300 +G1 X48.389 Y34.553 F300 +G1 X48.262 Y34.447 F300 G1 X48.128 Y34.348 F300 -G1 X47.981 Y34.254 F300 -G1 X47.831 Y34.166 F300 -G1 X47.677 Y34.086 F300 -G1 X47.52 Y34.013 F300 -G1 X47.36 Y33.947 F300 -G1 X47.196 Y33.887 F300 -G1 X46.998 Y33.824 F300 -G1 X46.795 Y33.77 F300 -G1 X46.589 Y33.725 F300 -G1 X46.38 Y33.689 F300 -G1 X46.168 Y33.661 F300 -G1 X45.955 Y33.641 F300 -G1 X45.741 Y33.63 F300 -G1 X45.525 Y33.626 F300 -G1 X45.308 Y33.629 F300 -G1 X45.09 Y33.64 F300 -G1 X44.873 Y33.658 F300 -G1 X44.656 Y33.683 F300 -G1 X44.44 Y33.715 F300 -G1 X44.225 Y33.753 F300 -G1 X44.011 Y33.797 F300 -G1 X43.745 Y33.86 F300 -G1 X43.484 Y33.932 F300 -G1 X43.229 Y34.012 F300 -G1 X42.979 Y34.1 F300 -G1 X42.731 Y34.196 F300 -G1 X42.492 Y34.299 F300 -G1 X42.262 Y34.407 F300 +G1 X47.952 Y34.236 F300 +G1 X47.771 Y34.134 F300 +G1 X47.585 Y34.042 F300 +G1 X47.395 Y33.96 F300 +G1 X47.2 Y33.888 F300 +G1 X47.001 Y33.825 F300 +G1 X46.799 Y33.771 F300 +G1 X46.593 Y33.726 F300 +G1 X46.385 Y33.69 F300 +G1 X46.175 Y33.662 F300 +G1 X45.962 Y33.642 F300 +G1 X45.748 Y33.63 F300 +G1 X45.533 Y33.626 F300 +G1 X45.317 Y33.629 F300 +G1 X45.101 Y33.64 F300 +G1 X44.884 Y33.657 F300 +G1 X44.668 Y33.682 F300 +G1 X44.452 Y33.713 F300 +G1 X44.238 Y33.75 F300 +G1 X44.025 Y33.793 F300 +G1 X43.814 Y33.843 F300 +G1 X43.605 Y33.898 F300 +G1 X43.398 Y33.958 F300 +G1 X43.195 Y34.023 F300 +G1 X42.995 Y34.094 F300 +G1 X42.799 Y34.169 F300 +G1 X42.607 Y34.248 F300 +G1 X42.419 Y34.332 F300 +G1 X42.237 Y34.42 F300 G1 X42.042 Y34.52 F300 G1 X41.791 Y34.664 F300 G1 X41.545 Y34.818 F300 @@ -876,27 +877,28 @@ G1 X38.561 Y42.3 F300 G1 X38.634 Y42.573 F300 G1 X38.718 Y42.843 F300 G1 X38.78 Y43.019 F300 -G1 X38.835 Y43.153 F300 -G1 X38.895 Y43.29 F300 -G1 X38.962 Y43.426 F300 -G1 X39.035 Y43.563 F300 -G1 X39.113 Y43.696 F300 -G1 X39.196 Y43.827 F300 -G1 X39.285 Y43.954 F300 -G1 X39.38 Y44.076 F300 -G1 X39.48 Y44.194 F300 -G1 X39.585 Y44.306 F300 -G1 X39.696 Y44.41 F300 -G1 X39.811 Y44.506 F300 -G1 X39.908 Y44.578 F300 -G1 X40.008 Y44.644 F300 -G1 X40.111 Y44.703 F300 -G1 X40.217 Y44.756 F300 -G1 X40.326 Y44.802 F300 -G1 X40.438 Y44.84 F300 -G1 X40.553 Y44.87 F300 -G1 X40.672 Y44.892 F300 -G1 X40.795 Y44.906 F300 +G1 X38.828 Y43.137 F300 +G1 X38.88 Y43.256 F300 +G1 X38.936 Y43.375 F300 +G1 X38.997 Y43.493 F300 +G1 X39.062 Y43.61 F300 +G1 X39.131 Y43.725 F300 +G1 X39.204 Y43.838 F300 +G1 X39.281 Y43.948 F300 +G1 X39.363 Y44.055 F300 +G1 X39.449 Y44.158 F300 +G1 X39.538 Y44.257 F300 +G1 X39.632 Y44.351 F300 +G1 X39.73 Y44.44 F300 +G1 X39.832 Y44.522 F300 +G1 X39.937 Y44.598 F300 +G1 X40.047 Y44.667 F300 +G1 X40.161 Y44.729 F300 +G1 X40.278 Y44.782 F300 +G1 X40.4 Y44.827 F300 +G1 X40.525 Y44.863 F300 +G1 X40.654 Y44.889 F300 +G1 X40.787 Y44.905 F300 G1 X40.923 Y44.91 F300 G1 X41.005 Y44.913 F300 G1 X41.086 Y44.927 F300 @@ -945,33 +947,32 @@ G1 X47.384 Y37.445 F300 G1 X47.434 Y37.077 F300 G1 X47.472 Y36.709 F300 G1 X47.485 Y36.547 F300 -G1 X47.495 Y36.467 F300 -G1 X47.512 Y36.395 F300 -G1 X47.535 Y36.329 F300 -G1 X47.565 Y36.27 F300 -G1 X47.599 Y36.216 F300 -G1 X47.64 Y36.165 F300 -G1 X47.685 Y36.12 F300 -G1 X47.734 Y36.081 F300 -G1 X47.787 Y36.047 F300 -G1 X47.842 Y36.018 F300 -G1 X47.916 Y35.989 F300 -G1 X47.991 Y35.968 F300 -G1 X48.068 Y35.956 F300 -G1 X48.146 Y35.952 F300 -G1 X48.224 Y35.956 F300 -G1 X48.3 Y35.968 F300 -G1 X48.372 Y35.989 F300 -G1 X48.441 Y36.018 F300 -G1 X48.493 Y36.047 F300 -G1 X48.541 Y36.081 F300 -G1 X48.585 Y36.121 F300 -G1 X48.624 Y36.165 F300 -G1 X48.658 Y36.216 F300 -G1 X48.685 Y36.269 F300 -G1 X48.706 Y36.328 F300 -G1 X48.721 Y36.393 F300 -G1 X48.729 Y36.466 F300 +G1 X47.495 Y36.464 F300 +G1 X47.514 Y36.387 F300 +G1 X47.541 Y36.316 F300 +G1 X47.575 Y36.252 F300 +G1 X47.616 Y36.193 F300 +G1 X47.663 Y36.141 F300 +G1 X47.715 Y36.096 F300 +G1 X47.771 Y36.056 F300 +G1 X47.831 Y36.023 F300 +G1 X47.894 Y35.996 F300 +G1 X47.959 Y35.976 F300 +G1 X48.025 Y35.962 F300 +G1 X48.093 Y35.954 F300 +G1 X48.161 Y35.952 F300 +G1 X48.228 Y35.956 F300 +G1 X48.294 Y35.967 F300 +G1 X48.358 Y35.984 F300 +G1 X48.419 Y36.007 F300 +G1 X48.477 Y36.037 F300 +G1 X48.53 Y36.073 F300 +G1 X48.579 Y36.115 F300 +G1 X48.622 Y36.163 F300 +G1 X48.659 Y36.218 F300 +G1 X48.689 Y36.279 F300 +G1 X48.711 Y36.346 F300 +G1 X48.725 Y36.419 F300 G1 X48.728 Y36.547 F300 G1 X48.697 Y36.936 F300 G1 X48.653 Y37.324 F300 @@ -1031,40 +1032,42 @@ G1 X57.308 Y58.145 F300 G1 X57.319 Y58.029 F300 G1 X57.317 Y57.913 F300 G1 X57.311 Y57.848 F300 -G1 X57.295 Y57.744 F300 -G1 X57.274 Y57.653 F300 -G1 X57.255 Y57.596 F300 -G1 X57.232 Y57.548 F300 -G1 X57.206 Y57.51 F300 -G1 X57.182 Y57.487 F300 -G1 X57.156 Y57.469 F300 -G1 X57.126 Y57.457 F300 -G1 X57.092 Y57.452 F300 -G1 X57.058 Y57.454 F300 -G1 X57.019 Y57.462 F300 -G1 X56.971 Y57.48 F300 +G1 X57.303 Y57.793 F300 +G1 X57.294 Y57.74 F300 +G1 X57.283 Y57.689 F300 +G1 X57.271 Y57.642 F300 +G1 X57.256 Y57.598 F300 +G1 X57.238 Y57.559 F300 +G1 X57.218 Y57.525 F300 +G1 X57.194 Y57.497 F300 +G1 X57.167 Y57.475 F300 +G1 X57.136 Y57.46 F300 +G1 X57.101 Y57.453 F300 +G1 X57.062 Y57.453 F300 +G1 X57.018 Y57.462 F300 +G1 X56.969 Y57.481 F300 G1 X56.915 Y57.51 F300 -G1 X56.84 Y57.559 F300 -G1 X56.778 Y57.607 F300 -G1 X56.728 Y57.654 F300 -G1 X56.687 Y57.701 F300 -G1 X56.654 Y57.747 F300 -G1 X56.625 Y57.799 F300 -G1 X56.604 Y57.85 F300 -G1 X56.591 Y57.901 F300 -G1 X56.585 Y57.95 F300 -G1 X56.584 Y57.999 F300 -G1 X56.592 Y58.061 F300 -G1 X56.609 Y58.122 F300 -G1 X56.635 Y58.182 F300 -G1 X56.669 Y58.24 F300 -G1 X56.709 Y58.295 F300 -G1 X56.755 Y58.347 F300 -G1 X56.809 Y58.397 F300 -G1 X56.869 Y58.443 F300 -G1 X56.933 Y58.485 F300 -G1 X57.001 Y58.522 F300 -G1 X57.073 Y58.554 F300 +G1 X56.837 Y57.561 F300 +G1 X56.77 Y57.614 F300 +G1 X56.714 Y57.669 F300 +G1 X56.669 Y57.724 F300 +G1 X56.634 Y57.781 F300 +G1 X56.609 Y57.838 F300 +G1 X56.592 Y57.896 F300 +G1 X56.585 Y57.954 F300 +G1 X56.585 Y58.011 F300 +G1 X56.594 Y58.067 F300 +G1 X56.61 Y58.123 F300 +G1 X56.632 Y58.177 F300 +G1 X56.662 Y58.23 F300 +G1 X56.698 Y58.281 F300 +G1 X56.739 Y58.33 F300 +G1 X56.785 Y58.376 F300 +G1 X56.837 Y58.419 F300 +G1 X56.892 Y58.459 F300 +G1 X56.952 Y58.496 F300 +G1 X57.015 Y58.528 F300 +G1 X57.081 Y58.557 F300 G1 X57.15 Y58.581 F300 G0 X56.745 Y59.767 G1 X56.596 Y59.716 F300 @@ -1080,52 +1083,52 @@ G1 X55.542 Y58.815 F300 G1 X55.469 Y58.676 F300 G1 X55.407 Y58.532 F300 G1 X55.404 Y58.523 F300 -G1 X55.37 Y58.42 F300 -G1 X55.345 Y58.318 F300 -G1 X55.327 Y58.216 F300 -G1 X55.316 Y58.115 F300 -G1 X55.313 Y58.015 F300 -G1 X55.316 Y57.913 F300 -G1 X55.326 Y57.813 F300 -G1 X55.342 Y57.714 F300 -G1 X55.364 Y57.616 F300 -G1 X55.393 Y57.52 F300 -G1 X55.436 Y57.402 F300 -G1 X55.488 Y57.286 F300 -G1 X55.547 Y57.174 F300 -G1 X55.615 Y57.066 F300 -G1 X55.69 Y56.962 F300 -G1 X55.771 Y56.863 F300 -G1 X55.859 Y56.768 F300 -G1 X55.953 Y56.679 F300 -G1 X56.052 Y56.596 F300 -G1 X56.156 Y56.52 F300 -G1 X56.265 Y56.451 F300 +G1 X55.365 Y58.402 F300 +G1 X55.337 Y58.281 F300 +G1 X55.32 Y58.16 F300 +G1 X55.313 Y58.039 F300 +G1 X55.316 Y57.918 F300 +G1 X55.328 Y57.799 F300 +G1 X55.349 Y57.682 F300 +G1 X55.378 Y57.566 F300 +G1 X55.416 Y57.452 F300 +G1 X55.462 Y57.34 F300 +G1 X55.515 Y57.232 F300 +G1 X55.576 Y57.127 F300 +G1 X55.643 Y57.026 F300 +G1 X55.716 Y56.928 F300 +G1 X55.796 Y56.835 F300 +G1 X55.881 Y56.746 F300 +G1 X55.971 Y56.663 F300 +G1 X56.066 Y56.585 F300 +G1 X56.166 Y56.513 F300 +G1 X56.27 Y56.447 F300 G1 X56.377 Y56.388 F300 G1 X56.494 Y56.333 F300 G1 X56.57 Y56.303 F300 -G1 X56.53 Y56.17 F300 +G1 X56.544 Y56.214 F300 +G1 X56.515 Y56.126 F300 G1 X56.483 Y56.039 F300 G1 X56.452 Y55.978 F300 G1 X56.433 Y55.92 F300 -G1 X56.335 Y55.794 F300 -G1 X56.23 Y55.677 F300 -G1 X56.12 Y55.568 F300 -G1 X56.004 Y55.467 F300 -G1 X55.883 Y55.372 F300 -G1 X55.757 Y55.284 F300 -G1 X55.626 Y55.203 F300 -G1 X55.49 Y55.129 F300 -G1 X55.351 Y55.061 F300 -G1 X55.208 Y55 F300 -G1 X55.062 Y54.946 F300 -G1 X54.914 Y54.898 F300 -G1 X54.764 Y54.856 F300 -G1 X54.611 Y54.819 F300 -G1 X54.457 Y54.789 F300 -G1 X54.263 Y54.76 F300 -G1 X54.069 Y54.739 F300 -G1 X53.875 Y54.727 F300 +G1 X56.33 Y55.789 F300 +G1 X56.22 Y55.667 F300 +G1 X56.103 Y55.552 F300 +G1 X55.98 Y55.446 F300 +G1 X55.85 Y55.348 F300 +G1 X55.716 Y55.258 F300 +G1 X55.576 Y55.175 F300 +G1 X55.432 Y55.1 F300 +G1 X55.283 Y55.032 F300 +G1 X55.132 Y54.971 F300 +G1 X54.977 Y54.917 F300 +G1 X54.819 Y54.87 F300 +G1 X54.659 Y54.83 F300 +G1 X54.498 Y54.797 F300 +G1 X54.335 Y54.77 F300 +G1 X54.172 Y54.749 F300 +G1 X54.008 Y54.735 F300 +G1 X53.844 Y54.726 F300 G1 X53.681 Y54.724 F300 G1 X53.378 Y54.737 F300 G1 X53.075 Y54.762 F300 @@ -1134,17 +1137,18 @@ G1 X52.473 Y54.847 F300 G1 X52.175 Y54.908 F300 G1 X51.879 Y54.98 F300 G1 X51.688 Y55.033 F300 -G1 X51.492 Y55.089 F300 -G1 X51.297 Y55.149 F300 -G1 X51.106 Y55.214 F300 -G1 X50.965 Y55.269 F300 -G1 X50.827 Y55.328 F300 -G1 X50.693 Y55.393 F300 -G1 X50.562 Y55.465 F300 -G1 X50.462 Y55.528 F300 -G1 X50.363 Y55.596 F300 -G1 X50.268 Y55.671 F300 -G1 X50.175 Y55.752 F300 +G1 X51.553 Y55.072 F300 +G1 X51.417 Y55.112 F300 +G1 X51.283 Y55.154 F300 +G1 X51.15 Y55.199 F300 +G1 X51.019 Y55.247 F300 +G1 X50.891 Y55.3 F300 +G1 X50.765 Y55.357 F300 +G1 X50.642 Y55.42 F300 +G1 X50.523 Y55.489 F300 +G1 X50.407 Y55.565 F300 +G1 X50.296 Y55.648 F300 +G1 X50.188 Y55.74 F300 G1 X50.086 Y55.84 F300 G1 X49.911 Y56.056 F300 G1 X49.746 Y56.28 F300 @@ -1207,18 +1211,20 @@ G1 X54.77 Y62.21 F300 G1 X55.029 Y61.999 F300 G1 X55.281 Y61.778 F300 G1 X55.318 Y61.745 F300 -G1 X55.533 Y61.539 F300 -G1 X55.754 Y61.317 F300 +G1 X55.433 Y61.636 F300 +G1 X55.55 Y61.523 F300 +G1 X55.666 Y61.407 F300 +G1 X55.783 Y61.287 F300 G1 X55.897 Y61.164 F300 -G1 X56.036 Y61.006 F300 -G1 X56.169 Y60.843 F300 -G1 X56.265 Y60.716 F300 -G1 X56.355 Y60.588 F300 -G1 X56.439 Y60.458 F300 -G1 X56.516 Y60.325 F300 -G1 X56.587 Y60.188 F300 -G1 X56.65 Y60.05 F300 -G1 X56.703 Y59.909 F300 +G1 X56.009 Y61.038 F300 +G1 X56.117 Y60.908 F300 +G1 X56.22 Y60.776 F300 +G1 X56.319 Y60.641 F300 +G1 X56.411 Y60.502 F300 +G1 X56.496 Y60.361 F300 +G1 X56.573 Y60.216 F300 +G1 X56.641 Y60.069 F300 +G1 X56.7 Y59.919 F300 G1 X56.748 Y59.767 F300 G1 X56.745 Y59.767 F300 G0 X49.152 Y70.223 @@ -1234,31 +1240,29 @@ G1 X51.019 Y69.495 F300 G1 X51.2 Y69.361 F300 G1 X51.373 Y69.218 F300 G1 X51.433 Y69.164 F300 -G1 X51.557 Y69.045 F300 -G1 X51.675 Y68.922 F300 -G1 X51.787 Y68.796 F300 -G1 X51.892 Y68.666 F300 +G1 X51.586 Y69.016 F300 +G1 X51.73 Y68.861 F300 +G1 X51.865 Y68.7 F300 G1 X51.991 Y68.533 F300 -G1 X52.084 Y68.396 F300 -G1 X52.189 Y68.227 F300 -G1 X52.286 Y68.054 F300 -G1 X52.373 Y67.877 F300 -G1 X52.452 Y67.696 F300 -G1 X52.523 Y67.512 F300 -G1 X52.586 Y67.325 F300 -G1 X52.64 Y67.135 F300 -G1 X52.686 Y66.943 F300 -G1 X52.724 Y66.749 F300 -G1 X52.754 Y66.553 F300 -G1 X52.776 Y66.356 F300 -G1 X52.789 Y66.158 F300 -G1 X52.795 Y65.959 F300 -G1 X52.792 Y65.76 F300 -G1 X52.782 Y65.56 F300 -G1 X52.764 Y65.361 F300 -G1 X52.738 Y65.163 F300 -G1 X52.704 Y64.965 F300 -G1 X52.662 Y64.769 F300 +G1 X52.107 Y68.361 F300 +G1 X52.214 Y68.184 F300 +G1 X52.312 Y68.003 F300 +G1 X52.4 Y67.817 F300 +G1 X52.48 Y67.627 F300 +G1 X52.55 Y67.434 F300 +G1 X52.612 Y67.238 F300 +G1 X52.664 Y67.039 F300 +G1 X52.708 Y66.838 F300 +G1 X52.743 Y66.635 F300 +G1 X52.769 Y66.43 F300 +G1 X52.786 Y66.224 F300 +G1 X52.794 Y66.017 F300 +G1 X52.794 Y65.809 F300 +G1 X52.785 Y65.601 F300 +G1 X52.767 Y65.394 F300 +G1 X52.741 Y65.187 F300 +G1 X52.707 Y64.981 F300 +G1 X52.664 Y64.777 F300 G1 X52.612 Y64.574 F300 G1 X52.364 Y64.597 F300 G1 X52.114 Y64.608 F300 @@ -1274,39 +1278,46 @@ G1 X49.927 Y64.173 F300 G1 X49.701 Y64.068 F300 G1 X49.48 Y63.951 F300 G1 X49.477 Y63.95 F300 -G1 X49.393 Y64.091 F300 -G1 X49.318 Y64.237 F300 -G1 X49.251 Y64.388 F300 -G1 X49.191 Y64.543 F300 -G1 X49.139 Y64.7 F300 -G1 X49.093 Y64.86 F300 -G1 X49.052 Y65.024 F300 -G1 X49.016 Y65.192 F300 -G1 X48.976 Y65.416 F300 -G1 X48.943 Y65.643 F300 -G1 X48.915 Y65.874 F300 -G1 X48.88 Y66.22 F300 -G1 X48.85 Y66.566 F300 -G1 X48.819 Y66.91 F300 -G1 X48.785 Y67.244 F300 -G1 X48.757 Y67.466 F300 -G1 X48.723 Y67.68 F300 +G1 X49.39 Y64.098 F300 +G1 X49.312 Y64.251 F300 +G1 X49.243 Y64.408 F300 +G1 X49.182 Y64.57 F300 +G1 X49.128 Y64.735 F300 +G1 X49.081 Y64.904 F300 +G1 X49.04 Y65.076 F300 +G1 X49.005 Y65.25 F300 +G1 X48.974 Y65.426 F300 +G1 X48.948 Y65.604 F300 +G1 X48.925 Y65.784 F300 +G1 X48.905 Y65.964 F300 +G1 X48.887 Y66.145 F300 +G1 X48.87 Y66.325 F300 +G1 X48.855 Y66.506 F300 +G1 X48.839 Y66.685 F300 +G1 X48.824 Y66.864 F300 +G1 X48.807 Y67.041 F300 +G1 X48.788 Y67.215 F300 +G1 X48.767 Y67.388 F300 +G1 X48.743 Y67.558 F300 +G1 X48.715 Y67.724 F300 G1 X48.683 Y67.887 F300 -G1 X48.637 Y68.085 F300 -G1 X48.584 Y68.286 F300 -G1 X48.523 Y68.487 F300 -G1 X48.471 Y68.636 F300 -G1 X48.414 Y68.783 F300 -G1 X48.351 Y68.926 F300 +G1 X48.653 Y68.02 F300 +G1 X48.62 Y68.153 F300 +G1 X48.584 Y68.287 F300 +G1 X48.544 Y68.421 F300 +G1 X48.5 Y68.554 F300 +G1 X48.453 Y68.685 F300 +G1 X48.4 Y68.815 F300 +G1 X48.343 Y68.942 F300 G1 X48.281 Y69.066 F300 -G1 X48.205 Y69.202 F300 -G1 X48.122 Y69.332 F300 -G1 X48.032 Y69.456 F300 -G1 X47.934 Y69.573 F300 -G1 X47.849 Y69.662 F300 -G1 X47.76 Y69.745 F300 -G1 X47.664 Y69.823 F300 -G1 X47.562 Y69.895 F300 +G1 X48.214 Y69.186 F300 +G1 X48.142 Y69.303 F300 +G1 X48.063 Y69.415 F300 +G1 X47.978 Y69.522 F300 +G1 X47.887 Y69.623 F300 +G1 X47.789 Y69.718 F300 +G1 X47.685 Y69.807 F300 +G1 X47.573 Y69.888 F300 G1 X47.453 Y69.961 F300 G1 X47.382 Y69.993 F300 G1 X47.56 Y70.065 F300 @@ -1320,108 +1331,122 @@ G1 X48.767 Y70.252 F300 G1 X48.977 Y70.241 F300 G1 X49.152 Y70.223 F300 G0 X45.31 Y59.878 -G1 X45.009 Y60.066 F300 -G1 X44.711 Y60.262 F300 -G1 X44.416 Y60.466 F300 -G1 X44.199 Y60.624 F300 -G1 X43.986 Y60.787 F300 -G1 X43.777 Y60.956 F300 -G1 X43.573 Y61.13 F300 -G1 X43.375 Y61.31 F300 -G1 X43.182 Y61.496 F300 -G1 X42.997 Y61.688 F300 -G1 X42.818 Y61.887 F300 -G1 X42.681 Y62.051 F300 -G1 X42.549 Y62.22 F300 -G1 X42.423 Y62.394 F300 -G1 X42.302 Y62.572 F300 +G1 X45.097 Y60.01 F300 +G1 X44.885 Y60.146 F300 +G1 X44.675 Y60.286 F300 +G1 X44.468 Y60.429 F300 +G1 X44.263 Y60.577 F300 +G1 X44.061 Y60.729 F300 +G1 X43.863 Y60.886 F300 +G1 X43.669 Y61.047 F300 +G1 X43.479 Y61.214 F300 +G1 X43.295 Y61.385 F300 +G1 X43.116 Y61.563 F300 +G1 X42.943 Y61.746 F300 +G1 X42.777 Y61.935 F300 +G1 X42.618 Y62.131 F300 +G1 X42.467 Y62.333 F300 +G1 X42.323 Y62.541 F300 G1 X42.188 Y62.757 F300 -G1 X42.087 Y62.935 F300 -G1 X41.993 Y63.12 F300 -G1 X41.905 Y63.309 F300 -G1 X41.826 Y63.504 F300 -G1 X41.754 Y63.701 F300 -G1 X41.691 Y63.901 F300 -G1 X41.636 Y64.104 F300 -G1 X41.591 Y64.309 F300 -G1 X41.562 Y64.475 F300 -G1 X41.539 Y64.641 F300 -G1 X41.523 Y64.807 F300 -G1 X41.514 Y64.972 F300 -G1 X41.512 Y65.138 F300 -G1 X41.517 Y65.304 F300 -G1 X41.529 Y65.469 F300 -G1 X41.55 Y65.632 F300 -G1 X41.578 Y65.794 F300 -G1 X41.614 Y65.955 F300 -G1 X41.658 Y66.113 F300 -G1 X41.711 Y66.27 F300 -G1 X41.772 Y66.424 F300 -G1 X41.843 Y66.576 F300 +G1 X42.099 Y62.912 F300 +G1 X42.016 Y63.072 F300 +G1 X41.938 Y63.235 F300 +G1 X41.866 Y63.402 F300 +G1 X41.8 Y63.572 F300 +G1 X41.739 Y63.744 F300 +G1 X41.686 Y63.919 F300 +G1 X41.639 Y64.096 F300 +G1 X41.599 Y64.274 F300 +G1 X41.566 Y64.453 F300 +G1 X41.54 Y64.633 F300 +G1 X41.523 Y64.813 F300 +G1 X41.513 Y64.994 F300 +G1 X41.512 Y65.174 F300 +G1 X41.52 Y65.354 F300 +G1 X41.536 Y65.533 F300 +G1 X41.562 Y65.71 F300 +G1 X41.597 Y65.885 F300 +G1 X41.642 Y66.059 F300 +G1 X41.696 Y66.23 F300 +G1 X41.761 Y66.398 F300 +G1 X41.837 Y66.564 F300 G1 X41.923 Y66.725 F300 -G1 X42.007 Y66.865 F300 -G1 X42.096 Y66.998 F300 -G1 X42.191 Y67.127 F300 -G1 X42.291 Y67.249 F300 -G1 X42.396 Y67.367 F300 +G1 X42.024 Y66.891 F300 +G1 X42.133 Y67.049 F300 +G1 X42.25 Y67.2 F300 +G1 X42.374 Y67.344 F300 G1 X42.506 Y67.48 F300 G1 X42.645 Y67.61 F300 G1 X42.789 Y67.733 F300 -G1 X42.939 Y67.849 F300 +G1 X42.94 Y67.849 F300 G1 X43.095 Y67.959 F300 G1 X43.256 Y68.063 F300 G1 X43.42 Y68.161 F300 -G1 X43.589 Y68.252 F300 -G1 X43.76 Y68.338 F300 -G1 X43.935 Y68.419 F300 +G1 X43.589 Y68.253 F300 +G1 X43.761 Y68.338 F300 +G1 X43.936 Y68.419 F300 G1 X44.113 Y68.494 F300 -G1 X44.338 Y68.58 F300 -G1 X44.565 Y68.658 F300 -G1 X44.792 Y68.729 F300 +G1 X44.292 Y68.563 F300 +G1 X44.473 Y68.628 F300 +G1 X44.654 Y68.687 F300 +G1 X44.837 Y68.742 F300 G1 X45.019 Y68.792 F300 +G1 X45.101 Y68.814 F300 +G1 X45.188 Y68.837 F300 +G1 X45.279 Y68.861 F300 G1 X45.373 Y68.885 F300 -G1 X45.57 Y68.931 F300 +G1 X45.471 Y68.909 F300 +G1 X45.572 Y68.931 F300 +G1 X45.674 Y68.952 F300 G1 X45.777 Y68.971 F300 -G1 X45.917 Y68.992 F300 -G1 X46.057 Y69.006 F300 +G1 X45.882 Y68.987 F300 +G1 X45.987 Y69 F300 +G1 X46.091 Y69.008 F300 G1 X46.194 Y69.012 F300 -G1 X46.298 Y69.011 F300 -G1 X46.398 Y69.003 F300 -G1 X46.494 Y68.99 F300 +G1 X46.296 Y69.011 F300 +G1 X46.396 Y69.004 F300 +G1 X46.493 Y68.99 F300 G1 X46.587 Y68.969 F300 -G1 X46.66 Y68.947 F300 -G1 X46.729 Y68.92 F300 -G1 X46.796 Y68.888 F300 -G1 X46.859 Y68.849 F300 +G1 X46.677 Y68.941 F300 +G1 X46.763 Y68.905 F300 +G1 X46.843 Y68.86 F300 G1 X46.919 Y68.805 F300 -G1 X46.988 Y68.742 F300 -G1 X47.051 Y68.675 F300 -G1 X47.108 Y68.603 F300 -G1 X47.161 Y68.526 F300 -G1 X47.209 Y68.445 F300 -G1 X47.261 Y68.34 F300 -G1 X47.307 Y68.231 F300 -G1 X47.348 Y68.117 F300 -G1 X47.383 Y68.001 F300 -G1 X47.423 Y67.843 F300 -G1 X47.456 Y67.686 F300 -G1 X47.483 Y67.531 F300 +G1 X46.999 Y68.731 F300 +G1 X47.072 Y68.65 F300 +G1 X47.137 Y68.562 F300 +G1 X47.195 Y68.469 F300 +G1 X47.247 Y68.371 F300 +G1 X47.292 Y68.269 F300 +G1 X47.332 Y68.164 F300 +G1 X47.367 Y68.056 F300 +G1 X47.398 Y67.946 F300 +G1 X47.425 Y67.835 F300 +G1 X47.448 Y67.724 F300 +G1 X47.469 Y67.613 F300 +G1 X47.487 Y67.504 F300 +G1 X47.504 Y67.397 F300 +G1 X47.519 Y67.293 F300 +G1 X47.534 Y67.192 F300 G1 X47.548 Y67.096 F300 -G1 X47.605 Y66.688 F300 +G1 X47.578 Y66.892 F300 +G1 X47.605 Y66.689 F300 +G1 X47.631 Y66.485 F300 G1 X47.655 Y66.281 F300 +G1 X47.679 Y66.078 F300 G1 X47.703 Y65.875 F300 +G1 X47.729 Y65.673 F300 G1 X47.756 Y65.472 F300 -G1 X47.796 Y65.205 F300 -G1 X47.843 Y64.941 F300 +G1 X47.786 Y65.272 F300 +G1 X47.818 Y65.073 F300 +G1 X47.855 Y64.876 F300 G1 X47.897 Y64.68 F300 G1 X47.944 Y64.486 F300 G1 X47.997 Y64.294 F300 G1 X48.058 Y64.105 F300 G1 X48.125 Y63.917 F300 -G1 X48.185 Y63.77 F300 -G1 X48.251 Y63.624 F300 -G1 X48.323 Y63.48 F300 -G1 X48.402 Y63.337 F300 +G1 X48.202 Y63.733 F300 +G1 X48.287 Y63.551 F300 +G1 X48.382 Y63.372 F300 G1 X48.488 Y63.196 F300 G1 X48.325 Y63.025 F300 G1 X48.17 Y62.847 F300 @@ -1450,12 +1475,12 @@ G1 X45.31 Y59.878 F300 G0 X40.825 Y49.853 G1 X40.84 Y50.161 F300 G1 X40.86 Y50.47 F300 -G1 X40.887 Y50.778 F300 +G1 X40.887 Y50.779 F300 G1 X40.92 Y51.087 F300 G1 X40.96 Y51.395 F300 G1 X41.007 Y51.702 F300 G1 X41.061 Y52.008 F300 -G1 X41.122 Y52.313 F300 +G1 X41.122 Y52.312 F300 G1 X41.19 Y52.615 F300 G1 X41.266 Y52.916 F300 G1 X41.35 Y53.214 F300 @@ -1463,37 +1488,34 @@ G1 X41.442 Y53.51 F300 G1 X41.542 Y53.803 F300 G1 X41.65 Y54.093 F300 G1 X41.767 Y54.379 F300 -G1 X41.871 Y54.615 F300 -G1 X41.981 Y54.848 F300 -G1 X42.098 Y55.078 F300 -G1 X42.221 Y55.305 F300 -G1 X42.35 Y55.529 F300 +G1 X41.893 Y54.662 F300 +G1 X42.027 Y54.941 F300 +G1 X42.171 Y55.215 F300 +G1 X42.324 Y55.485 F300 G1 X42.487 Y55.75 F300 -G1 X42.615 Y55.945 F300 -G1 X42.75 Y56.137 F300 -G1 X42.891 Y56.326 F300 -G1 X43.038 Y56.511 F300 -G1 X43.192 Y56.692 F300 -G1 X43.351 Y56.868 F300 -G1 X43.515 Y57.04 F300 -G1 X43.684 Y57.207 F300 -G1 X43.859 Y57.368 F300 -G1 X44.039 Y57.525 F300 -G1 X44.224 Y57.675 F300 -G1 X44.413 Y57.819 F300 -G1 X44.607 Y57.957 F300 -G1 X44.805 Y58.088 F300 -G1 X45.007 Y58.212 F300 -G1 X45.213 Y58.329 F300 -G1 X45.423 Y58.438 F300 -G1 X45.637 Y58.539 F300 -G1 X45.854 Y58.632 F300 -G1 X46.074 Y58.717 F300 +G1 X42.621 Y55.954 F300 +G1 X42.762 Y56.154 F300 +G1 X42.91 Y56.35 F300 +G1 X43.064 Y56.542 F300 +G1 X43.225 Y56.729 F300 +G1 X43.391 Y56.912 F300 +G1 X43.564 Y57.089 F300 +G1 X43.742 Y57.261 F300 +G1 X43.926 Y57.428 F300 +G1 X44.115 Y57.588 F300 +G1 X44.31 Y57.742 F300 +G1 X44.509 Y57.889 F300 +G1 X44.713 Y58.028 F300 +G1 X44.922 Y58.161 F300 +G1 X45.135 Y58.285 F300 +G1 X45.353 Y58.402 F300 +G1 X45.574 Y58.51 F300 +G1 X45.799 Y58.61 F300 +G1 X46.028 Y58.7 F300 G1 X46.26 Y58.781 F300 -G1 X46.448 Y58.839 F300 -G1 X46.638 Y58.89 F300 -G1 X46.83 Y58.935 F300 -G1 X47.024 Y58.973 F300 +G1 X46.496 Y58.852 F300 +G1 X46.735 Y58.914 F300 +G1 X46.976 Y58.965 F300 G1 X47.22 Y59.005 F300 G1 X47.288 Y58.709 F300 G1 X47.368 Y58.417 F300 @@ -1517,80 +1539,87 @@ G1 X49.769 Y54.528 F300 G1 X49.722 Y54.456 F300 G1 X49.687 Y54.378 F300 G1 X49.665 Y54.303 F300 -G1 X49.518 Y53.695 F300 -G1 X49.366 Y53.084 F300 -G1 X49.26 Y52.677 F300 +G1 X49.595 Y54.014 F300 +G1 X49.525 Y53.724 F300 +G1 X49.454 Y53.433 F300 +G1 X49.381 Y53.142 F300 +G1 X49.306 Y52.852 F300 +G1 X49.229 Y52.561 F300 G1 X49.148 Y52.272 F300 -G1 X49.03 Y51.868 F300 -G1 X48.936 Y51.567 F300 -G1 X48.837 Y51.267 F300 -G1 X48.733 Y50.971 F300 -G1 X48.622 Y50.677 F300 -G1 X48.505 Y50.385 F300 -G1 X48.38 Y50.097 F300 -G1 X48.248 Y49.813 F300 -G1 X48.107 Y49.533 F300 -G1 X47.989 Y49.312 F300 -G1 X47.864 Y49.094 F300 -G1 X47.733 Y48.879 F300 -G1 X47.595 Y48.667 F300 +G1 X49.065 Y51.983 F300 +G1 X48.977 Y51.696 F300 +G1 X48.885 Y51.41 F300 +G1 X48.788 Y51.126 F300 +G1 X48.686 Y50.844 F300 +G1 X48.578 Y50.565 F300 +G1 X48.464 Y50.289 F300 +G1 X48.343 Y50.016 F300 +G1 X48.215 Y49.746 F300 +G1 X48.08 Y49.48 F300 +G1 X47.936 Y49.218 F300 +G1 X47.783 Y48.96 F300 +G1 X47.622 Y48.707 F300 G1 X47.45 Y48.458 F300 -G1 X47.327 Y48.292 F300 -G1 X47.197 Y48.127 F300 -G1 X47.06 Y47.965 F300 -G1 X46.916 Y47.806 F300 -G1 X46.766 Y47.65 F300 -G1 X46.612 Y47.499 F300 -G1 X46.452 Y47.354 F300 -G1 X46.287 Y47.213 F300 -G1 X46.118 Y47.078 F300 -G1 X45.943 Y46.949 F300 -G1 X45.764 Y46.827 F300 -G1 X45.58 Y46.711 F300 -G1 X45.394 Y46.604 F300 -G1 X45.203 Y46.504 F300 -G1 X45.009 Y46.412 F300 -G1 X44.845 Y46.342 F300 -G1 X44.678 Y46.279 F300 -G1 X44.51 Y46.222 F300 -G1 X44.34 Y46.172 F300 -G1 X44.168 Y46.129 F300 -G1 X43.995 Y46.094 F300 -G1 X43.821 Y46.066 F300 -G1 X43.645 Y46.045 F300 -G1 X43.468 Y46.033 F300 -G1 X43.29 Y46.029 F300 -G1 X43.11 Y46.034 F300 +G1 X47.332 Y48.298 F300 +G1 X47.207 Y48.14 F300 +G1 X47.077 Y47.985 F300 +G1 X46.941 Y47.833 F300 +G1 X46.8 Y47.684 F300 +G1 X46.654 Y47.54 F300 +G1 X46.503 Y47.399 F300 +G1 X46.347 Y47.263 F300 +G1 X46.187 Y47.132 F300 +G1 X46.022 Y47.007 F300 +G1 X45.854 Y46.887 F300 +G1 X45.681 Y46.773 F300 +G1 X45.505 Y46.666 F300 +G1 X45.325 Y46.566 F300 +G1 X45.142 Y46.474 F300 +G1 X44.955 Y46.388 F300 +G1 X44.766 Y46.311 F300 +G1 X44.574 Y46.243 F300 +G1 X44.38 Y46.183 F300 +G1 X44.183 Y46.133 F300 +G1 X43.985 Y46.092 F300 +G1 X43.784 Y46.061 F300 +G1 X43.582 Y46.04 F300 +G1 X43.378 Y46.03 F300 +G1 X43.173 Y46.032 F300 G1 X42.929 Y46.048 F300 -G1 X42.79 Y46.066 F300 -G1 X42.66 Y46.091 F300 -G1 X42.537 Y46.121 F300 -G1 X42.422 Y46.156 F300 -G1 X42.313 Y46.196 F300 -G1 X42.209 Y46.241 F300 -G1 X42.086 Y46.304 F300 -G1 X41.971 Y46.374 F300 -G1 X41.863 Y46.45 F300 -G1 X41.763 Y46.532 F300 -G1 X41.669 Y46.62 F300 -G1 X41.58 Y46.714 F300 -G1 X41.498 Y46.813 F300 -G1 X41.421 Y46.918 F300 -G1 X41.35 Y47.028 F300 -G1 X41.284 Y47.143 F300 -G1 X41.209 Y47.29 F300 -G1 X41.142 Y47.444 F300 -G1 X41.083 Y47.603 F300 -G1 X41.03 Y47.769 F300 -G1 X40.985 Y47.936 F300 -G1 X40.945 Y48.106 F300 -G1 X40.912 Y48.28 F300 -G1 X40.885 Y48.457 F300 -G1 X40.856 Y48.693 F300 -G1 X40.836 Y48.93 F300 -G1 X40.824 Y49.165 F300 -G1 X40.819 Y49.401 F300 -G1 X40.82 Y49.631 F300 +G1 X42.77 Y46.07 F300 +G1 X42.62 Y46.1 F300 +G1 X42.477 Y46.138 F300 +G1 X42.342 Y46.185 F300 +G1 X42.214 Y46.239 F300 +G1 X42.092 Y46.3 F300 +G1 X41.978 Y46.369 F300 +G1 X41.871 Y46.444 F300 +G1 X41.77 Y46.526 F300 +G1 X41.675 Y46.613 F300 +G1 X41.586 Y46.707 F300 +G1 X41.504 Y46.806 F300 +G1 X41.427 Y46.909 F300 +G1 X41.356 Y47.018 F300 +G1 X41.29 Y47.131 F300 +G1 X41.229 Y47.248 F300 +G1 X41.174 Y47.369 F300 +G1 X41.123 Y47.493 F300 +G1 X41.077 Y47.621 F300 +G1 X41.035 Y47.751 F300 +G1 X40.998 Y47.884 F300 +G1 X40.965 Y48.019 F300 +G1 X40.935 Y48.156 F300 +G1 X40.91 Y48.294 F300 +G1 X40.888 Y48.433 F300 +G1 X40.869 Y48.574 F300 +G1 X40.854 Y48.714 F300 +G1 X40.842 Y48.855 F300 +G1 X40.832 Y48.996 F300 +G1 X40.825 Y49.137 F300 +G1 X40.821 Y49.277 F300 +G1 X40.819 Y49.415 F300 +G1 X40.819 Y49.553 F300 +G1 X40.821 Y49.688 F300 G1 X40.825 Y49.853 F300 G0 X30.861 Y49.834 G1 X31.344 Y49.852 F300 @@ -1599,27 +1628,27 @@ G1 X32.309 Y49.853 F300 G1 X32.792 Y49.835 F300 G1 X33.274 Y49.805 F300 G1 X33.375 Y49.797 F300 -G1 X34.41 Y49.751 F300 -G1 X35.445 Y49.699 F300 -G1 X36.479 Y49.639 F300 -G1 X37.513 Y49.573 F300 -G1 X38.546 Y49.499 F300 +G1 X34.617 Y49.741 F300 +G1 X35.858 Y49.676 F300 +G1 X37.099 Y49.6 F300 +G1 X38.339 Y49.514 F300 G1 X39.579 Y49.419 F300 -G1 X39.583 Y49.128 F300 -G1 X39.597 Y48.835 F300 -G1 X39.62 Y48.541 F300 -G1 X39.645 Y48.321 F300 -G1 X39.676 Y48.102 F300 -G1 X39.714 Y47.885 F300 -G1 X39.76 Y47.671 F300 -G1 X39.813 Y47.459 F300 -G1 X39.874 Y47.251 F300 -G1 X39.943 Y47.047 F300 -G1 X40.021 Y46.849 F300 -G1 X40.09 Y46.693 F300 -G1 X40.166 Y46.542 F300 -G1 X40.247 Y46.395 F300 -G1 X40.334 Y46.252 F300 +G1 X39.581 Y49.214 F300 +G1 X39.588 Y49.007 F300 +G1 X39.599 Y48.8 F300 +G1 X39.615 Y48.593 F300 +G1 X39.637 Y48.386 F300 +G1 X39.664 Y48.18 F300 +G1 X39.698 Y47.975 F300 +G1 X39.737 Y47.772 F300 +G1 X39.784 Y47.571 F300 +G1 X39.837 Y47.374 F300 +G1 X39.897 Y47.18 F300 +G1 X39.965 Y46.989 F300 +G1 X40.041 Y46.803 F300 +G1 X40.125 Y46.622 F300 +G1 X40.217 Y46.447 F300 +G1 X40.318 Y46.277 F300 G1 X40.428 Y46.114 F300 G1 X40.236 Y46.074 F300 G1 X40.048 Y46.022 F300 @@ -1658,45 +1687,47 @@ G1 X31.909 Y44.186 F300 G1 X31.557 Y44.266 F300 G1 X31.208 Y44.357 F300 G1 X30.977 Y44.424 F300 -G1 X30.72 Y44.501 F300 -G1 X30.455 Y44.585 F300 -G1 X30.278 Y44.645 F300 -G1 X30.102 Y44.71 F300 +G1 X30.83 Y44.467 F300 +G1 X30.681 Y44.513 F300 +G1 X30.53 Y44.56 F300 +G1 X30.379 Y44.61 F300 +G1 X30.228 Y44.663 F300 +G1 X30.077 Y44.72 F300 G1 X29.928 Y44.78 F300 -G1 X29.756 Y44.857 F300 -G1 X29.589 Y44.939 F300 -G1 X29.427 Y45.029 F300 -G1 X29.31 Y45.102 F300 -G1 X29.196 Y45.179 F300 -G1 X29.088 Y45.262 F300 +G1 X29.781 Y44.845 F300 +G1 X29.637 Y44.915 F300 +G1 X29.496 Y44.989 F300 +G1 X29.36 Y45.07 F300 +G1 X29.229 Y45.156 F300 +G1 X29.104 Y45.249 F300 G1 X28.985 Y45.35 F300 -G1 X28.901 Y45.43 F300 -G1 X28.826 Y45.513 F300 -G1 X28.758 Y45.598 F300 -G1 X28.696 Y45.685 F300 -G1 X28.642 Y45.773 F300 -G1 X28.593 Y45.864 F300 -G1 X28.542 Y45.977 F300 -G1 X28.499 Y46.093 F300 -G1 X28.465 Y46.212 F300 -G1 X28.438 Y46.333 F300 -G1 X28.418 Y46.456 F300 -G1 X28.405 Y46.58 F300 -G1 X28.4 Y46.705 F300 -G1 X28.401 Y46.832 F300 -G1 X28.408 Y46.96 F300 -G1 X28.421 Y47.089 F300 -G1 X28.445 Y47.249 F300 -G1 X28.478 Y47.409 F300 -G1 X28.518 Y47.568 F300 -G1 X28.565 Y47.726 F300 -G1 X28.62 Y47.882 F300 -G1 X28.68 Y48.036 F300 -G1 X28.745 Y48.185 F300 -G1 X28.814 Y48.331 F300 -G1 X28.89 Y48.475 F300 -G1 X28.968 Y48.612 F300 -G1 X29.049 Y48.743 F300 +G1 X28.884 Y45.448 F300 +G1 X28.794 Y45.551 F300 +G1 X28.714 Y45.659 F300 +G1 X28.643 Y45.771 F300 +G1 X28.583 Y45.886 F300 +G1 X28.531 Y46.004 F300 +G1 X28.489 Y46.126 F300 +G1 X28.455 Y46.25 F300 +G1 X28.43 Y46.376 F300 +G1 X28.412 Y46.504 F300 +G1 X28.402 Y46.634 F300 +G1 X28.399 Y46.766 F300 +G1 X28.403 Y46.898 F300 +G1 X28.414 Y47.031 F300 +G1 X28.431 Y47.164 F300 +G1 X28.454 Y47.297 F300 +G1 X28.483 Y47.43 F300 +G1 X28.516 Y47.562 F300 +G1 X28.555 Y47.694 F300 +G1 X28.598 Y47.824 F300 +G1 X28.646 Y47.952 F300 +G1 X28.697 Y48.078 F300 +G1 X28.753 Y48.202 F300 +G1 X28.811 Y48.324 F300 +G1 X28.872 Y48.442 F300 +G1 X28.936 Y48.557 F300 +G1 X29.002 Y48.668 F300 G1 X29.131 Y48.866 F300 G1 X29.227 Y48.997 F300 G1 X29.332 Y49.121 F300 @@ -1726,61 +1757,73 @@ G1 X21.431 Y54.437 F300 G1 X21.444 Y54.729 F300 G1 X21.468 Y55.02 F300 G1 X21.487 Y55.182 F300 -G1 X21.509 Y55.332 F300 -G1 X21.539 Y55.485 F300 -G1 X21.575 Y55.639 F300 -G1 X21.694 Y56.102 F300 -G1 X21.732 Y56.257 F300 -G1 X21.766 Y56.412 F300 -G1 X21.793 Y56.567 F300 -G1 X21.809 Y56.684 F300 -G1 X21.819 Y56.801 F300 -G1 X21.823 Y56.917 F300 +G1 X21.508 Y55.322 F300 +G1 X21.535 Y55.462 F300 +G1 X21.566 Y55.604 F300 +G1 X21.602 Y55.745 F300 +G1 X21.639 Y55.888 F300 +G1 X21.676 Y56.03 F300 +G1 X21.712 Y56.173 F300 +G1 X21.745 Y56.316 F300 +G1 X21.775 Y56.46 F300 +G1 X21.798 Y56.603 F300 +G1 X21.815 Y56.747 F300 +G1 X21.823 Y56.89 F300 G1 X21.82 Y57.034 F300 -G1 X21.81 Y57.141 F300 -G1 X21.793 Y57.244 F300 -G1 X21.77 Y57.343 F300 -G1 X21.74 Y57.44 F300 -G1 X21.704 Y57.534 F300 -G1 X21.653 Y57.65 F300 -G1 X21.593 Y57.762 F300 -G1 X21.528 Y57.871 F300 -G1 X21.456 Y57.978 F300 -G1 X21.354 Y58.117 F300 -G1 X21.246 Y58.252 F300 -G1 X21.134 Y58.384 F300 +G1 X21.808 Y57.158 F300 +G1 X21.786 Y57.278 F300 +G1 X21.755 Y57.394 F300 +G1 X21.716 Y57.507 F300 +G1 X21.669 Y57.616 F300 +G1 X21.615 Y57.723 F300 +G1 X21.555 Y57.827 F300 +G1 X21.49 Y57.928 F300 +G1 X21.421 Y58.027 F300 +G1 X21.348 Y58.125 F300 +G1 X21.272 Y58.22 F300 +G1 X21.193 Y58.314 F300 +G1 X21.114 Y58.407 F300 +G1 X21.033 Y58.499 F300 +G1 X20.953 Y58.591 F300 +G1 X20.874 Y58.681 F300 G1 X20.796 Y58.772 F300 G1 X19.254 Y60.6 F300 -G1 X19.085 Y60.8 F300 -G1 X18.993 Y60.915 F300 -G1 X18.901 Y61.041 F300 -G1 X18.843 Y61.128 F300 -G1 X18.791 Y61.216 F300 -G1 X18.745 Y61.304 F300 -G1 X18.716 Y61.373 F300 -G1 X18.693 Y61.441 F300 -G1 X18.676 Y61.507 F300 +G1 X19.206 Y60.656 F300 +G1 X19.155 Y60.717 F300 +G1 X19.099 Y60.783 F300 +G1 X19.042 Y60.853 F300 +G1 X18.985 Y60.926 F300 +G1 X18.928 Y61.002 F300 +G1 X18.874 Y61.081 F300 +G1 X18.822 Y61.161 F300 +G1 X18.776 Y61.243 F300 +G1 X18.736 Y61.325 F300 +G1 X18.704 Y61.408 F300 +G1 X18.68 Y61.49 F300 G1 X18.666 Y61.571 F300 -G1 X18.846 Y61.45 F300 -G1 X19.02 Y61.32 F300 -G1 X19.187 Y61.184 F300 -G1 X19.35 Y61.04 F300 -G1 X19.559 Y60.841 F300 -G1 X19.762 Y60.633 F300 -G1 X19.961 Y60.418 F300 -G1 X20.252 Y60.088 F300 -G1 X20.54 Y59.754 F300 -G1 X20.734 Y59.532 F300 -G1 X20.929 Y59.313 F300 -G1 X21.129 Y59.099 F300 -G1 X21.283 Y58.942 F300 -G1 X21.44 Y58.789 F300 -G1 X21.602 Y58.642 F300 -G1 X21.768 Y58.501 F300 -G1 X21.905 Y58.394 F300 -G1 X22.046 Y58.291 F300 -G1 X22.191 Y58.192 F300 -G1 X22.342 Y58.1 F300 +G1 X18.84 Y61.454 F300 +G1 X19.008 Y61.329 F300 +G1 X19.17 Y61.198 F300 +G1 X19.328 Y61.06 F300 +G1 X19.481 Y60.917 F300 +G1 X19.63 Y60.769 F300 +G1 X19.777 Y60.617 F300 +G1 X19.921 Y60.462 F300 +G1 X20.062 Y60.304 F300 +G1 X20.203 Y60.145 F300 +G1 X20.342 Y59.984 F300 +G1 X20.481 Y59.822 F300 +G1 X20.621 Y59.661 F300 +G1 X20.761 Y59.501 F300 +G1 X20.903 Y59.342 F300 +G1 X21.047 Y59.185 F300 +G1 X21.194 Y59.032 F300 +G1 X21.343 Y58.882 F300 +G1 X21.497 Y58.737 F300 +G1 X21.654 Y58.597 F300 +G1 X21.817 Y58.462 F300 +G1 X21.985 Y58.334 F300 +G1 X22.159 Y58.214 F300 G1 X22.498 Y58.013 F300 G1 X22.915 Y57.82 F300 G1 X23.338 Y57.638 F300 @@ -1840,35 +1883,31 @@ G1 X27.158 Y47.903 F300 G1 X27.079 Y47.932 F300 G1 X26.997 Y47.95 F300 G1 X26.929 Y47.956 F300 -G1 X26.711 Y47.975 F300 -G1 X26.495 Y48.003 F300 -G1 X26.281 Y48.039 F300 -G1 X26.07 Y48.084 F300 -G1 X25.862 Y48.137 F300 -G1 X25.656 Y48.198 F300 -G1 X25.452 Y48.267 F300 -G1 X25.251 Y48.344 F300 -G1 X25.053 Y48.428 F300 -G1 X24.859 Y48.519 F300 -G1 X24.668 Y48.617 F300 -G1 X24.481 Y48.723 F300 -G1 X24.298 Y48.835 F300 -G1 X24.119 Y48.953 F300 -G1 X23.944 Y49.078 F300 -G1 X23.774 Y49.209 F300 -G1 X23.608 Y49.346 F300 -G1 X23.447 Y49.489 F300 -G1 X23.291 Y49.638 F300 -G1 X23.14 Y49.792 F300 -G1 X22.995 Y49.95 F300 -G1 X22.855 Y50.114 F300 -G1 X22.721 Y50.283 F300 -G1 X22.593 Y50.457 F300 -G1 X22.471 Y50.635 F300 -G1 X22.355 Y50.818 F300 -G1 X22.246 Y51.004 F300 -G1 X22.144 Y51.194 F300 -G1 X22.049 Y51.388 F300 +G1 X26.68 Y47.978 F300 +G1 X26.433 Y48.012 F300 +G1 X26.189 Y48.058 F300 +G1 X25.948 Y48.114 F300 +G1 X25.71 Y48.181 F300 +G1 X25.476 Y48.258 F300 +G1 X25.246 Y48.346 F300 +G1 X25.019 Y48.443 F300 +G1 X24.797 Y48.55 F300 +G1 X24.58 Y48.666 F300 +G1 X24.368 Y48.791 F300 +G1 X24.161 Y48.924 F300 +G1 X23.96 Y49.067 F300 +G1 X23.764 Y49.217 F300 +G1 X23.575 Y49.375 F300 +G1 X23.391 Y49.541 F300 +G1 X23.215 Y49.713 F300 +G1 X23.046 Y49.893 F300 +G1 X22.884 Y50.08 F300 +G1 X22.729 Y50.273 F300 +G1 X22.582 Y50.472 F300 +G1 X22.444 Y50.677 F300 +G1 X22.313 Y50.887 F300 +G1 X22.192 Y51.103 F300 +G1 X22.079 Y51.324 F300 G1 X21.96 Y51.586 F300 G0 X20.249 Y43.053 G1 X20.407 Y43.317 F300 @@ -1943,99 +1982,103 @@ G1 X26.906 Y37.968 F300 G1 X26.705 Y37.488 F300 G1 X26.493 Y37.012 F300 G1 X26.41 Y36.834 F300 -G1 X26.287 Y36.578 F300 -G1 X26.154 Y36.31 F300 -G1 X26.01 Y36.034 F300 -G1 X25.898 Y35.83 F300 -G1 X25.781 Y35.626 F300 -G1 X25.658 Y35.423 F300 -G1 X25.529 Y35.222 F300 -G1 X25.394 Y35.025 F300 -G1 X25.254 Y34.834 F300 -G1 X25.107 Y34.648 F300 -G1 X24.955 Y34.471 F300 -G1 X24.827 Y34.333 F300 -G1 X24.696 Y34.201 F300 -G1 X24.561 Y34.077 F300 -G1 X24.422 Y33.96 F300 -G1 X24.278 Y33.85 F300 -G1 X24.154 Y33.764 F300 -G1 X24.027 Y33.684 F300 -G1 X23.897 Y33.611 F300 -G1 X23.764 Y33.544 F300 -G1 X23.627 Y33.484 F300 -G1 X23.487 Y33.431 F300 -G1 X23.345 Y33.386 F300 -G1 X23.199 Y33.349 F300 -G1 X23.049 Y33.32 F300 -G1 X22.894 Y33.299 F300 -G1 X22.734 Y33.287 F300 +G1 X26.344 Y36.695 F300 +G1 X26.275 Y36.552 F300 +G1 X26.204 Y36.408 F300 +G1 X26.13 Y36.262 F300 +G1 X26.053 Y36.115 F300 +G1 X25.974 Y35.967 F300 +G1 X25.893 Y35.82 F300 +G1 X25.808 Y35.672 F300 +G1 X25.721 Y35.526 F300 +G1 X25.631 Y35.38 F300 +G1 X25.538 Y35.236 F300 +G1 X25.442 Y35.094 F300 +G1 X25.343 Y34.954 F300 +G1 X25.241 Y34.817 F300 +G1 X25.136 Y34.683 F300 +G1 X25.027 Y34.553 F300 +G1 X24.915 Y34.426 F300 +G1 X24.8 Y34.304 F300 +G1 X24.681 Y34.187 F300 +G1 X24.559 Y34.075 F300 +G1 X24.433 Y33.969 F300 +G1 X24.304 Y33.869 F300 +G1 X24.171 Y33.775 F300 +G1 X24.034 Y33.688 F300 +G1 X23.893 Y33.609 F300 +G1 X23.748 Y33.537 F300 +G1 X23.6 Y33.473 F300 +G1 X23.447 Y33.418 F300 +G1 X23.29 Y33.372 F300 +G1 X23.129 Y33.335 F300 +G1 X22.964 Y33.308 F300 +G1 X22.795 Y33.291 F300 G1 X22.569 Y33.285 F300 -G1 X22.399 Y33.292 F300 -G1 X22.235 Y33.308 F300 -G1 X22.075 Y33.332 F300 -G1 X21.92 Y33.364 F300 -G1 X21.769 Y33.403 F300 -G1 X21.622 Y33.449 F300 -G1 X21.476 Y33.502 F300 -G1 X21.334 Y33.563 F300 -G1 X21.196 Y33.63 F300 -G1 X21.062 Y33.703 F300 -G1 X20.931 Y33.783 F300 -G1 X20.804 Y33.868 F300 -G1 X20.657 Y33.977 F300 -G1 X20.516 Y34.094 F300 -G1 X20.38 Y34.219 F300 -G1 X20.249 Y34.35 F300 -G1 X20.124 Y34.489 F300 -G1 X20.006 Y34.632 F300 -G1 X19.893 Y34.781 F300 -G1 X19.786 Y34.935 F300 -G1 X19.684 Y35.094 F300 -G1 X19.589 Y35.258 F300 -G1 X19.499 Y35.425 F300 -G1 X19.416 Y35.596 F300 -G1 X19.34 Y35.769 F300 -G1 X19.269 Y35.945 F300 -G1 X19.205 Y36.123 F300 -G1 X19.147 Y36.303 F300 -G1 X19.096 Y36.484 F300 -G1 X19.051 Y36.666 F300 -G1 X19.013 Y36.847 F300 +G1 X22.379 Y33.294 F300 +G1 X22.194 Y33.313 F300 +G1 X22.013 Y33.344 F300 +G1 X21.837 Y33.384 F300 +G1 X21.666 Y33.434 F300 +G1 X21.499 Y33.493 F300 +G1 X21.337 Y33.562 F300 +G1 X21.179 Y33.638 F300 +G1 X21.027 Y33.724 F300 +G1 X20.879 Y33.817 F300 +G1 X20.737 Y33.917 F300 +G1 X20.599 Y34.024 F300 +G1 X20.466 Y34.139 F300 +G1 X20.338 Y34.259 F300 +G1 X20.216 Y34.386 F300 +G1 X20.099 Y34.518 F300 +G1 X19.987 Y34.656 F300 +G1 X19.88 Y34.799 F300 +G1 X19.779 Y34.946 F300 +G1 X19.683 Y35.097 F300 +G1 X19.592 Y35.252 F300 +G1 X19.507 Y35.411 F300 +G1 X19.427 Y35.572 F300 +G1 X19.353 Y35.737 F300 +G1 X19.285 Y35.903 F300 +G1 X19.223 Y36.072 F300 +G1 X19.166 Y36.242 F300 +G1 X19.115 Y36.414 F300 +G1 X19.07 Y36.586 F300 +G1 X19.03 Y36.759 F300 G1 X18.981 Y37.028 F300 -G1 X18.946 Y37.284 F300 -G1 X18.921 Y37.542 F300 -G1 X18.903 Y37.8 F300 -G1 X18.895 Y38.061 F300 -G1 X18.894 Y38.322 F300 -G1 X18.903 Y38.585 F300 -G1 X18.919 Y38.846 F300 -G1 X18.943 Y39.108 F300 -G1 X18.974 Y39.369 F300 -G1 X19.013 Y39.63 F300 -G1 X19.06 Y39.89 F300 +G1 X18.944 Y37.308 F300 +G1 X18.917 Y37.59 F300 +G1 X18.9 Y37.873 F300 +G1 X18.894 Y38.157 F300 +G1 X18.897 Y38.442 F300 +G1 X18.91 Y38.728 F300 +G1 X18.933 Y39.013 F300 +G1 X18.965 Y39.299 F300 +G1 X19.006 Y39.583 F300 +G1 X19.056 Y39.867 F300 G1 X19.114 Y40.149 F300 -G1 X19.175 Y40.407 F300 -G1 X19.242 Y40.662 F300 -G1 X19.317 Y40.915 F300 -G1 X19.397 Y41.166 F300 -G1 X19.484 Y41.414 F300 -G1 X19.578 Y41.659 F300 -G1 X19.678 Y41.902 F300 -G1 X19.783 Y42.142 F300 -G1 X19.894 Y42.377 F300 -G1 X20.01 Y42.607 F300 -G1 X20.131 Y42.833 F300 +G1 X19.18 Y40.429 F300 +G1 X19.255 Y40.707 F300 +G1 X19.338 Y40.983 F300 +G1 X19.428 Y41.256 F300 +G1 X19.526 Y41.525 F300 +G1 X19.631 Y41.791 F300 +G1 X19.743 Y42.053 F300 +G1 X19.862 Y42.311 F300 +G1 X19.987 Y42.563 F300 +G1 X20.119 Y42.811 F300 G1 X20.256 Y43.053 F300 G1 X20.249 Y43.053 F300;svg#Drawing > g#Layer_3 > path G0 X26.059 Y16.88 -G1 X26.085 Y17.676 F300 -G1 X26.106 Y18.48 F300 +G1 X26.075 Y17.358 F300 +G1 X26.089 Y17.838 F300 +G1 X26.101 Y18.319 F300 +G1 X26.114 Y18.802 F300 G1 X26.128 Y19.285 F300 -G1 X26.159 Y20.091 F300 -G1 X26.18 Y20.494 F300 -G1 X26.205 Y20.896 F300 -G1 X26.236 Y21.297 F300 +G1 X26.145 Y19.769 F300 +G1 X26.167 Y20.252 F300 +G1 X26.195 Y20.735 F300 +G1 X26.23 Y21.216 F300 G1 X26.273 Y21.696 F300 G1 X26.321 Y22.096 F300 G1 X26.381 Y22.495 F300 @@ -2063,22 +2106,22 @@ G1 X27.321 Y27.055 F300 G1 X27.245 Y27.131 F300 G1 X27.162 Y27.198 F300 G1 X27.112 Y27.231 F300 -G1 X27.034 Y27.271 F300 -G1 X26.952 Y27.303 F300 -G1 X26.864 Y27.327 F300 -G1 X26.773 Y27.343 F300 -G1 X26.682 Y27.351 F300 -G1 X26.589 Y27.35 F300 -G1 X26.497 Y27.342 F300 -G1 X26.405 Y27.325 F300 -G1 X26.315 Y27.3 F300 -G1 X26.229 Y27.267 F300 -G1 X26.147 Y27.226 F300 -G1 X26.071 Y27.177 F300 -G1 X26.014 Y27.132 F300 -G1 X25.962 Y27.082 F300 -G1 X25.915 Y27.026 F300 -G1 X25.873 Y26.965 F300 +G1 X27.038 Y27.269 F300 +G1 X26.96 Y27.3 F300 +G1 X26.879 Y27.323 F300 +G1 X26.795 Y27.34 F300 +G1 X26.709 Y27.349 F300 +G1 X26.622 Y27.351 F300 +G1 X26.534 Y27.346 F300 +G1 X26.448 Y27.334 F300 +G1 X26.362 Y27.315 F300 +G1 X26.28 Y27.288 F300 +G1 X26.2 Y27.254 F300 +G1 X26.124 Y27.213 F300 +G1 X26.054 Y27.164 F300 +G1 X25.989 Y27.108 F300 +G1 X25.93 Y27.045 F300 +G1 X25.879 Y26.975 F300 G1 X25.837 Y26.898 F300 G1 X25.656 Y26.493 F300 G1 X25.486 Y26.082 F300 @@ -2092,6 +2135,7 @@ G1 X24.615 Y23.103 F300 G1 X24.538 Y22.666 F300 G1 X24.472 Y22.227 F300 G1 X24.44 Y21.979 F300 +G1 X24.421 Y21.799 F300 G1 X24.403 Y21.616 F300 G1 X24.156 Y21.533 F300 G1 X23.905 Y21.46 F300 @@ -2117,22 +2161,22 @@ G1 X21.27 Y24.804 F300 G1 X21.401 Y25.225 F300 G1 X21.543 Y25.643 F300 G1 X21.675 Y25.999 F300 -G1 X21.698 Y26.07 F300 -G1 X21.713 Y26.142 F300 -G1 X21.72 Y26.214 F300 -G1 X21.719 Y26.286 F300 -G1 X21.712 Y26.358 F300 -G1 X21.695 Y26.447 F300 -G1 X21.667 Y26.534 F300 -G1 X21.631 Y26.619 F300 -G1 X21.586 Y26.701 F300 -G1 X21.534 Y26.778 F300 -G1 X21.476 Y26.851 F300 -G1 X21.411 Y26.918 F300 -G1 X21.342 Y26.978 F300 -G1 X21.266 Y27.033 F300 -G1 X21.188 Y27.078 F300 -G1 X21.107 Y27.116 F300 +G1 X21.701 Y26.082 F300 +G1 X21.716 Y26.167 F300 +G1 X21.72 Y26.252 F300 +G1 X21.715 Y26.337 F300 +G1 X21.701 Y26.421 F300 +G1 X21.678 Y26.504 F300 +G1 X21.647 Y26.585 F300 +G1 X21.608 Y26.663 F300 +G1 X21.563 Y26.738 F300 +G1 X21.511 Y26.809 F300 +G1 X21.454 Y26.875 F300 +G1 X21.391 Y26.936 F300 +G1 X21.325 Y26.992 F300 +G1 X21.254 Y27.041 F300 +G1 X21.18 Y27.083 F300 +G1 X21.103 Y27.117 F300 G1 X21.024 Y27.144 F300 G1 X20.919 Y27.164 F300 G1 X20.812 Y27.173 F300 @@ -2192,73 +2236,74 @@ G1 X20.576 Y19.15 F300 G1 X20.604 Y19.253 F300 G1 X20.62 Y19.358 F300 G1 X20.624 Y19.436 F300 +G1 X20.624 Y19.546 F300 G1 X20.624 Y19.653 F300 G1 X21.078 Y19.699 F300 G1 X21.531 Y19.752 F300 G1 X21.982 Y19.815 F300 G1 X22.433 Y19.886 F300 G1 X22.881 Y19.965 F300 -G1 X23.234 Y20.033 F300 -G1 X23.595 Y20.106 F300 -G1 X23.836 Y20.158 F300 -G1 X24.076 Y20.215 F300 +G1 X23.164 Y20.02 F300 +G1 X23.451 Y20.076 F300 +G1 X23.74 Y20.137 F300 +G1 X24.028 Y20.203 F300 G1 X24.315 Y20.278 F300 -G1 X24.29 Y19.714 F300 +G1 X24.29 Y19.713 F300 G1 X24.271 Y19.148 F300 G1 X24.255 Y18.582 F300 -G1 X24.234 Y17.734 F300 +G1 X24.242 Y18.017 F300 +G1 X24.227 Y17.453 F300 G1 X24.209 Y16.891 F300 -G1 X24.209 Y16.785 F300 -G1 X24.218 Y16.688 F300 -G1 X24.236 Y16.6 F300 -G1 X24.26 Y16.519 F300 -G1 X24.291 Y16.445 F300 -G1 X24.331 Y16.372 F300 -G1 X24.376 Y16.307 F300 -G1 X24.427 Y16.248 F300 -G1 X24.483 Y16.195 F300 -G1 X24.543 Y16.148 F300 -G1 X24.608 Y16.106 F300 -G1 X24.677 Y16.07 F300 -G1 X24.748 Y16.041 F300 -G1 X24.822 Y16.017 F300 -G1 X24.9 Y15.999 F300 -G1 X24.997 Y15.985 F300 -G1 X25.096 Y15.98 F300 -G1 X25.195 Y15.984 F300 -G1 X25.295 Y15.998 F300 -G1 X25.373 Y16.016 F300 -G1 X25.449 Y16.039 F300 -G1 X25.523 Y16.068 F300 -G1 X25.595 Y16.103 F300 -G1 X25.663 Y16.145 F300 -G1 X25.728 Y16.192 F300 -G1 X25.788 Y16.244 F300 -G1 X25.844 Y16.303 F300 -G1 X25.895 Y16.367 F300 -G1 X25.94 Y16.439 F300 -G1 X25.977 Y16.513 F300 -G1 X26.009 Y16.593 F300 -G1 X26.033 Y16.681 F300 -G1 X26.05 Y16.776 F300 +G1 X24.209 Y16.786 F300 +G1 X24.219 Y16.688 F300 +G1 X24.237 Y16.596 F300 +G1 X24.264 Y16.51 F300 +G1 X24.298 Y16.431 F300 +G1 X24.34 Y16.358 F300 +G1 X24.388 Y16.292 F300 +G1 X24.443 Y16.232 F300 +G1 X24.502 Y16.179 F300 +G1 X24.567 Y16.131 F300 +G1 X24.636 Y16.091 F300 +G1 X24.709 Y16.056 F300 +G1 X24.785 Y16.028 F300 +G1 X24.863 Y16.007 F300 +G1 X24.943 Y15.991 F300 +G1 X25.025 Y15.982 F300 +G1 X25.107 Y15.98 F300 +G1 X25.19 Y15.984 F300 +G1 X25.272 Y15.994 F300 +G1 X25.353 Y16.011 F300 +G1 X25.433 Y16.033 F300 +G1 X25.511 Y16.063 F300 +G1 X25.585 Y16.098 F300 +G1 X25.657 Y16.14 F300 +G1 X25.724 Y16.189 F300 +G1 X25.787 Y16.243 F300 +G1 X25.845 Y16.304 F300 +G1 X25.898 Y16.372 F300 +G1 X25.944 Y16.445 F300 +G1 X25.983 Y16.525 F300 +G1 X26.015 Y16.612 F300 +G1 X26.038 Y16.705 F300 G1 X26.059 Y16.88 F300;svg#Drawing > g#Layer_3 > path G0 X27.085 Y17.791 -G1 X27.163 Y17.751 F300 -G1 X27.245 Y17.719 F300 -G1 X27.332 Y17.695 F300 -G1 X27.423 Y17.679 F300 -G1 X27.514 Y17.671 F300 -G1 X27.607 Y17.671 F300 -G1 X27.7 Y17.68 F300 -G1 X27.792 Y17.696 F300 -G1 X27.881 Y17.721 F300 -G1 X27.968 Y17.754 F300 -G1 X28.049 Y17.795 F300 -G1 X28.126 Y17.845 F300 -G1 X28.183 Y17.89 F300 -G1 X28.235 Y17.94 F300 -G1 X28.282 Y17.996 F300 -G1 X28.324 Y18.057 F300 +G1 X27.158 Y17.753 F300 +G1 X27.236 Y17.722 F300 +G1 X27.317 Y17.698 F300 +G1 X27.401 Y17.682 F300 +G1 X27.487 Y17.672 F300 +G1 X27.574 Y17.67 F300 +G1 X27.662 Y17.675 F300 +G1 X27.749 Y17.687 F300 +G1 X27.834 Y17.707 F300 +G1 X27.917 Y17.734 F300 +G1 X27.997 Y17.768 F300 +G1 X28.072 Y17.809 F300 +G1 X28.143 Y17.857 F300 +G1 X28.208 Y17.913 F300 +G1 X28.267 Y17.976 F300 +G1 X28.318 Y18.046 F300 G1 X28.361 Y18.124 F300 G1 X28.555 Y18.574 F300 G1 X28.742 Y19.028 F300 @@ -2277,83 +2322,86 @@ G1 X31.771 Y18.74 F300 G1 X31.787 Y18.079 F300 G1 X31.795 Y17.418 F300 G1 X31.8 Y17.313 F300 -G1 X31.814 Y17.218 F300 -G1 X31.835 Y17.131 F300 -G1 X31.864 Y17.051 F300 -G1 X31.899 Y16.977 F300 -G1 X31.942 Y16.906 F300 -G1 X31.99 Y16.841 F300 -G1 X32.044 Y16.782 F300 -G1 X32.102 Y16.73 F300 -G1 X32.165 Y16.683 F300 -G1 X32.233 Y16.642 F300 -G1 X32.303 Y16.607 F300 -G1 X32.376 Y16.577 F300 -G1 X32.452 Y16.554 F300 -G1 X32.53 Y16.536 F300 -G1 X32.629 Y16.522 F300 -G1 X32.728 Y16.518 F300 -G1 X32.827 Y16.522 F300 -G1 X32.926 Y16.536 F300 -G1 X33.004 Y16.554 F300 -G1 X33.079 Y16.577 F300 +G1 X31.814 Y17.215 F300 +G1 X31.837 Y17.124 F300 +G1 X31.869 Y17.039 F300 +G1 X31.908 Y16.96 F300 +G1 X31.954 Y16.888 F300 +G1 X32.006 Y16.822 F300 +G1 X32.064 Y16.763 F300 +G1 X32.128 Y16.71 F300 +G1 X32.196 Y16.664 F300 +G1 X32.268 Y16.624 F300 +G1 X32.343 Y16.59 F300 +G1 X32.421 Y16.563 F300 +G1 X32.502 Y16.542 F300 +G1 X32.584 Y16.527 F300 +G1 X32.667 Y16.519 F300 +G1 X32.75 Y16.518 F300 +G1 X32.833 Y16.523 F300 +G1 X32.916 Y16.534 F300 +G1 X32.997 Y16.552 F300 +G1 X33.076 Y16.576 F300 G1 X33.152 Y16.606 F300 -G1 X33.221 Y16.641 F300 -G1 X33.288 Y16.683 F300 -G1 X33.35 Y16.729 F300 -G1 X33.408 Y16.782 F300 -G1 X33.461 Y16.84 F300 -G1 X33.508 Y16.905 F300 -G1 X33.55 Y16.976 F300 -G1 X33.584 Y17.05 F300 -G1 X33.611 Y17.13 F300 -G1 X33.631 Y17.217 F300 -G1 X33.644 Y17.313 F300 +G1 X33.225 Y16.643 F300 +G1 X33.294 Y16.687 F300 +G1 X33.359 Y16.737 F300 +G1 X33.419 Y16.793 F300 +G1 X33.473 Y16.856 F300 +G1 X33.521 Y16.925 F300 +G1 X33.562 Y17.001 F300 +G1 X33.596 Y17.083 F300 +G1 X33.622 Y17.171 F300 +G1 X33.639 Y17.266 F300 G1 X33.647 Y17.418 F300 -G1 X33.643 Y18.07 F300 -G1 X33.63 Y18.722 F300 -G1 X33.608 Y19.374 F300 -G1 X33.577 Y20.026 F300 -G1 X33.538 Y20.677 F300 -G1 X33.489 Y21.328 F300 -G1 X33.432 Y21.979 F300 +G1 X33.641 Y18.163 F300 +G1 X33.624 Y18.909 F300 +G1 X33.596 Y19.654 F300 +G1 X33.555 Y20.399 F300 +G1 X33.504 Y21.143 F300 +G1 X33.441 Y21.886 F300 G1 X33.367 Y22.63 F300 -G1 X33.315 Y23.124 F300 -G1 X33.256 Y23.626 F300 -G1 X33.211 Y23.96 F300 -G1 X33.158 Y24.294 F300 -G1 X33.095 Y24.624 F300 -G1 X33.04 Y24.87 F300 -G1 X32.978 Y25.113 F300 -G1 X32.908 Y25.352 F300 -G1 X32.828 Y25.586 F300 -G1 X32.758 Y25.772 F300 -G1 X32.68 Y25.953 F300 -G1 X32.595 Y26.131 F300 -G1 X32.503 Y26.305 F300 -G1 X32.402 Y26.476 F300 -G1 X32.312 Y26.613 F300 -G1 X32.216 Y26.747 F300 -G1 X32.114 Y26.879 F300 -G1 X32.004 Y27.007 F300 -G1 X31.886 Y27.133 F300 +G1 X33.346 Y22.825 F300 +G1 X33.326 Y23.021 F300 +G1 X33.304 Y23.218 F300 +G1 X33.282 Y23.416 F300 +G1 X33.258 Y23.614 F300 +G1 X33.232 Y23.812 F300 +G1 X33.203 Y24.01 F300 +G1 X33.172 Y24.208 F300 +G1 X33.138 Y24.405 F300 +G1 X33.1 Y24.601 F300 +G1 X33.058 Y24.795 F300 +G1 X33.011 Y24.988 F300 +G1 X32.96 Y25.179 F300 +G1 X32.903 Y25.367 F300 +G1 X32.84 Y25.553 F300 +G1 X32.772 Y25.737 F300 +G1 X32.696 Y25.917 F300 +G1 X32.614 Y26.094 F300 +G1 X32.524 Y26.267 F300 +G1 X32.426 Y26.436 F300 +G1 X32.32 Y26.601 F300 +G1 X32.206 Y26.761 F300 +G1 X32.082 Y26.917 F300 +G1 X31.949 Y27.067 F300 G1 X31.761 Y27.255 F300 -G1 X31.694 Y27.311 F300 -G1 X31.62 Y27.362 F300 -G1 X31.541 Y27.406 F300 -G1 X31.457 Y27.445 F300 -G1 X31.37 Y27.476 F300 -G1 X31.28 Y27.5 F300 -G1 X31.189 Y27.516 F300 -G1 X31.096 Y27.524 F300 -G1 X31.003 Y27.523 F300 -G1 X30.912 Y27.514 F300 -G1 X30.823 Y27.496 F300 -G1 X30.737 Y27.468 F300 -G1 X30.671 Y27.439 F300 -G1 X30.608 Y27.404 F300 -G1 X30.548 Y27.361 F300 -G1 X30.491 Y27.312 F300 +G1 X31.697 Y27.308 F300 +G1 X31.628 Y27.357 F300 +G1 X31.555 Y27.399 F300 +G1 X31.477 Y27.437 F300 +G1 X31.396 Y27.468 F300 +G1 X31.312 Y27.492 F300 +G1 X31.226 Y27.51 F300 +G1 X31.14 Y27.521 F300 +G1 X31.053 Y27.524 F300 +G1 X30.966 Y27.52 F300 +G1 X30.881 Y27.509 F300 +G1 X30.798 Y27.489 F300 +G1 X30.717 Y27.46 F300 +G1 X30.64 Y27.423 F300 +G1 X30.567 Y27.376 F300 +G1 X30.5 Y27.32 F300 G1 X30.438 Y27.255 F300 G1 X30.193 Y26.936 F300 G1 X29.959 Y26.611 F300 @@ -2367,8 +2415,11 @@ G1 X28.606 Y24.159 F300 G1 X28.455 Y23.787 F300 G1 X28.316 Y23.412 F300 G1 X28.295 Y23.351 F300 -G1 X28.101 Y22.815 F300 +G1 X28.165 Y22.994 F300 +G1 X28.039 Y22.636 F300 G1 X27.916 Y22.277 F300 +G1 X27.794 Y21.918 F300 +G1 X27.673 Y21.558 F300 G1 X27.551 Y21.198 F300 G1 X27.427 Y20.839 F300 G1 X27.3 Y20.481 F300 @@ -2391,15 +2442,19 @@ G1 X26.938 Y17.898 F300 G1 X27.022 Y17.831 F300 G1 X27.085 Y17.791 F300 G0 X31.099 Y24.958 -G1 X31.161 Y24.794 F300 -G1 X31.215 Y24.626 F300 -G1 X31.264 Y24.454 F300 -G1 X31.307 Y24.279 F300 -G1 X31.355 Y24.043 F300 -G1 X31.396 Y23.804 F300 +G1 X31.169 Y24.77 F300 +G1 X31.23 Y24.576 F300 +G1 X31.283 Y24.379 F300 +G1 X31.329 Y24.178 F300 +G1 X31.368 Y23.975 F300 +G1 X31.401 Y23.77 F300 G1 X31.43 Y23.564 F300 -G1 X31.47 Y23.203 F300 -G1 X31.502 Y22.848 F300 +G1 X31.454 Y23.358 F300 +G1 X31.475 Y23.153 F300 +G1 X31.493 Y22.949 F300 +G1 X31.51 Y22.748 F300 +G1 X31.527 Y22.549 F300 +G1 X31.543 Y22.354 F300 G1 X31.56 Y22.164 F300 G1 X31.598 Y21.743 F300 G1 X31.631 Y21.323 F300 @@ -2409,8 +2464,9 @@ G1 X31.028 Y21.193 F300 G1 X30.911 Y21.18 F300 G1 X30.685 Y21.161 F300 G1 X30.459 Y21.151 F300 +G1 X29.989 Y21.151 F300 G1 X29.517 Y21.151 F300 -G1 X29.742 Y21.805 F300 +G1 X29.742 Y21.806 F300 G1 X29.972 Y22.46 F300 G1 X30.113 Y22.854 F300 G1 X30.265 Y23.243 F300 @@ -2420,19 +2476,20 @@ G1 X30.786 Y24.379 F300 G1 X30.981 Y24.748 F300 G1 X31.099 Y24.957 F300;svg#Drawing > g#Layer_3 > path G0 X40.336 Y25.363 -G1 X40.204 Y25.438 F300 -G1 X40.07 Y25.504 F300 -G1 X39.935 Y25.563 F300 -G1 X39.797 Y25.613 F300 -G1 X39.656 Y25.657 F300 -G1 X39.514 Y25.695 F300 -G1 X39.371 Y25.727 F300 -G1 X39.225 Y25.753 F300 -G1 X39.03 Y25.779 F300 +G1 X40.196 Y25.442 F300 +G1 X40.053 Y25.512 F300 +G1 X39.908 Y25.573 F300 +G1 X39.76 Y25.626 F300 +G1 X39.609 Y25.671 F300 +G1 X39.457 Y25.708 F300 +G1 X39.303 Y25.739 F300 +G1 X39.147 Y25.764 F300 +G1 X38.99 Y25.784 F300 G1 X38.833 Y25.798 F300 -G1 X38.635 Y25.809 F300 -G1 X38.436 Y25.815 F300 -G1 X38.237 Y25.816 F300 +G1 X38.674 Y25.808 F300 +G1 X38.515 Y25.813 F300 +G1 X38.357 Y25.816 F300 +G1 X38.198 Y25.815 F300 G1 X38.039 Y25.813 F300 G1 X37.946 Y25.863 F300 G1 X37.849 Y25.902 F300 @@ -2451,14 +2508,13 @@ G1 X36.757 Y25.49 F300 G1 X36.709 Y25.396 F300 G1 X36.673 Y25.297 F300 G1 X36.669 Y25.284 F300 -G1 X36.42 Y24.422 F300 -G1 X36.18 Y23.559 F300 -G1 X35.947 Y22.694 F300 -G1 X35.722 Y21.827 F300 -G1 X35.505 Y20.958 F300 -G1 X35.295 Y20.087 F300 -G1 X35.093 Y19.214 F300 -G1 X34.9 Y18.34 F300 +G1 X36.39 Y24.315 F300 +G1 X36.121 Y23.343 F300 +G1 X35.862 Y22.369 F300 +G1 X35.612 Y21.393 F300 +G1 X35.373 Y20.414 F300 +G1 X35.143 Y19.433 F300 +G1 X34.923 Y18.449 F300 G1 X34.713 Y17.462 F300 G1 X34.693 Y17.357 F300 G1 X34.685 Y17.251 F300 @@ -2489,28 +2545,30 @@ G1 X36.444 Y16.795 F300 G1 X36.487 Y16.892 F300 G1 X36.512 Y16.968 F300 G1 X36.692 Y17.816 F300 -G1 X36.88 Y18.662 F300 +G1 X36.88 Y18.663 F300 G1 X37.077 Y19.508 F300 G1 X37.28 Y20.352 F300 -G1 X37.518 Y20.355 F300 -G1 X37.757 Y20.364 F300 -G1 X37.997 Y20.381 F300 -G1 X38.237 Y20.406 F300 -G1 X38.428 Y20.433 F300 -G1 X38.617 Y20.465 F300 -G1 X38.804 Y20.504 F300 -G1 X38.989 Y20.549 F300 +G1 X37.453 Y20.353 F300 +G1 X37.627 Y20.358 F300 +G1 X37.801 Y20.367 F300 +G1 X37.976 Y20.379 F300 +G1 X38.15 Y20.396 F300 +G1 X38.323 Y20.417 F300 +G1 X38.496 Y20.444 F300 +G1 X38.667 Y20.475 F300 +G1 X38.837 Y20.511 F300 +G1 X39.005 Y20.553 F300 G1 X39.171 Y20.601 F300 -G1 X39.35 Y20.662 F300 -G1 X39.526 Y20.73 F300 -G1 X39.698 Y20.806 F300 -G1 X39.865 Y20.891 F300 -G1 X40.028 Y20.985 F300 -G1 X40.158 Y21.069 F300 -G1 X40.285 Y21.161 F300 -G1 X40.408 Y21.26 F300 -G1 X40.527 Y21.366 F300 -G1 X40.643 Y21.48 F300 +G1 X39.334 Y20.656 F300 +G1 X39.494 Y20.717 F300 +G1 X39.651 Y20.784 F300 +G1 X39.805 Y20.859 F300 +G1 X39.954 Y20.941 F300 +G1 X40.1 Y21.03 F300 +G1 X40.241 Y21.128 F300 +G1 X40.377 Y21.234 F300 +G1 X40.508 Y21.348 F300 +G1 X40.634 Y21.471 F300 G1 X40.754 Y21.603 F300 G1 X40.869 Y21.74 F300 G1 X40.975 Y21.885 F300 @@ -2539,9 +2597,13 @@ G1 X40.511 Y25.246 F300 G1 X40.374 Y25.339 F300 G1 X40.336 Y25.363 F300 G0 X40.198 Y23.246 +G1 X40.198 Y23.222 F300 G1 X40.198 Y23.204 F300 -G1 X40.196 Y23.16 F300 -G1 X40.189 Y23.127 F300 +G1 X40.198 Y23.195 F300 +G1 X40.197 Y23.179 F300 +G1 X40.195 Y23.16 F300 +G1 X40.192 Y23.138 F300 +G1 X40.186 Y23.117 F300 G1 X40.177 Y23.098 F300 G1 X40.137 Y22.951 F300 G1 X40.116 Y22.886 F300 @@ -2558,9 +2620,14 @@ G1 X39.555 Y22.164 F300 G1 X39.399 Y22.058 F300 G1 X39.29 Y21.993 F300 G1 X39.179 Y21.934 F300 -G1 X39.166 Y21.93 F300 +G1 X39.17 Y21.932 F300 +G1 X39.154 Y21.925 F300 G1 X39.132 Y21.915 F300 +G1 X39.109 Y21.904 F300 +G1 X39.084 Y21.891 F300 G1 X39.061 Y21.879 F300 +G1 X39.041 Y21.869 F300 +G1 X39.027 Y21.861 F300 G1 X39.021 Y21.857 F300 G1 X38.815 Y21.785 F300 G1 X38.606 Y21.723 F300 @@ -2583,29 +2650,36 @@ G1 X39.569 Y24.38 F300 G1 X39.694 Y24.312 F300 G1 X39.814 Y24.235 F300 G1 X39.851 Y24.207 F300 +G1 X39.855 Y24.203 F300 +G1 X39.866 Y24.192 F300 G1 X39.882 Y24.177 F300 +G1 X39.9 Y24.158 F300 +G1 X39.921 Y24.138 F300 G1 X39.941 Y24.118 F300 +G1 X39.958 Y24.1 F300 +G1 X39.973 Y24.086 F300 G1 X39.981 Y24.077 F300 G1 X40.018 Y24.035 F300 G1 X40.074 Y23.947 F300 G1 X40.127 Y23.85 F300 G1 X40.168 Y23.736 F300 G1 X40.193 Y23.638 F300 -G1 X40.195 Y23.616 F300 -G1 X40.2 Y23.594 F300 +G1 X40.196 Y23.609 F300 +G1 X40.204 Y23.58 F300 G1 X40.211 Y23.551 F300 G1 X40.211 Y23.495 F300 -G1 X40.204 Y23.431 F300 -G1 X40.201 Y23.367 F300 +G1 X40.203 Y23.41 F300 +G1 X40.2 Y23.323 F300 G1 X40.198 Y23.23 F300 G1 X40.198 Y23.246 F300;svg#Drawing > g#Layer_3 > path G0 X43.254 Y17.312 -G1 X43.33 Y17.989 F300 -G1 X43.409 Y18.669 F300 -G1 X43.494 Y19.349 F300 -G1 X43.588 Y20.03 F300 -G1 X43.657 Y20.483 F300 -G1 X43.732 Y20.934 F300 +G1 X43.311 Y17.82 F300 +G1 X43.369 Y18.329 F300 +G1 X43.429 Y18.839 F300 +G1 X43.494 Y19.35 F300 +G1 X43.563 Y19.86 F300 +G1 X43.639 Y20.369 F300 +G1 X43.723 Y20.877 F300 G1 X43.815 Y21.384 F300 G1 X44.051 Y21.386 F300 G1 X44.287 Y21.4 F300 @@ -2658,58 +2732,62 @@ G1 X45.008 Y26.459 F300 G1 X44.753 Y26.496 F300 G1 X44.664 Y26.506 F300 G1 X44.664 Y26.506 F300 -G1 X44.587 Y26.546 F300 -G1 X44.504 Y26.578 F300 -G1 X44.417 Y26.602 F300 -G1 X44.326 Y26.618 F300 -G1 X44.234 Y26.626 F300 -G1 X44.142 Y26.625 F300 -G1 X44.049 Y26.617 F300 -G1 X43.957 Y26.6 F300 -G1 X43.867 Y26.575 F300 -G1 X43.781 Y26.542 F300 -G1 X43.7 Y26.501 F300 -G1 X43.623 Y26.452 F300 -G1 X43.567 Y26.407 F300 -G1 X43.514 Y26.357 F300 -G1 X43.467 Y26.301 F300 -G1 X43.425 Y26.24 F300 +G1 X44.591 Y26.544 F300 +G1 X44.513 Y26.575 F300 +G1 X44.431 Y26.598 F300 +G1 X44.347 Y26.615 F300 +G1 X44.261 Y26.624 F300 +G1 X44.174 Y26.626 F300 +G1 X44.087 Y26.621 F300 +G1 X44 Y26.609 F300 +G1 X43.915 Y26.59 F300 +G1 X43.832 Y26.563 F300 +G1 X43.752 Y26.529 F300 +G1 X43.677 Y26.488 F300 +G1 X43.606 Y26.439 F300 +G1 X43.541 Y26.383 F300 +G1 X43.483 Y26.32 F300 +G1 X43.432 Y26.25 F300 G1 X43.389 Y26.173 F300 -G1 X43.24 Y25.834 F300 -G1 X43.099 Y25.495 F300 -G1 X42.966 Y25.153 F300 -G1 X42.841 Y24.811 F300 -G1 X42.724 Y24.467 F300 -G1 X42.614 Y24.12 F300 -G1 X42.51 Y23.772 F300 -G1 X42.412 Y23.422 F300 -G1 X42.321 Y23.071 F300 -G1 X42.235 Y22.718 F300 -G1 X42.136 Y22.276 F300 +G1 X43.22 Y25.789 F300 +G1 X43.062 Y25.403 F300 +G1 X42.915 Y25.015 F300 +G1 X42.777 Y24.624 F300 +G1 X42.648 Y24.231 F300 +G1 X42.528 Y23.836 F300 +G1 X42.417 Y23.438 F300 +G1 X42.313 Y23.039 F300 +G1 X42.217 Y22.638 F300 +G1 X42.127 Y22.235 F300 G1 X42.044 Y21.831 F300 -G1 X41.959 Y21.385 F300 -G1 X41.88 Y20.936 F300 -G1 X41.785 Y20.336 F300 -G1 X41.697 Y19.734 F300 -G1 X41.617 Y19.129 F300 -G1 X41.507 Y18.219 F300 +G1 X41.966 Y21.425 F300 +G1 X41.894 Y21.018 F300 +G1 X41.827 Y20.609 F300 +G1 X41.764 Y20.199 F300 +G1 X41.705 Y19.788 F300 +G1 X41.649 Y19.376 F300 +G1 X41.597 Y18.964 F300 +G1 X41.546 Y18.55 F300 +G1 X41.498 Y18.136 F300 +G1 X41.451 Y17.721 F300 G1 X41.405 Y17.306 F300 -G1 X41.401 Y17.231 F300 -G1 X41.405 Y17.158 F300 -G1 X41.417 Y17.087 F300 -G1 X41.436 Y17.017 F300 -G1 X41.462 Y16.95 F300 -G1 X41.503 Y16.869 F300 -G1 X41.552 Y16.793 F300 -G1 X41.61 Y16.721 F300 +G1 X41.401 Y17.224 F300 +G1 X41.407 Y17.143 F300 +G1 X41.422 Y17.064 F300 +G1 X41.446 Y16.987 F300 +G1 X41.479 Y16.913 F300 +G1 X41.519 Y16.843 F300 +G1 X41.565 Y16.776 F300 +G1 X41.618 Y16.712 F300 G1 X41.676 Y16.653 F300 -G1 X41.747 Y16.592 F300 -G1 X41.823 Y16.538 F300 -G1 X41.904 Y16.49 F300 -G1 X41.987 Y16.45 F300 -G1 X42.075 Y16.418 F300 -G1 X42.162 Y16.394 F300 -G1 X42.249 Y16.38 F300 +G1 X41.739 Y16.599 F300 +G1 X41.806 Y16.549 F300 +G1 X41.876 Y16.505 F300 +G1 X41.95 Y16.467 F300 +G1 X42.025 Y16.435 F300 +G1 X42.102 Y16.409 F300 +G1 X42.18 Y16.391 F300 +G1 X42.258 Y16.379 F300 G1 X42.336 Y16.375 F300 G1 X42.442 Y16.385 F300 G1 X42.547 Y16.407 F300 @@ -2734,21 +2812,35 @@ G1 X46.461 Y24.503 F300 G1 X46.49 Y24.455 F300 G1 X46.494 Y24.44 F300 G1 X46.503 Y24.424 F300 +G1 X46.514 Y24.408 F300 G1 X46.524 Y24.392 F300 -G1 X46.529 Y24.379 F300 +G1 X46.528 Y24.383 F300 +G1 X46.53 Y24.377 F300 G1 X46.53 Y24.371 F300 -G1 X46.532 Y24.361 F300 +G1 X46.531 Y24.363 F300 +G1 X46.534 Y24.351 F300 G1 X46.54 Y24.334 F300 -G1 X46.547 Y24.308 F300 +G1 X46.546 Y24.317 F300 +G1 X46.547 Y24.306 F300 G1 X46.546 Y24.301 F300 +G1 X46.544 Y24.298 F300 +G1 X46.541 Y24.295 F300 G1 X46.54 Y24.291 F300 G1 X46.541 Y24.207 F300 G1 X46.54 Y24.193 F300 G1 X46.54 Y24.151 F300 +G1 X46.54 Y24.148 F300 G1 X46.54 Y24.139 F300 +G1 X46.54 Y24.127 F300 G1 X46.54 Y24.114 F300 +G1 X46.538 Y24.104 F300 +G1 X46.534 Y24.087 F300 G1 X46.527 Y24.064 F300 +G1 X46.519 Y24.038 F300 +G1 X46.51 Y24.012 F300 G1 X46.503 Y23.987 F300 +G1 X46.496 Y23.967 F300 +G1 X46.493 Y23.953 F300 G1 X46.493 Y23.947 F300 G1 X46.417 Y23.808 F300 G1 X46.382 Y23.749 F300 @@ -2756,9 +2848,14 @@ G1 X46.347 Y23.701 F300 G1 X46.289 Y23.633 F300 G1 X46.177 Y23.514 F300 G1 X46.115 Y23.456 F300 -G1 X46.045 Y23.394 F300 +G1 X46.045 Y23.393 F300 G1 X45.971 Y23.334 F300 -G1 X45.926 Y23.297 F300 +G1 X45.952 Y23.318 F300 +G1 X45.938 Y23.307 F300 +G1 X45.929 Y23.299 F300 +G1 X45.925 Y23.295 F300 +G1 X45.927 Y23.297 F300 +G1 X45.935 Y23.303 F300 G1 X45.95 Y23.315 F300 G1 X45.85 Y23.244 F300 G1 X45.656 Y23.116 F300 @@ -2781,8 +2878,8 @@ G1 X44.585 Y24.266 F300 G1 X44.738 Y24.668 F300 G1 X44.902 Y25.065 F300 G1 X44.964 Y25.205 F300 -G1 X45.17 Y25.157 F300 -G1 X45.273 Y25.13 F300 +G1 X45.101 Y25.173 F300 +G1 X45.239 Y25.14 F300 G1 X45.373 Y25.101 F300 G1 X45.559 Y25.041 F300 G1 X45.741 Y24.97 F300 @@ -2807,31 +2904,49 @@ G1 X54.465 Y27.77 F300 G1 X54.43 Y27.718 F300 G1 X54.076 Y27.237 F300 G1 X53.718 Y26.76 F300 -G1 X53.686 Y26.718 F300 -G1 X53.639 Y26.658 F300 +G1 X53.71 Y26.749 F300 +G1 X53.697 Y26.732 F300 +G1 X53.68 Y26.711 F300 +G1 X53.662 Y26.688 F300 +G1 X53.644 Y26.665 F300 +G1 X53.628 Y26.645 F300 +G1 X53.616 Y26.629 F300 G1 X53.61 Y26.62 F300 G1 X53.47 Y26.44 F300 G1 X53.126 Y26.011 F300 -G1 X52.749 Y25.55 F300 +G1 X52.749 Y25.549 F300 G1 X52.364 Y25.09 F300 +G1 X52.185 Y24.883 F300 G1 X52.004 Y24.675 F300 G1 X51.946 Y24.609 F300 -G1 X51.849 Y24.767 F300 +G1 X51.881 Y24.714 F300 +G1 X51.818 Y24.82 F300 G1 X51.76 Y24.929 F300 -G1 X51.719 Y25.014 F300 +G1 X51.718 Y25.014 F300 G1 X51.678 Y25.101 F300 -G1 X51.661 Y25.142 F300 -G1 X51.626 Y25.223 F300 +G1 X51.677 Y25.105 F300 +G1 X51.671 Y25.117 F300 +G1 X51.664 Y25.135 F300 +G1 X51.654 Y25.157 F300 +G1 X51.644 Y25.181 F300 +G1 X51.633 Y25.207 F300 +G1 X51.623 Y25.231 F300 +G1 X51.614 Y25.253 F300 +G1 X51.606 Y25.271 F300 G1 X51.602 Y25.284 F300 G1 X51.518 Y25.543 F300 G1 X51.446 Y25.807 F300 G1 X51.386 Y26.074 F300 G1 X51.356 Y26.231 F300 -G1 X51.35 Y26.283 F300 -G1 X51.34 Y26.347 F300 +G1 X51.354 Y26.249 F300 +G1 X51.351 Y26.274 F300 +G1 X51.347 Y26.302 F300 +G1 X51.343 Y26.33 F300 +G1 X51.339 Y26.355 F300 +G1 X51.336 Y26.375 F300 G1 X51.334 Y26.387 F300 -G1 X51.332 Y26.449 F300 -G1 X51.327 Y26.512 F300 +G1 X51.331 Y26.47 F300 +G1 X51.323 Y26.554 F300 G1 X51.316 Y26.638 F300 G1 X51.316 Y27.226 F300 G1 X51.309 Y27.331 F300 @@ -2872,19 +2987,21 @@ G1 X49.629 Y25.344 F300 G1 X49.701 Y25.083 F300 G1 X49.785 Y24.825 F300 G1 X49.871 Y24.593 F300 -G1 X49.939 Y24.432 F300 -G1 X50.014 Y24.266 F300 +G1 X49.922 Y24.471 F300 +G1 X49.977 Y24.347 F300 +G1 X50.034 Y24.222 F300 G1 X50.096 Y24.097 F300 -G1 X50.182 Y23.931 F300 -G1 X50.276 Y23.766 F300 +G1 X50.16 Y23.972 F300 +G1 X50.229 Y23.848 F300 +G1 X50.301 Y23.725 F300 G1 X50.377 Y23.605 F300 -G1 X50.458 Y23.488 F300 +G1 X50.458 Y23.489 F300 G1 X50.543 Y23.376 F300 -G1 X50.632 Y23.268 F300 +G1 X50.632 Y23.269 F300 G1 X50.726 Y23.167 F300 -G1 X50.825 Y23.07 F300 -G1 X50.928 Y22.981 F300 -G1 X51.036 Y22.9 F300 +G1 X50.824 Y23.071 F300 +G1 X50.927 Y22.982 F300 +G1 X51.036 Y22.901 F300 G1 X51.149 Y22.828 F300 G1 X51.07 Y22.165 F300 G1 X51.003 Y21.501 F300 @@ -2894,33 +3011,32 @@ G1 X50.872 Y19.501 F300 G1 X50.852 Y18.834 F300 G1 X50.845 Y18.166 F300 G1 X50.848 Y17.624 F300 -G1 X50.852 Y17.543 F300 -G1 X50.865 Y17.471 F300 -G1 X50.884 Y17.406 F300 -G1 X50.91 Y17.347 F300 -G1 X50.94 Y17.293 F300 -G1 X50.978 Y17.242 F300 -G1 X51.021 Y17.198 F300 -G1 X51.068 Y17.158 F300 -G1 X51.118 Y17.124 F300 -G1 X51.172 Y17.095 F300 -G1 X51.244 Y17.066 F300 -G1 X51.318 Y17.045 F300 -G1 X51.395 Y17.033 F300 -G1 X51.473 Y17.029 F300 -G1 X51.552 Y17.033 F300 -G1 X51.628 Y17.045 F300 -G1 X51.702 Y17.066 F300 -G1 X51.773 Y17.095 F300 -G1 X51.827 Y17.124 F300 -G1 X51.877 Y17.158 F300 -G1 X51.924 Y17.198 F300 -G1 X51.966 Y17.242 F300 -G1 X52.003 Y17.293 F300 -G1 X52.033 Y17.347 F300 -G1 X52.057 Y17.405 F300 -G1 X52.076 Y17.471 F300 -G1 X52.088 Y17.543 F300 +G1 X50.853 Y17.54 F300 +G1 X50.867 Y17.462 F300 +G1 X50.89 Y17.391 F300 +G1 X50.92 Y17.326 F300 +G1 X50.958 Y17.268 F300 +G1 X51.002 Y17.216 F300 +G1 X51.052 Y17.17 F300 +G1 X51.107 Y17.131 F300 +G1 X51.166 Y17.098 F300 +G1 X51.228 Y17.071 F300 +G1 X51.293 Y17.051 F300 +G1 X51.36 Y17.037 F300 +G1 X51.428 Y17.03 F300 +G1 X51.497 Y17.029 F300 +G1 X51.565 Y17.034 F300 +G1 X51.632 Y17.046 F300 +G1 X51.697 Y17.064 F300 +G1 X51.76 Y17.089 F300 +G1 X51.82 Y17.119 F300 +G1 X51.876 Y17.157 F300 +G1 X51.927 Y17.2 F300 +G1 X51.972 Y17.25 F300 +G1 X52.011 Y17.307 F300 +G1 X52.043 Y17.369 F300 +G1 X52.068 Y17.439 F300 +G1 X52.084 Y17.514 F300 G1 X52.091 Y17.624 F300 G1 X52.088 Y18.273 F300 G1 X52.097 Y18.922 F300 @@ -2938,13 +3054,12 @@ G1 X53.08 Y23.093 F300 G1 X53.197 Y23.205 F300 G1 X53.306 Y23.324 F300 G1 X53.361 Y23.392 F300 -G1 X53.66 Y23.738 F300 -G1 X53.957 Y24.09 F300 +G1 X53.661 Y23.739 F300 +G1 X53.957 Y24.091 F300 G1 X54.25 Y24.45 F300 -G1 X54.62 Y24.908 F300 -G1 X54.985 Y25.371 F300 -G1 X55.344 Y25.838 F300 -G1 X55.698 Y26.309 F300 +G1 X54.712 Y25.024 F300 +G1 X55.165 Y25.604 F300 +G1 X55.61 Y26.191 F300 G1 X56.047 Y26.784 F300 G1 X56.094 Y26.879 F300 G1 X56.13 Y26.978 F300 @@ -2961,20 +3076,23 @@ G1 X55.855 Y27.943 F300 G1 X55.772 Y28.009 F300 G1 X55.705 Y28.051 F300;svg#Drawing > g#Layer_3 > path G0 X15.894 Y8.964 -G1 X16.107 Y9.222 F300 -G1 X16.319 Y9.491 F300 -G1 X16.421 Y9.629 F300 -G1 X16.519 Y9.77 F300 -G1 X16.613 Y9.913 F300 +G1 X15.989 Y9.078 F300 +G1 X16.084 Y9.193 F300 +G1 X16.179 Y9.311 F300 +G1 X16.273 Y9.43 F300 +G1 X16.365 Y9.552 F300 +G1 X16.454 Y9.676 F300 +G1 X16.54 Y9.801 F300 +G1 X16.623 Y9.929 F300 G1 X16.7 Y10.059 F300 -G1 X16.782 Y10.209 F300 -G1 X16.856 Y10.362 F300 -G1 X16.921 Y10.517 F300 -G1 X16.977 Y10.676 F300 -G1 X17.014 Y10.804 F300 -G1 X17.044 Y10.936 F300 -G1 X17.067 Y11.069 F300 -G1 X17.081 Y11.206 F300 +G1 X16.773 Y10.192 F300 +G1 X16.84 Y10.327 F300 +G1 X16.9 Y10.465 F300 +G1 X16.953 Y10.605 F300 +G1 X16.999 Y10.747 F300 +G1 X17.035 Y10.893 F300 +G1 X17.063 Y11.041 F300 +G1 X17.08 Y11.192 F300 G1 X17.087 Y11.345 F300 G1 X17.082 Y11.499 F300 G1 X17.066 Y11.652 F300 @@ -2996,15 +3114,16 @@ G1 X15.61 Y13.225 F300 G1 X15.451 Y13.26 F300 G1 X15.386 Y13.271 F300 G1 X15.195 Y13.308 F300 -G1 X15.004 Y13.339 F300 +G1 X15.005 Y13.339 F300 G1 X14.814 Y13.367 F300 G1 X14.322 Y13.441 F300 G1 X14.272 Y13.441 F300 G1 X14.243 Y13.441 F300 -G1 X13.96 Y13.486 F300 -G1 X13.819 Y13.513 F300 +G1 X14.054 Y13.471 F300 +G1 X13.866 Y13.504 F300 G1 X13.679 Y13.544 F300 -G1 X13.523 Y13.589 F300 +G1 X13.575 Y13.573 F300 +G1 X13.472 Y13.605 F300 G1 X13.369 Y13.634 F300 G1 X13.306 Y13.658 F300 G1 X13.229 Y13.705 F300 @@ -3030,11 +3149,14 @@ G1 X11.611 Y13.259 F300 G1 X11.584 Y13.156 F300 G1 X11.569 Y13.05 F300 G1 X11.565 Y12.983 F300 -G1 X11.545 Y12.807 F300 +G1 X11.545 Y12.806 F300 G1 X11.515 Y12.63 F300 G1 X11.478 Y12.454 F300 -G1 X11.411 Y12.192 F300 +G1 X11.435 Y12.279 F300 +G1 X11.387 Y12.105 F300 G1 X11.335 Y11.93 F300 +G1 X11.282 Y11.756 F300 +G1 X11.228 Y11.583 F300 G1 X11.175 Y11.409 F300 G1 X11.124 Y11.235 F300 G1 X11.077 Y11.061 F300 @@ -3047,19 +3169,19 @@ G1 X10.733 Y8.556 F300 G1 X10.726 Y8.448 F300 G1 X10.692 Y7.866 F300 G1 X10.665 Y7.284 F300 -G1 X10.652 Y6.896 F300 -G1 X10.643 Y6.507 F300 +G1 X10.647 Y6.702 F300 G1 X10.639 Y6.12 F300 -G1 X10.639 Y5.729 F300 +G1 X10.638 Y5.925 F300 +G1 X10.639 Y5.727 F300 +G1 X10.642 Y5.528 F300 G1 X10.648 Y5.328 F300 G1 X10.657 Y5.128 F300 -G1 X10.671 Y4.927 F300 -G1 X10.691 Y4.728 F300 +G1 X10.671 Y4.928 F300 +G1 X10.691 Y4.729 F300 G1 X10.717 Y4.531 F300 -G1 X10.743 Y4.373 F300 -G1 X10.774 Y4.218 F300 -G1 X10.811 Y4.065 F300 -G1 X10.854 Y3.915 F300 +G1 X10.75 Y4.335 F300 +G1 X10.792 Y4.143 F300 +G1 X10.843 Y3.953 F300 G1 X10.903 Y3.768 F300 G1 X10.963 Y3.597 F300 G1 X11.034 Y3.43 F300 @@ -3087,31 +3209,29 @@ G1 X14.138 Y2.048 F300 G1 X14.306 Y2.108 F300 G1 X14.469 Y2.18 F300 G1 X14.544 Y2.217 F300 -G1 X14.675 Y2.285 F300 -G1 X14.8 Y2.359 F300 -G1 X14.92 Y2.438 F300 -G1 X15.034 Y2.523 F300 -G1 X15.143 Y2.613 F300 -G1 X15.247 Y2.708 F300 +G1 X14.699 Y2.298 F300 +G1 X14.847 Y2.389 F300 +G1 X14.988 Y2.487 F300 +G1 X15.121 Y2.594 F300 +G1 X15.247 Y2.709 F300 G1 X15.366 Y2.83 F300 -G1 X15.477 Y2.958 F300 -G1 X15.582 Y3.092 F300 -G1 X15.679 Y3.232 F300 -G1 X15.77 Y3.378 F300 -G1 X15.853 Y3.527 F300 -G1 X15.929 Y3.682 F300 -G1 X15.999 Y3.84 F300 -G1 X16.061 Y4.001 F300 -G1 X16.117 Y4.166 F300 -G1 X16.166 Y4.333 F300 -G1 X16.208 Y4.502 F300 -G1 X16.243 Y4.672 F300 -G1 X16.271 Y4.843 F300 -G1 X16.293 Y5.015 F300 -G1 X16.308 Y5.188 F300 -G1 X16.316 Y5.36 F300 -G1 X16.318 Y5.531 F300 -G1 X16.313 Y5.699 F300 +G1 X15.478 Y2.959 F300 +G1 X15.582 Y3.093 F300 +G1 X15.68 Y3.233 F300 +G1 X15.77 Y3.379 F300 +G1 X15.854 Y3.529 F300 +G1 X15.93 Y3.683 F300 +G1 X16 Y3.842 F300 +G1 X16.062 Y4.003 F300 +G1 X16.118 Y4.168 F300 +G1 X16.166 Y4.335 F300 +G1 X16.208 Y4.504 F300 +G1 X16.243 Y4.674 F300 +G1 X16.272 Y4.845 F300 +G1 X16.293 Y5.017 F300 +G1 X16.308 Y5.189 F300 +G1 X16.316 Y5.361 F300 +G1 X16.318 Y5.532 F300 G1 X16.301 Y5.866 F300 G1 X16.286 Y6.043 F300 G1 X16.26 Y6.218 F300 @@ -3139,16 +3259,25 @@ G1 X15.224 Y11.411 F300 G0 X15.224 Y11.411 G1 X15.224 Y11.411 F300 G1 X15.224 Y11.411 F300 +G1 X15.224 Y11.408 F300 G1 X15.224 Y11.399 F300 +G1 X15.224 Y11.389 F300 G1 X15.224 Y11.382 F300 G1 X15.224 Y11.419 F300 G1 X15.224 Y11.419 F300 G1 X15.224 Y11.411 F300 G0 X15.224 Y11.454 +G1 X15.224 Y11.453 F300 G1 X15.224 Y11.451 F300 +G1 X15.224 Y11.445 F300 G1 X15.224 Y11.433 F300 G1 X15.224 Y11.433 F300 -G1 X15.198 Y11.475 F300 +G1 X15.21 Y11.454 F300 +G1 X15.202 Y11.468 F300 +G1 X15.199 Y11.474 F300 +G1 X15.199 Y11.474 F300 +G1 X15.203 Y11.469 F300 +G1 X15.209 Y11.459 F300 G1 X15.216 Y11.446 F300 G1 X15.224 Y11.454 F300 G0 X14.317 Y4.636 @@ -3166,15 +3295,19 @@ G1 X13.395 Y3.792 F300 G1 X13.294 Y3.789 F300 G1 X13.194 Y3.797 F300 G1 X13.179 Y3.799 F300 -G1 X13.205 Y3.801 F300 -G1 X13.21 Y3.804 F300 -G1 X13.208 Y3.807 F300 -G1 X13.195 Y3.813 F300 +G1 X13.198 Y3.8 F300 +G1 X13.208 Y3.802 F300 +G1 X13.21 Y3.805 F300 +G1 X13.205 Y3.809 F300 +G1 X13.195 Y3.812 F300 +G1 X13.182 Y3.816 F300 G1 X13.167 Y3.819 F300 -G1 X13.138 Y3.823 F300 -G1 X13.12 Y3.822 F300 -G1 X13.114 Y3.818 F300 -G1 X13.115 Y3.813 F300 +G1 X13.151 Y3.822 F300 +G1 X13.137 Y3.823 F300 +G1 X13.125 Y3.823 F300 +G1 X13.117 Y3.82 F300 +G1 X13.114 Y3.816 F300 +G1 X13.118 Y3.809 F300 G1 X13.131 Y3.799 F300 G1 X13.054 Y3.839 F300 G1 X12.983 Y3.89 F300 @@ -3184,12 +3317,13 @@ G1 X12.837 Y4.05 F300 G1 X12.779 Y4.139 F300 G1 X12.73 Y4.233 F300 G1 X12.688 Y4.332 F300 -G1 X12.653 Y4.433 F300 -G1 X12.624 Y4.538 F300 -G1 X12.6 Y4.645 F300 +G1 X12.653 Y4.434 F300 +G1 X12.624 Y4.539 F300 +G1 X12.6 Y4.646 F300 G1 X12.581 Y4.755 F300 -G1 X12.561 Y4.903 F300 -G1 X12.547 Y5.05 F300 +G1 X12.566 Y4.865 F300 +G1 X12.553 Y4.976 F300 +G1 X12.544 Y5.087 F300 G1 X12.536 Y5.196 F300 G1 X12.514 Y5.669 F300 G1 X12.504 Y6.141 F300 @@ -3199,17 +3333,20 @@ G1 X12.817 Y6.98 F300 G1 X13.109 Y6.869 F300 G1 X13.397 Y6.747 F300 G1 X13.608 Y6.649 F300 -G1 X13.904 Y6.503 F300 -G1 X13.995 Y6.453 F300 -G1 X14.079 Y6.402 F300 -G1 X14.156 Y6.347 F300 -G1 X14.21 Y6.302 F300 -G1 X14.259 Y6.254 F300 -G1 X14.304 Y6.201 F300 -G1 X14.343 Y6.144 F300 -G1 X14.377 Y6.083 F300 -G1 X14.405 Y6.016 F300 -G1 X14.429 Y5.941 F300 +G1 X13.69 Y6.609 F300 +G1 X13.77 Y6.57 F300 +G1 X13.847 Y6.532 F300 +G1 X13.922 Y6.494 F300 +G1 X13.994 Y6.454 F300 +G1 X14.062 Y6.413 F300 +G1 X14.126 Y6.37 F300 +G1 X14.185 Y6.324 F300 +G1 X14.24 Y6.274 F300 +G1 X14.289 Y6.219 F300 +G1 X14.333 Y6.16 F300 +G1 X14.371 Y6.094 F300 +G1 X14.403 Y6.022 F300 +G1 X14.428 Y5.943 F300 G1 X14.446 Y5.855 F300 G1 X14.462 Y5.676 F300 G1 X14.465 Y5.496 F300 @@ -3220,13 +3357,17 @@ G1 X14.359 Y4.785 F300 G1 X14.309 Y4.627 F300 G1 X14.317 Y4.636 F300 G0 X15.182 Y11.165 -G1 X15.16 Y11.124 F300 -G1 X15.131 Y11.066 F300 +G1 X15.174 Y11.152 F300 +G1 X15.164 Y11.132 F300 +G1 X15.152 Y11.107 F300 +G1 X15.139 Y11.082 F300 +G1 X15.128 Y11.058 F300 +G1 X15.119 Y11.039 F300 G1 X15.113 Y11.028 F300 G1 X14.986 Y10.821 F300 G1 X14.846 Y10.623 F300 G1 X14.764 Y10.512 F300 -G1 X14.621 Y10.335 F300 +G1 X14.622 Y10.335 F300 G1 X14.475 Y10.163 F300 G1 X14.252 Y9.913 F300 G1 X14.02 Y9.673 F300 @@ -3235,15 +3376,15 @@ G1 X13.584 Y9.265 F300 G1 X13.38 Y9.088 F300 G1 X13.189 Y8.935 F300 G1 X13.097 Y8.866 F300 -G1 X12.87 Y8.934 F300 +G1 X12.871 Y8.934 F300 G1 X12.644 Y8.998 F300 G1 X12.681 Y9.377 F300 G1 X12.729 Y9.753 F300 G1 X12.79 Y10.129 F300 G1 X12.862 Y10.502 F300 G1 X12.941 Y10.851 F300 -G1 X13.001 Y11.087 F300 -G1 X13.063 Y11.321 F300 +G1 X13.021 Y11.165 F300 +G1 X13.106 Y11.476 F300 G1 X13.189 Y11.787 F300 G1 X13.289 Y11.761 F300 G1 X13.391 Y11.74 F300 @@ -3252,11 +3393,12 @@ G1 X13.877 Y11.66 F300 G1 X14.288 Y11.589 F300 G1 X14.459 Y11.565 F300 G1 X14.613 Y11.541 F300 -G1 X14.756 Y11.518 F300 +G1 X14.755 Y11.518 F300 G1 X14.896 Y11.491 F300 G1 X15.137 Y11.433 F300 G1 X15.208 Y11.411 F300 G1 X15.229 Y11.411 F300 +G1 X15.229 Y11.382 F300 G1 X15.229 Y11.353 F300 G1 X15.229 Y11.335 F300 G1 X15.229 Y11.335 F300 @@ -3267,16 +3409,20 @@ G1 X15.232 Y11.396 F300 G1 X15.232 Y11.396 F300;svg#Drawing > g#Layer_3 > path G0 X19.275 Y12.42 G1 X19.275 Y12.151 F300 -G1 X19.266 Y11.884 F300 -G1 X19.247 Y11.619 F300 +G1 X19.266 Y11.885 F300 +G1 X19.247 Y11.62 F300 G1 X19.22 Y11.356 F300 G1 X19.186 Y11.093 F300 G1 X19.146 Y10.832 F300 G1 X19.099 Y10.571 F300 G1 X19.048 Y10.311 F300 -G1 X18.934 Y9.793 F300 +G1 X18.993 Y10.051 F300 +G1 X18.934 Y9.792 F300 +G1 X18.874 Y9.534 F300 G1 X18.811 Y9.276 F300 +G1 X18.748 Y9.017 F300 G1 X18.685 Y8.759 F300 +G1 X18.623 Y8.501 F300 G1 X18.563 Y8.242 F300 G1 X18.457 Y7.749 F300 G1 X18.363 Y7.254 F300 @@ -3289,38 +3435,37 @@ G1 X18.046 Y4.246 F300 G1 X18.035 Y3.741 F300 G1 X18.034 Y3.604 F300 G1 X18.039 Y3.499 F300 -G1 X18.053 Y3.404 F300 -G1 X18.074 Y3.317 F300 -G1 X18.102 Y3.237 F300 -G1 X18.137 Y3.163 F300 -G1 X18.179 Y3.092 F300 -G1 X18.228 Y3.027 F300 -G1 X18.281 Y2.969 F300 -G1 X18.339 Y2.916 F300 -G1 X18.401 Y2.869 F300 -G1 X18.468 Y2.828 F300 -G1 X18.538 Y2.793 F300 -G1 X18.611 Y2.764 F300 -G1 X18.686 Y2.74 F300 -G1 X18.764 Y2.722 F300 -G1 X18.862 Y2.708 F300 -G1 X18.962 Y2.704 F300 -G1 X19.061 Y2.708 F300 -G1 X19.16 Y2.722 F300 -G1 X19.237 Y2.74 F300 -G1 X19.313 Y2.763 F300 -G1 X19.386 Y2.792 F300 -G1 X19.456 Y2.828 F300 -G1 X19.524 Y2.869 F300 -G1 X19.587 Y2.915 F300 -G1 X19.645 Y2.968 F300 -G1 X19.699 Y3.026 F300 -G1 X19.748 Y3.091 F300 -G1 X19.792 Y3.163 F300 -G1 X19.827 Y3.236 F300 -G1 X19.856 Y3.316 F300 -G1 X19.879 Y3.404 F300 -G1 X19.893 Y3.499 F300 +G1 X18.053 Y3.4 F300 +G1 X18.077 Y3.308 F300 +G1 X18.108 Y3.223 F300 +G1 X18.147 Y3.144 F300 +G1 X18.194 Y3.071 F300 +G1 X18.246 Y3.005 F300 +G1 X18.305 Y2.946 F300 +G1 X18.369 Y2.893 F300 +G1 X18.437 Y2.846 F300 +G1 X18.51 Y2.806 F300 +G1 X18.586 Y2.773 F300 +G1 X18.664 Y2.746 F300 +G1 X18.745 Y2.726 F300 +G1 X18.828 Y2.712 F300 +G1 X18.911 Y2.705 F300 +G1 X18.995 Y2.704 F300 +G1 X19.079 Y2.71 F300 +G1 X19.162 Y2.722 F300 +G1 X19.243 Y2.741 F300 +G1 X19.323 Y2.767 F300 +G1 X19.4 Y2.799 F300 +G1 X19.473 Y2.837 F300 +G1 X19.543 Y2.882 F300 +G1 X19.609 Y2.934 F300 +G1 X19.669 Y2.992 F300 +G1 X19.724 Y3.056 F300 +G1 X19.772 Y3.128 F300 +G1 X19.813 Y3.205 F300 +G1 X19.848 Y3.29 F300 +G1 X19.874 Y3.381 F300 +G1 X19.891 Y3.478 F300 G1 X19.899 Y3.604 F300 G1 X19.907 Y4.085 F300 G1 X19.927 Y4.565 F300 @@ -3332,51 +3477,53 @@ G1 X20.204 Y6.953 F300 G1 X20.295 Y7.425 F300 G1 X20.398 Y7.895 F300 G1 X20.429 Y8.026 F300 -G1 X20.688 Y9.11 F300 +G1 X20.497 Y8.314 F300 +G1 X20.567 Y8.603 F300 +G1 X20.637 Y8.893 F300 +G1 X20.705 Y9.182 F300 G1 X20.772 Y9.473 F300 -G1 X20.851 Y9.837 F300 -G1 X20.925 Y10.201 F300 -G1 X20.975 Y10.476 F300 -G1 X21.02 Y10.751 F300 -G1 X21.059 Y11.027 F300 -G1 X21.092 Y11.303 F300 -G1 X21.117 Y11.58 F300 -G1 X21.134 Y11.859 F300 -G1 X21.143 Y12.138 F300 +G1 X20.836 Y9.764 F300 +G1 X20.896 Y10.055 F300 +G1 X20.952 Y10.348 F300 +G1 X21.002 Y10.641 F300 +G1 X21.046 Y10.934 F300 +G1 X21.083 Y11.229 F300 +G1 X21.113 Y11.525 F300 +G1 X21.133 Y11.822 F300 +G1 X21.143 Y12.12 F300 G1 X21.143 Y12.42 F300 -G1 X21.135 Y12.523 F300 -G1 X21.119 Y12.618 F300 -G1 X21.096 Y12.706 F300 -G1 X21.065 Y12.786 F300 -G1 X21.029 Y12.859 F300 -G1 X20.984 Y12.93 F300 -G1 X20.934 Y12.995 F300 -G1 X20.879 Y13.053 F300 -G1 X20.82 Y13.106 F300 -G1 X20.756 Y13.153 F300 -G1 X20.687 Y13.194 F300 -G1 X20.616 Y13.229 F300 -G1 X20.542 Y13.258 F300 -G1 X20.466 Y13.282 F300 -G1 X20.388 Y13.3 F300 -G1 X20.289 Y13.314 F300 -G1 X20.189 Y13.318 F300 -G1 X20.089 Y13.314 F300 -G1 X19.991 Y13.3 F300 -G1 X19.913 Y13.283 F300 -G1 X19.838 Y13.259 F300 +G1 X21.135 Y12.524 F300 +G1 X21.119 Y12.621 F300 +G1 X21.093 Y12.712 F300 +G1 X21.06 Y12.797 F300 +G1 X21.019 Y12.876 F300 +G1 X20.972 Y12.948 F300 +G1 X20.918 Y13.014 F300 +G1 X20.858 Y13.073 F300 +G1 X20.794 Y13.126 F300 +G1 X20.725 Y13.172 F300 +G1 X20.652 Y13.212 F300 +G1 X20.576 Y13.246 F300 +G1 X20.497 Y13.273 F300 +G1 X20.416 Y13.294 F300 +G1 X20.333 Y13.309 F300 +G1 X20.25 Y13.317 F300 +G1 X20.167 Y13.318 F300 +G1 X20.083 Y13.313 F300 +G1 X20.001 Y13.302 F300 +G1 X19.92 Y13.285 F300 +G1 X19.841 Y13.26 F300 G1 X19.765 Y13.23 F300 -G1 X19.696 Y13.195 F300 -G1 X19.63 Y13.154 F300 -G1 X19.568 Y13.107 F300 -G1 X19.511 Y13.055 F300 -G1 X19.458 Y12.997 F300 -G1 X19.411 Y12.932 F300 -G1 X19.369 Y12.861 F300 -G1 X19.336 Y12.787 F300 -G1 X19.31 Y12.707 F300 -G1 X19.29 Y12.62 F300 -G1 X19.278 Y12.524 F300 +G1 X19.692 Y13.193 F300 +G1 X19.623 Y13.149 F300 +G1 X19.559 Y13.1 F300 +G1 X19.499 Y13.043 F300 +G1 X19.445 Y12.981 F300 +G1 X19.398 Y12.911 F300 +G1 X19.357 Y12.836 F300 +G1 X19.324 Y12.754 F300 +G1 X19.299 Y12.665 F300 +G1 X19.282 Y12.57 F300 G1 X19.275 Y12.42 F300;svg#Drawing > g#Layer_3 > path G0 X27.376 Y6.988 G1 X27.512 Y7.141 F300 @@ -3392,77 +3539,83 @@ G1 X28.282 Y8.804 F300 G1 X28.311 Y9.008 F300 G1 X28.328 Y9.213 F300 G1 X28.329 Y9.234 F300 -G1 X28.331 Y9.388 F300 -G1 X28.324 Y9.536 F300 -G1 X28.309 Y9.678 F300 -G1 X28.286 Y9.815 F300 -G1 X28.256 Y9.948 F300 -G1 X28.22 Y10.076 F300 -G1 X28.175 Y10.204 F300 -G1 X28.124 Y10.328 F300 -G1 X28.066 Y10.448 F300 -G1 X28.002 Y10.563 F300 -G1 X27.933 Y10.675 F300 -G1 X27.857 Y10.782 F300 -G1 X27.76 Y10.907 F300 -G1 X27.655 Y11.025 F300 -G1 X27.543 Y11.139 F300 -G1 X27.424 Y11.247 F300 -G1 X27.298 Y11.35 F300 -G1 X27.168 Y11.447 F300 -G1 X27.032 Y11.538 F300 -G1 X26.892 Y11.623 F300 -G1 X26.746 Y11.704 F300 -G1 X26.597 Y11.779 F300 -G1 X26.406 Y11.864 F300 -G1 X26.211 Y11.94 F300 -G1 X26.012 Y12.007 F300 -G1 X25.81 Y12.066 F300 -G1 X25.605 Y12.116 F300 -G1 X25.4 Y12.156 F300 -G1 X25.196 Y12.188 F300 +G1 X28.33 Y9.403 F300 +G1 X28.321 Y9.568 F300 +G1 X28.301 Y9.728 F300 +G1 X28.272 Y9.883 F300 +G1 X28.233 Y10.033 F300 +G1 X28.185 Y10.178 F300 +G1 X28.128 Y10.318 F300 +G1 X28.063 Y10.453 F300 +G1 X27.99 Y10.584 F300 +G1 X27.909 Y10.71 F300 +G1 X27.821 Y10.83 F300 +G1 X27.726 Y10.946 F300 +G1 X27.625 Y11.057 F300 +G1 X27.517 Y11.163 F300 +G1 X27.404 Y11.264 F300 +G1 X27.285 Y11.36 F300 +G1 X27.161 Y11.451 F300 +G1 X27.033 Y11.537 F300 +G1 X26.901 Y11.618 F300 +G1 X26.764 Y11.694 F300 +G1 X26.624 Y11.765 F300 +G1 X26.481 Y11.832 F300 +G1 X26.335 Y11.893 F300 +G1 X26.187 Y11.948 F300 +G1 X26.037 Y11.999 F300 +G1 X25.885 Y12.045 F300 +G1 X25.732 Y12.086 F300 +G1 X25.578 Y12.122 F300 +G1 X25.423 Y12.152 F300 +G1 X25.269 Y12.178 F300 G1 X24.993 Y12.211 F300 -G1 X24.939 Y12.272 F300 -G1 X24.88 Y12.328 F300 -G1 X24.818 Y12.379 F300 -G1 X24.751 Y12.425 F300 -G1 X24.68 Y12.465 F300 -G1 X24.587 Y12.508 F300 -G1 X24.491 Y12.542 F300 -G1 X24.393 Y12.567 F300 -G1 X24.293 Y12.582 F300 -G1 X24.212 Y12.588 F300 -G1 X24.132 Y12.587 F300 -G1 X24.053 Y12.579 F300 -G1 X23.975 Y12.565 F300 -G1 X23.899 Y12.544 F300 -G1 X23.825 Y12.516 F300 -G1 X23.754 Y12.481 F300 -G1 X23.687 Y12.439 F300 -G1 X23.622 Y12.389 F300 -G1 X23.562 Y12.33 F300 -G1 X23.51 Y12.268 F300 -G1 X23.461 Y12.197 F300 -G1 X23.418 Y12.117 F300 -G1 X23.381 Y12.027 F300 +G1 X24.937 Y12.273 F300 +G1 X24.877 Y12.331 F300 +G1 X24.812 Y12.383 F300 +G1 X24.742 Y12.43 F300 +G1 X24.669 Y12.471 F300 +G1 X24.593 Y12.506 F300 +G1 X24.515 Y12.535 F300 +G1 X24.434 Y12.558 F300 +G1 X24.353 Y12.574 F300 +G1 X24.27 Y12.585 F300 +G1 X24.188 Y12.588 F300 +G1 X24.105 Y12.585 F300 +G1 X24.024 Y12.574 F300 +G1 X23.944 Y12.557 F300 +G1 X23.867 Y12.532 F300 +G1 X23.792 Y12.5 F300 +G1 X23.72 Y12.461 F300 +G1 X23.652 Y12.413 F300 +G1 X23.589 Y12.358 F300 +G1 X23.531 Y12.294 F300 +G1 X23.478 Y12.223 F300 +G1 X23.431 Y12.143 F300 +G1 X23.391 Y12.054 F300 G1 X23.349 Y11.925 F300 -G1 X22.92 Y10.242 F300 -G1 X22.781 Y9.678 F300 -G1 X22.648 Y9.112 F300 -G1 X22.522 Y8.544 F300 -G1 X22.433 Y8.117 F300 -G1 X22.351 Y7.689 F300 -G1 X22.276 Y7.261 F300 -G1 X22.209 Y6.832 F300 -G1 X22.161 Y6.487 F300 -G1 X22.12 Y6.143 F300 -G1 X22.085 Y5.797 F300 -G1 X22.056 Y5.452 F300 -G1 X22.036 Y5.105 F300 -G1 X22.022 Y4.759 F300 -G1 X22.017 Y4.412 F300 -G1 X22.021 Y4.064 F300 -G1 X22.034 Y3.715 F300 +G1 X23.256 Y11.56 F300 +G1 X23.162 Y11.195 F300 +G1 X23.069 Y10.829 F300 +G1 X22.975 Y10.462 F300 +G1 X22.883 Y10.095 F300 +G1 X22.793 Y9.727 F300 +G1 X22.705 Y9.358 F300 +G1 X22.62 Y8.989 F300 +G1 X22.538 Y8.618 F300 +G1 X22.46 Y8.247 F300 +G1 X22.386 Y7.876 F300 +G1 X22.318 Y7.504 F300 +G1 X22.255 Y7.131 F300 +G1 X22.198 Y6.757 F300 +G1 X22.148 Y6.383 F300 +G1 X22.105 Y6.008 F300 +G1 X22.07 Y5.632 F300 +G1 X22.044 Y5.256 F300 +G1 X22.026 Y4.879 F300 +G1 X22.018 Y4.502 F300 +G1 X22.02 Y4.124 F300 +G1 X22.032 Y3.745 F300 G1 X22.056 Y3.366 F300 G1 X22.064 Y3.259 F300 G1 X22.085 Y3.154 F300 @@ -3492,23 +3645,26 @@ G1 X23.873 Y3.076 F300 G1 X23.901 Y3.179 F300 G1 X23.917 Y3.284 F300 G1 X23.921 Y3.365 F300 -G1 X23.901 Y3.677 F300 -G1 X23.889 Y3.987 F300 -G1 X23.885 Y4.296 F300 -G1 X23.887 Y4.604 F300 -G1 X23.897 Y4.911 F300 -G1 X23.919 Y5.295 F300 -G1 X23.95 Y5.678 F300 -G1 X23.99 Y6.06 F300 -G1 X24.039 Y6.441 F300 -G1 X24.095 Y6.821 F300 -G1 X24.158 Y7.201 F300 -G1 X24.228 Y7.579 F300 -G1 X24.303 Y7.958 F300 -G1 X24.411 Y8.46 F300 -G1 X24.526 Y8.962 F300 -G1 X24.647 Y9.463 F300 -G1 X24.835 Y10.212 F300 +G1 X23.898 Y3.735 F300 +G1 X23.886 Y4.104 F300 +G1 X23.885 Y4.471 F300 +G1 X23.894 Y4.838 F300 +G1 X23.913 Y5.204 F300 +G1 X23.94 Y5.569 F300 +G1 X23.976 Y5.933 F300 +G1 X24.02 Y6.296 F300 +G1 X24.07 Y6.659 F300 +G1 X24.128 Y7.02 F300 +G1 X24.191 Y7.381 F300 +G1 X24.26 Y7.742 F300 +G1 X24.333 Y8.102 F300 +G1 X24.411 Y8.461 F300 +G1 X24.492 Y8.819 F300 +G1 X24.577 Y9.177 F300 +G1 X24.664 Y9.534 F300 +G1 X24.754 Y9.891 F300 +G1 X24.844 Y10.248 F300 +G1 X24.935 Y10.604 F300 G1 X25.027 Y10.959 F300 G1 X25.223 Y10.93 F300 G1 X25.417 Y10.889 F300 @@ -3543,16 +3699,18 @@ G1 X26.423 Y7.787 F300 G1 X26.302 Y7.675 F300 G1 X26.172 Y7.571 F300 G1 X26.149 Y7.554 F300 -G1 X26.014 Y7.465 F300 -G1 X25.876 Y7.385 F300 -G1 X25.736 Y7.312 F300 -G1 X25.522 Y7.211 F300 -G1 X25.306 Y7.114 F300 -G1 X25.091 Y7.015 F300 -G1 X24.879 Y6.908 F300 -G1 X24.776 Y6.849 F300 -G1 X24.674 Y6.787 F300 -G1 X24.574 Y6.718 F300 +G1 X26.025 Y7.472 F300 +G1 X25.898 Y7.397 F300 +G1 X25.769 Y7.329 F300 +G1 X25.638 Y7.264 F300 +G1 X25.505 Y7.203 F300 +G1 X25.372 Y7.143 F300 +G1 X25.239 Y7.084 F300 +G1 X25.107 Y7.023 F300 +G1 X24.976 Y6.958 F300 +G1 X24.847 Y6.89 F300 +G1 X24.72 Y6.816 F300 +G1 X24.597 Y6.734 F300 G1 X24.477 Y6.644 F300 G1 X24.42 Y6.577 F300 G1 X24.374 Y6.504 F300 @@ -3597,14 +3755,15 @@ G1 X28.053 Y3.427 F300 G1 X28.029 Y3.51 F300 G1 X27.994 Y3.59 F300 G1 X27.985 Y3.606 F300 -G1 X27.655 Y4.03 F300 +G1 X27.655 Y4.029 F300 G1 X27.319 Y4.447 F300 G1 X26.976 Y4.859 F300 -G1 X26.627 Y5.265 F300 +G1 X26.627 Y5.266 F300 G1 X26.271 Y5.666 F300 G1 X25.908 Y6.062 F300 +G1 X26.027 Y6.109 F300 G1 X26.146 Y6.155 F300 -G1 X26.263 Y6.204 F300 +G1 X26.263 Y6.203 F300 G1 X26.376 Y6.255 F300 G1 X26.553 Y6.345 F300 G1 X26.724 Y6.446 F300 @@ -3614,36 +3773,35 @@ G1 X27.197 Y6.808 F300 G1 X27.338 Y6.947 F300 G1 X27.376 Y6.987 F300;svg#Drawing > g#Layer_3 > path G0 X35.42 Y11.576 -G1 X35.501 Y11.575 F300 -G1 X35.574 Y11.582 F300 -G1 X35.639 Y11.597 F300 -G1 X35.697 Y11.619 F300 -G1 X35.751 Y11.646 F300 -G1 X35.801 Y11.68 F300 -G1 X35.846 Y11.719 F300 -G1 X35.886 Y11.763 F300 -G1 X35.92 Y11.811 F300 -G1 X35.949 Y11.863 F300 -G1 X35.978 Y11.931 F300 -G1 X35.998 Y12.004 F300 -G1 X36.011 Y12.079 F300 -G1 X36.015 Y12.157 F300 -G1 X36.011 Y12.235 F300 -G1 X35.999 Y12.312 F300 -G1 X35.978 Y12.387 F300 -G1 X35.949 Y12.461 F300 -G1 X35.92 Y12.516 F300 -G1 X35.886 Y12.569 F300 -G1 X35.846 Y12.617 F300 -G1 X35.801 Y12.663 F300 -G1 X35.75 Y12.703 F300 -G1 X35.697 Y12.738 F300 -G1 X35.638 Y12.767 F300 -G1 X35.572 Y12.79 F300 -G1 X35.5 Y12.807 F300 +G1 X35.503 Y11.575 F300 +G1 X35.58 Y11.584 F300 +G1 X35.651 Y11.601 F300 +G1 X35.715 Y11.627 F300 +G1 X35.773 Y11.66 F300 +G1 X35.825 Y11.7 F300 +G1 X35.871 Y11.745 F300 +G1 X35.91 Y11.796 F300 +G1 X35.943 Y11.852 F300 +G1 X35.97 Y11.911 F300 +G1 X35.991 Y11.973 F300 +G1 X36.005 Y12.038 F300 +G1 X36.013 Y12.104 F300 +G1 X36.015 Y12.172 F300 +G1 X36.01 Y12.239 F300 +G1 X36 Y12.307 F300 +G1 X35.983 Y12.373 F300 +G1 X35.959 Y12.437 F300 +G1 X35.93 Y12.498 F300 +G1 X35.894 Y12.557 F300 +G1 X35.852 Y12.611 F300 +G1 X35.804 Y12.66 F300 +G1 X35.749 Y12.704 F300 +G1 X35.688 Y12.742 F300 +G1 X35.621 Y12.773 F300 +G1 X35.548 Y12.797 F300 G1 X35.42 Y12.816 F300 -G1 X34.691 Y12.859 F300 -G1 X33.963 Y12.893 F300 +G1 X34.692 Y12.859 F300 +G1 X33.964 Y12.893 F300 G1 X33.236 Y12.919 F300 G1 X32.509 Y12.938 F300 G1 X32.401 Y12.965 F300 @@ -3653,40 +3811,40 @@ G1 X32.069 Y12.973 F300 G1 X31.96 Y12.952 F300 G1 X31.956 Y12.951 F300 G1 X31.155 Y12.958 F300 -G1 X30.353 Y12.956 F300 +G1 X30.354 Y12.956 F300 G1 X29.553 Y12.944 F300 G1 X28.752 Y12.922 F300 -G1 X28.672 Y12.915 F300 -G1 X28.6 Y12.9 F300 -G1 X28.534 Y12.879 F300 -G1 X28.475 Y12.852 F300 -G1 X28.422 Y12.819 F300 -G1 X28.371 Y12.78 F300 -G1 X28.326 Y12.736 F300 -G1 X28.286 Y12.688 F300 -G1 X28.252 Y12.637 F300 -G1 X28.223 Y12.582 F300 -G1 X28.194 Y12.51 F300 -G1 X28.174 Y12.435 F300 -G1 X28.161 Y12.359 F300 -G1 X28.157 Y12.281 F300 -G1 X28.161 Y12.203 F300 -G1 X28.174 Y12.127 F300 -G1 X28.194 Y12.053 F300 -G1 X28.223 Y11.983 F300 -G1 X28.252 Y11.931 F300 -G1 X28.286 Y11.881 F300 -G1 X28.326 Y11.836 F300 -G1 X28.371 Y11.796 F300 -G1 X28.422 Y11.76 F300 -G1 X28.475 Y11.731 F300 -G1 X28.534 Y11.708 F300 -G1 X28.599 Y11.691 F300 -G1 X28.671 Y11.681 F300 +G1 X28.668 Y12.915 F300 +G1 X28.591 Y12.898 F300 +G1 X28.52 Y12.873 F300 +G1 X28.455 Y12.84 F300 +G1 X28.397 Y12.801 F300 +G1 X28.345 Y12.756 F300 +G1 X28.299 Y12.705 F300 +G1 X28.26 Y12.649 F300 +G1 X28.227 Y12.59 F300 +G1 X28.2 Y12.527 F300 +G1 X28.18 Y12.462 F300 +G1 X28.166 Y12.395 F300 +G1 X28.158 Y12.327 F300 +G1 X28.157 Y12.259 F300 +G1 X28.162 Y12.191 F300 +G1 X28.174 Y12.125 F300 +G1 X28.192 Y12.06 F300 +G1 X28.216 Y11.998 F300 +G1 X28.247 Y11.939 F300 +G1 X28.284 Y11.885 F300 +G1 X28.327 Y11.835 F300 +G1 X28.377 Y11.791 F300 +G1 X28.433 Y11.753 F300 +G1 X28.495 Y11.722 F300 +G1 X28.564 Y11.699 F300 +G1 X28.639 Y11.684 F300 G1 X28.752 Y11.679 F300 -G1 X29.344 Y11.695 F300 -G1 X29.923 Y11.705 F300 -G1 X30.501 Y11.71 F300 +G1 X29.225 Y11.692 F300 +G1 X29.691 Y11.702 F300 +G1 X30.155 Y11.708 F300 +G1 X30.617 Y11.711 F300 G1 X31.081 Y11.71 F300 G1 X30.935 Y11.215 F300 G1 X30.799 Y10.715 F300 @@ -3705,38 +3863,37 @@ G1 X29.808 Y4.296 F300 G1 X29.77 Y3.661 F300 G1 X29.758 Y3.387 F300 G1 X29.76 Y3.282 F300 -G1 X29.771 Y3.186 F300 -G1 X29.79 Y3.099 F300 -G1 X29.816 Y3.019 F300 -G1 X29.848 Y2.946 F300 -G1 X29.889 Y2.874 F300 -G1 X29.936 Y2.809 F300 -G1 X29.988 Y2.751 F300 -G1 X30.045 Y2.698 F300 -G1 X30.106 Y2.652 F300 -G1 X30.172 Y2.611 F300 -G1 X30.241 Y2.576 F300 -G1 X30.313 Y2.546 F300 -G1 X30.388 Y2.523 F300 -G1 X30.466 Y2.505 F300 -G1 X30.564 Y2.491 F300 -G1 X30.663 Y2.487 F300 -G1 X30.762 Y2.491 F300 -G1 X30.861 Y2.505 F300 -G1 X30.939 Y2.523 F300 -G1 X31.015 Y2.547 F300 -G1 X31.089 Y2.576 F300 -G1 X31.159 Y2.611 F300 -G1 X31.227 Y2.652 F300 -G1 X31.291 Y2.699 F300 -G1 X31.35 Y2.752 F300 -G1 X31.405 Y2.81 F300 -G1 X31.454 Y2.875 F300 -G1 X31.499 Y2.946 F300 -G1 X31.535 Y3.02 F300 -G1 X31.564 Y3.1 F300 -G1 X31.588 Y3.187 F300 -G1 X31.603 Y3.283 F300 +G1 X29.771 Y3.185 F300 +G1 X29.791 Y3.093 F300 +G1 X29.82 Y3.008 F300 +G1 X29.857 Y2.93 F300 +G1 X29.9 Y2.857 F300 +G1 X29.95 Y2.792 F300 +G1 X30.007 Y2.732 F300 +G1 X30.068 Y2.679 F300 +G1 X30.134 Y2.633 F300 +G1 X30.205 Y2.593 F300 +G1 X30.279 Y2.559 F300 +G1 X30.356 Y2.532 F300 +G1 X30.436 Y2.511 F300 +G1 X30.517 Y2.497 F300 +G1 X30.599 Y2.489 F300 +G1 X30.682 Y2.487 F300 +G1 X30.765 Y2.492 F300 +G1 X30.848 Y2.503 F300 +G1 X30.929 Y2.52 F300 +G1 X31.009 Y2.544 F300 +G1 X31.086 Y2.575 F300 +G1 X31.16 Y2.611 F300 +G1 X31.231 Y2.655 F300 +G1 X31.297 Y2.704 F300 +G1 X31.359 Y2.76 F300 +G1 X31.415 Y2.822 F300 +G1 X31.465 Y2.891 F300 +G1 X31.509 Y2.966 F300 +G1 X31.546 Y3.048 F300 +G1 X31.575 Y3.135 F300 +G1 X31.596 Y3.23 F300 G1 X31.61 Y3.387 F300 G1 X31.638 Y3.988 F300 G1 X31.679 Y4.588 F300 @@ -3746,24 +3903,27 @@ G1 X31.872 Y6.383 F300 G1 X31.96 Y6.979 F300 G1 X32.06 Y7.572 F300 G1 X32.062 Y7.584 F300 -G1 X32.142 Y8.082 F300 +G1 X32.103 Y7.832 F300 +G1 X32.143 Y8.084 F300 +G1 X32.182 Y8.338 F300 G1 X32.221 Y8.594 F300 -G1 X32.276 Y8.936 F300 -G1 X32.334 Y9.278 F300 +G1 X32.262 Y8.85 F300 +G1 X32.304 Y9.107 F300 +G1 X32.349 Y9.364 F300 G1 X32.398 Y9.621 F300 G1 X32.45 Y9.876 F300 -G1 X32.508 Y10.13 F300 +G1 X32.508 Y10.129 F300 G1 X32.571 Y10.381 F300 G1 X32.64 Y10.63 F300 -G1 X32.701 Y10.827 F300 -G1 X32.767 Y11.022 F300 -G1 X32.839 Y11.214 F300 -G1 X32.916 Y11.403 F300 +G1 X32.717 Y10.876 F300 +G1 X32.802 Y11.118 F300 +G1 X32.896 Y11.356 F300 G1 X32.999 Y11.589 F300 G1 X33.003 Y11.612 F300 G1 X33.012 Y11.635 F300 +G1 X33.023 Y11.658 F300 G1 X33.033 Y11.681 F300 -G1 X33.637 Y11.662 F300 +G1 X33.636 Y11.662 F300 G1 X34.233 Y11.638 F300 G1 X34.828 Y11.61 F300 G1 X35.42 Y11.576 F300;svg#Drawing > g#Layer_3 > path @@ -3782,16 +3942,18 @@ G1 X39.648 Y11.517 F300 G1 X39.594 Y11.426 F300 G1 X39.551 Y11.329 F300 G1 X39.526 Y11.253 F300 -G1 X39.449 Y10.871 F300 -G1 X39.365 Y10.492 F300 -G1 X39.274 Y10.113 F300 -G1 X39.128 Y9.547 F300 -G1 X38.975 Y8.983 F300 -G1 X38.665 Y7.854 F300 -G1 X38.564 Y7.477 F300 -G1 X38.467 Y7.099 F300 +G1 X39.442 Y10.837 F300 +G1 X39.349 Y10.423 F300 +G1 X39.248 Y10.01 F300 +G1 X39.142 Y9.598 F300 +G1 X39.032 Y9.188 F300 +G1 X38.919 Y8.778 F300 +G1 X38.805 Y8.367 F300 +G1 X38.693 Y7.957 F300 +G1 X38.582 Y7.546 F300 +G1 X38.476 Y7.134 F300 G1 X38.375 Y6.72 F300 -G1 X38.289 Y6.323 F300 +G1 X38.289 Y6.324 F300 G1 X38.213 Y5.927 F300 G1 X38.145 Y5.53 F300 G1 X38.084 Y5.133 F300 @@ -3874,9 +4036,9 @@ G1 X36.144 Y3.549 F300 G1 X36.147 Y3.619 F300 G1 X36.163 Y3.884 F300 G1 X37.931 Y3.884 F300 -G1 X37.891 Y3.428 F300 -G1 X37.856 Y2.968 F300 -G1 X37.827 Y2.503 F300 +G1 X37.89 Y3.426 F300 +G1 X37.856 Y2.965 F300 +G1 X37.826 Y2.5 F300 G1 X37.801 Y2.032 F300 G1 X37.821 Y1.928 F300 G1 X37.852 Y1.827 F300 @@ -3904,25 +4066,29 @@ G1 X39.586 Y1.787 F300 G1 X39.622 Y1.886 F300 G1 X39.646 Y1.989 F300 G1 X39.653 Y2.032 F300 -G1 X39.682 Y2.76 F300 -G1 X39.697 Y3.123 F300 -G1 X39.718 Y3.485 F300 -G1 X39.735 Y3.726 F300 -G1 X39.758 Y3.968 F300 +G1 X39.666 Y2.345 F300 +G1 X39.678 Y2.656 F300 +G1 X39.69 Y2.967 F300 +G1 X39.705 Y3.278 F300 +G1 X39.725 Y3.589 F300 +G1 X39.751 Y3.899 F300 G1 X39.785 Y4.21 F300 G1 X39.836 Y4.571 F300 G1 X39.896 Y4.929 F300 G1 X39.962 Y5.285 F300 -G1 X40.073 Y5.817 F300 +G1 X40.035 Y5.64 F300 +G1 X40.112 Y5.994 F300 G1 X40.193 Y6.347 F300 -G1 X40.281 Y6.714 F300 -G1 X40.374 Y7.079 F300 -G1 X40.471 Y7.445 F300 -G1 X40.773 Y8.538 F300 -G1 X40.922 Y9.085 F300 -G1 X41.064 Y9.633 F300 -G1 X41.153 Y10 F300 -G1 X41.235 Y10.368 F300 +G1 X40.289 Y6.747 F300 +G1 X40.391 Y7.146 F300 +G1 X40.498 Y7.544 F300 +G1 X40.607 Y7.942 F300 +G1 X40.718 Y8.339 F300 +G1 X40.828 Y8.737 F300 +G1 X40.935 Y9.135 F300 +G1 X41.039 Y9.534 F300 +G1 X41.137 Y9.933 F300 +G1 X41.228 Y10.334 F300 G1 X41.309 Y10.737 F300 G1 X41.332 Y10.841 F300 G1 X41.343 Y10.948 F300 @@ -3939,27 +4105,26 @@ G1 X40.843 Y11.832 F300 G1 X40.746 Y11.877 F300 G1 X40.672 Y11.904 F300;svg#Drawing > g#Layer_3 > path G0 X47.524 Y9.252 -G1 X47.424 Y9.373 F300 -G1 X47.32 Y9.485 F300 -G1 X47.212 Y9.59 F300 -G1 X47.1 Y9.688 F300 -G1 X46.986 Y9.778 F300 -G1 X46.868 Y9.863 F300 -G1 X46.744 Y9.941 F300 -G1 X46.618 Y10.014 F300 -G1 X46.49 Y10.08 F300 -G1 X46.358 Y10.14 F300 -G1 X46.224 Y10.193 F300 -G1 X46.088 Y10.241 F300 -G1 X45.921 Y10.291 F300 -G1 X45.753 Y10.332 F300 -G1 X45.581 Y10.366 F300 -G1 X45.408 Y10.391 F300 -G1 X45.233 Y10.409 F300 -G1 X45.057 Y10.419 F300 -G1 X44.88 Y10.421 F300 -G1 X44.704 Y10.416 F300 -G1 X44.526 Y10.404 F300 +G1 X47.411 Y9.387 F300 +G1 X47.292 Y9.513 F300 +G1 X47.167 Y9.631 F300 +G1 X47.037 Y9.739 F300 +G1 X46.902 Y9.839 F300 +G1 X46.763 Y9.93 F300 +G1 X46.619 Y10.013 F300 +G1 X46.471 Y10.089 F300 +G1 X46.32 Y10.156 F300 +G1 X46.166 Y10.215 F300 +G1 X46.009 Y10.266 F300 +G1 X45.849 Y10.31 F300 +G1 X45.687 Y10.346 F300 +G1 X45.523 Y10.375 F300 +G1 X45.357 Y10.397 F300 +G1 X45.191 Y10.412 F300 +G1 X45.023 Y10.42 F300 +G1 X44.855 Y10.421 F300 +G1 X44.686 Y10.415 F300 +G1 X44.518 Y10.403 F300 G1 X44.349 Y10.385 F300 G1 X44.256 Y10.426 F300 G1 X44.164 Y10.454 F300 @@ -3977,20 +4142,23 @@ G1 X43.135 Y10.057 F300 G1 X43.081 Y9.965 F300 G1 X43.038 Y9.867 F300 G1 X43.016 Y9.803 F300 -G1 X42.809 Y9.007 F300 -G1 X42.61 Y8.206 F300 -G1 X42.515 Y7.803 F300 -G1 X42.425 Y7.4 F300 -G1 X42.34 Y6.995 F300 +G1 X42.924 Y9.45 F300 +G1 X42.832 Y9.095 F300 +G1 X42.742 Y8.74 F300 +G1 X42.653 Y8.384 F300 +G1 X42.567 Y8.027 F300 +G1 X42.485 Y7.669 F300 +G1 X42.406 Y7.31 F300 +G1 X42.331 Y6.95 F300 G1 X42.262 Y6.589 F300 -G1 X42.19 Y6.182 F300 -G1 X42.126 Y5.774 F300 -G1 X42.071 Y5.366 F300 -G1 X42.026 Y4.955 F300 -G1 X41.997 Y4.627 F300 -G1 X41.975 Y4.298 F300 -G1 X41.961 Y3.967 F300 -G1 X41.955 Y3.637 F300 +G1 X42.198 Y6.228 F300 +G1 X42.14 Y5.865 F300 +G1 X42.089 Y5.502 F300 +G1 X42.045 Y5.138 F300 +G1 X42.009 Y4.773 F300 +G1 X41.982 Y4.407 F300 +G1 X41.964 Y4.04 F300 +G1 X41.956 Y3.673 F300 G1 X41.958 Y3.305 F300 G1 X41.965 Y3.198 F300 G1 X41.985 Y3.094 F300 @@ -4006,29 +4174,30 @@ G1 X42.609 Y2.421 F300 G1 X42.712 Y2.394 F300 G1 X42.817 Y2.379 F300 G1 X42.855 Y2.376 F300 -G1 X42.959 Y2.311 F300 -G1 X43.064 Y2.256 F300 -G1 X43.169 Y2.208 F300 -G1 X43.276 Y2.169 F300 -G1 X43.383 Y2.137 F300 -G1 X43.491 Y2.111 F300 -G1 X43.623 Y2.089 F300 -G1 X43.757 Y2.077 F300 -G1 X43.891 Y2.073 F300 -G1 X44.026 Y2.078 F300 -G1 X44.163 Y2.091 F300 -G1 X44.297 Y2.112 F300 -G1 X44.432 Y2.139 F300 -G1 X44.567 Y2.174 F300 -G1 X44.702 Y2.215 F300 -G1 X44.836 Y2.263 F300 -G1 X45.001 Y2.329 F300 -G1 X45.163 Y2.404 F300 -G1 X45.323 Y2.485 F300 -G1 X45.479 Y2.573 F300 -G1 X45.633 Y2.667 F300 -G1 X45.781 Y2.765 F300 -G1 X45.923 Y2.865 F300 +G1 X42.976 Y2.302 F300 +G1 X43.101 Y2.238 F300 +G1 X43.227 Y2.186 F300 +G1 X43.355 Y2.144 F300 +G1 X43.485 Y2.112 F300 +G1 X43.616 Y2.09 F300 +G1 X43.749 Y2.077 F300 +G1 X43.882 Y2.073 F300 +G1 X44.016 Y2.077 F300 +G1 X44.15 Y2.09 F300 +G1 X44.285 Y2.109 F300 +G1 X44.419 Y2.136 F300 +G1 X44.553 Y2.17 F300 +G1 X44.686 Y2.21 F300 +G1 X44.818 Y2.256 F300 +G1 X44.95 Y2.308 F300 +G1 X45.079 Y2.364 F300 +G1 X45.207 Y2.425 F300 +G1 X45.333 Y2.491 F300 +G1 X45.457 Y2.56 F300 +G1 X45.579 Y2.633 F300 +G1 X45.697 Y2.709 F300 +G1 X45.813 Y2.787 F300 +G1 X45.925 Y2.867 F300 G1 X46.059 Y2.969 F300 G1 X46.257 Y3.135 F300 G1 X46.448 Y3.31 F300 @@ -4044,27 +4213,27 @@ G1 X47.75 Y5.226 F300 G1 X47.843 Y5.468 F300 G1 X47.924 Y5.715 F300 G1 X47.927 Y5.723 F300 -G1 X47.976 Y5.896 F300 -G1 X48.02 Y6.073 F300 -G1 X48.058 Y6.253 F300 -G1 X48.091 Y6.437 F300 -G1 X48.118 Y6.621 F300 -G1 X48.138 Y6.806 F300 -G1 X48.151 Y6.992 F300 -G1 X48.157 Y7.179 F300 -G1 X48.155 Y7.365 F300 -G1 X48.145 Y7.551 F300 -G1 X48.127 Y7.735 F300 -G1 X48.1 Y7.917 F300 -G1 X48.072 Y8.061 F300 -G1 X48.038 Y8.204 F300 -G1 X47.997 Y8.345 F300 -G1 X47.95 Y8.483 F300 -G1 X47.897 Y8.619 F300 -G1 X47.837 Y8.751 F300 -G1 X47.77 Y8.881 F300 -G1 X47.696 Y9.008 F300 -G1 X47.614 Y9.132 F300 +G1 X47.972 Y5.881 F300 +G1 X48.012 Y6.042 F300 +G1 X48.049 Y6.205 F300 +G1 X48.08 Y6.37 F300 +G1 X48.107 Y6.537 F300 +G1 X48.128 Y6.705 F300 +G1 X48.144 Y6.874 F300 +G1 X48.153 Y7.043 F300 +G1 X48.157 Y7.213 F300 +G1 X48.155 Y7.382 F300 +G1 X48.145 Y7.55 F300 +G1 X48.129 Y7.718 F300 +G1 X48.106 Y7.884 F300 +G1 X48.075 Y8.048 F300 +G1 X48.036 Y8.21 F300 +G1 X47.989 Y8.37 F300 +G1 X47.934 Y8.526 F300 +G1 X47.87 Y8.68 F300 +G1 X47.798 Y8.829 F300 +G1 X47.716 Y8.975 F300 +G1 X47.625 Y9.116 F300 G1 X47.524 Y9.252 F300 G0 X46.717 Y6.054 G1 X46.643 Y5.836 F300 @@ -4078,36 +4247,42 @@ G1 X45.826 Y4.461 F300 G1 X45.67 Y4.292 F300 G1 X45.506 Y4.131 F300 G1 X45.488 Y4.115 F300 -G1 X45.374 Y4.014 F300 -G1 X45.232 Y3.896 F300 -G1 X45.132 Y3.819 F300 -G1 X45.024 Y3.74 F300 -G1 X44.909 Y3.661 F300 -G1 X44.791 Y3.586 F300 -G1 X44.67 Y3.516 F300 -G1 X44.546 Y3.453 F300 -G1 X44.451 Y3.41 F300 -G1 X44.356 Y3.373 F300 -G1 X44.263 Y3.341 F300 -G1 X44.171 Y3.317 F300 -G1 X44.076 Y3.299 F300 -G1 X43.984 Y3.289 F300 -G1 X43.896 Y3.289 F300 +G1 X45.428 Y4.061 F300 +G1 X45.363 Y4.004 F300 +G1 X45.292 Y3.945 F300 +G1 X45.216 Y3.884 F300 +G1 X45.136 Y3.821 F300 +G1 X45.051 Y3.759 F300 +G1 X44.963 Y3.697 F300 +G1 X44.872 Y3.637 F300 +G1 X44.778 Y3.579 F300 +G1 X44.683 Y3.524 F300 +G1 X44.585 Y3.472 F300 +G1 X44.487 Y3.426 F300 +G1 X44.388 Y3.384 F300 +G1 X44.289 Y3.35 F300 +G1 X44.19 Y3.322 F300 +G1 X44.092 Y3.302 F300 +G1 X43.996 Y3.29 F300 +G1 X43.902 Y3.288 F300 G1 X43.81 Y3.297 F300 G1 X43.81 Y3.297 F300 -G1 X43.808 Y3.599 F300 -G1 X43.814 Y3.899 F300 -G1 X43.827 Y4.197 F300 -G1 X43.847 Y4.494 F300 -G1 X43.873 Y4.79 F300 -G1 X43.914 Y5.159 F300 -G1 X43.964 Y5.527 F300 -G1 X44.022 Y5.894 F300 -G1 X44.087 Y6.26 F300 -G1 X44.184 Y6.746 F300 -G1 X44.29 Y7.232 F300 -G1 X44.404 Y7.718 F300 -G1 X44.586 Y8.446 F300 +G1 X43.809 Y3.651 F300 +G1 X43.818 Y4.003 F300 +G1 X43.837 Y4.354 F300 +G1 X43.865 Y4.703 F300 +G1 X43.901 Y5.051 F300 +G1 X43.946 Y5.397 F300 +G1 X43.997 Y5.743 F300 +G1 X44.056 Y6.088 F300 +G1 X44.12 Y6.432 F300 +G1 X44.19 Y6.776 F300 +G1 X44.264 Y7.119 F300 +G1 X44.343 Y7.461 F300 +G1 X44.425 Y7.804 F300 +G1 X44.51 Y8.147 F300 +G1 X44.597 Y8.489 F300 +G1 X44.686 Y8.832 F300 G1 X44.775 Y9.176 F300 G1 X44.932 Y9.187 F300 G1 X45.088 Y9.186 F300 @@ -4123,114 +4298,120 @@ G1 X46.367 Y8.664 F300 G1 X46.479 Y8.555 F300 G1 X46.583 Y8.438 F300 G1 X46.606 Y8.408 F300 -G1 X46.672 Y8.308 F300 -G1 X46.729 Y8.203 F300 -G1 X46.777 Y8.095 F300 -G1 X46.818 Y7.983 F300 -G1 X46.852 Y7.867 F300 -G1 X46.878 Y7.749 F300 -G1 X46.898 Y7.629 F300 -G1 X46.911 Y7.507 F300 -G1 X46.919 Y7.383 F300 -G1 X46.921 Y7.258 F300 -G1 X46.916 Y7.101 F300 -G1 X46.904 Y6.945 F300 -G1 X46.885 Y6.789 F300 -G1 X46.86 Y6.636 F300 -G1 X46.819 Y6.432 F300 -G1 X46.771 Y6.237 F300 +G1 X46.675 Y8.303 F300 +G1 X46.734 Y8.192 F300 +G1 X46.784 Y8.077 F300 +G1 X46.826 Y7.958 F300 +G1 X46.859 Y7.836 F300 +G1 X46.885 Y7.711 F300 +G1 X46.904 Y7.583 F300 +G1 X46.915 Y7.454 F300 +G1 X46.921 Y7.324 F300 +G1 X46.92 Y7.192 F300 +G1 X46.914 Y7.06 F300 +G1 X46.902 Y6.929 F300 +G1 X46.886 Y6.798 F300 +G1 X46.866 Y6.668 F300 +G1 X46.842 Y6.54 F300 +G1 X46.815 Y6.414 F300 +G1 X46.785 Y6.29 F300 +G1 X46.752 Y6.17 F300 G1 X46.717 Y6.054 F300 G1 X46.717 Y6.054 F300;svg#Drawing > g#Layer_3 > path G0 X54.787 Y11.2 -G1 X54.692 Y11.336 F300 -G1 X54.588 Y11.472 F300 +G1 X54.716 Y11.303 F300 +G1 X54.64 Y11.406 F300 +G1 X54.559 Y11.508 F300 G1 X54.474 Y11.608 F300 G1 X54.384 Y11.705 F300 G1 X54.29 Y11.799 F300 G1 X54.191 Y11.888 F300 G1 X54.089 Y11.973 F300 G1 X53.983 Y12.053 F300 -G1 X53.873 Y12.126 F300 -G1 X53.761 Y12.192 F300 +G1 X53.874 Y12.126 F300 +G1 X53.761 Y12.191 F300 G1 X53.645 Y12.249 F300 -G1 X53.55 Y12.29 F300 -G1 X53.454 Y12.324 F300 -G1 X53.356 Y12.352 F300 -G1 X53.256 Y12.373 F300 +G1 X53.527 Y12.299 F300 +G1 X53.405 Y12.339 F300 +G1 X53.281 Y12.369 F300 G1 X53.155 Y12.388 F300 -G1 X53.043 Y12.395 F300 -G1 X52.935 Y12.395 F300 -G1 X52.829 Y12.387 F300 -G1 X52.725 Y12.372 F300 -G1 X52.624 Y12.35 F300 -G1 X52.498 Y12.314 F300 -G1 X52.376 Y12.269 F300 -G1 X52.257 Y12.215 F300 -G1 X52.141 Y12.152 F300 -G1 X52.029 Y12.083 F300 -G1 X51.921 Y12.007 F300 -G1 X51.816 Y11.925 F300 -G1 X51.714 Y11.837 F300 -G1 X51.584 Y11.713 F300 -G1 X51.462 Y11.583 F300 +G1 X53.026 Y12.396 F300 +G1 X52.899 Y12.393 F300 +G1 X52.775 Y12.38 F300 +G1 X52.653 Y12.357 F300 +G1 X52.535 Y12.326 F300 +G1 X52.419 Y12.286 F300 +G1 X52.305 Y12.238 F300 +G1 X52.195 Y12.183 F300 +G1 X52.088 Y12.12 F300 +G1 X51.984 Y12.052 F300 +G1 X51.883 Y11.978 F300 +G1 X51.785 Y11.899 F300 +G1 X51.69 Y11.816 F300 +G1 X51.599 Y11.728 F300 +G1 X51.512 Y11.638 F300 +G1 X51.428 Y11.544 F300 G1 X51.348 Y11.449 F300 -G1 X51.222 Y11.288 F300 -G1 X51.103 Y11.123 F300 -G1 X50.99 Y10.954 F300 -G1 X50.882 Y10.783 F300 +G1 X51.192 Y11.247 F300 +G1 X51.046 Y11.039 F300 +G1 X50.909 Y10.826 F300 G1 X50.779 Y10.608 F300 G1 X50.657 Y10.385 F300 G1 X50.541 Y10.159 F300 -G1 X50.432 Y9.929 F300 +G1 X50.431 Y9.929 F300 G1 X50.327 Y9.696 F300 -G1 X50.195 Y9.382 F300 -G1 X50.07 Y9.065 F300 +G1 X50.227 Y9.461 F300 +G1 X50.132 Y9.224 F300 +G1 X50.039 Y8.986 F300 G1 X49.949 Y8.747 F300 +G1 X49.862 Y8.508 F300 +G1 X49.775 Y8.269 F300 +G1 X49.69 Y8.031 F300 G1 X49.604 Y7.795 F300 G1 X49.375 Y7.153 F300 G1 X49.155 Y6.508 F300 G1 X48.943 Y5.861 F300 -G1 X48.741 Y5.211 F300 +G1 X48.741 Y5.21 F300 G1 X48.547 Y4.557 F300 -G1 X48.362 Y3.901 F300 +G1 X48.362 Y3.9 F300 G1 X48.186 Y3.241 F300 G1 X48.164 Y3.139 F300 -G1 X48.153 Y3.043 F300 -G1 X48.152 Y2.953 F300 -G1 X48.159 Y2.867 F300 -G1 X48.174 Y2.787 F300 -G1 X48.197 Y2.706 F300 -G1 X48.228 Y2.631 F300 -G1 X48.264 Y2.56 F300 -G1 X48.307 Y2.494 F300 -G1 X48.356 Y2.432 F300 -G1 X48.411 Y2.374 F300 -G1 X48.47 Y2.322 F300 -G1 X48.533 Y2.274 F300 -G1 X48.6 Y2.231 F300 -G1 X48.67 Y2.193 F300 -G1 X48.762 Y2.153 F300 -G1 X48.857 Y2.123 F300 -G1 X48.954 Y2.101 F300 -G1 X49.053 Y2.088 F300 -G1 X49.133 Y2.084 F300 -G1 X49.212 Y2.087 F300 -G1 X49.289 Y2.096 F300 -G1 X49.366 Y2.111 F300 -G1 X49.441 Y2.133 F300 -G1 X49.514 Y2.162 F300 -G1 X49.583 Y2.197 F300 -G1 X49.649 Y2.239 F300 -G1 X49.713 Y2.289 F300 -G1 X49.772 Y2.347 F300 -G1 X49.824 Y2.409 F300 -G1 X49.871 Y2.479 F300 -G1 X49.914 Y2.558 F300 -G1 X49.951 Y2.646 F300 +G1 X48.153 Y3.04 F300 +G1 X48.152 Y2.945 F300 +G1 X48.161 Y2.854 F300 +G1 X48.179 Y2.768 F300 +G1 X48.205 Y2.686 F300 +G1 X48.239 Y2.608 F300 +G1 X48.28 Y2.535 F300 +G1 X48.327 Y2.467 F300 +G1 X48.381 Y2.404 F300 +G1 X48.441 Y2.346 F300 +G1 X48.505 Y2.294 F300 +G1 X48.574 Y2.246 F300 +G1 X48.646 Y2.205 F300 +G1 X48.722 Y2.169 F300 +G1 X48.8 Y2.14 F300 +G1 X48.881 Y2.116 F300 +G1 X48.962 Y2.099 F300 +G1 X49.045 Y2.088 F300 +G1 X49.128 Y2.084 F300 +G1 X49.211 Y2.087 F300 +G1 X49.293 Y2.096 F300 +G1 X49.373 Y2.113 F300 +G1 X49.451 Y2.137 F300 +G1 X49.527 Y2.168 F300 +G1 X49.6 Y2.207 F300 +G1 X49.669 Y2.254 F300 +G1 X49.733 Y2.308 F300 +G1 X49.793 Y2.371 F300 +G1 X49.847 Y2.441 F300 +G1 X49.895 Y2.52 F300 +G1 X49.936 Y2.608 F300 G1 X49.982 Y2.746 F300 -G1 X50.144 Y3.343 F300 -G1 X50.314 Y3.942 F300 -G1 X50.49 Y4.539 F300 +G1 X50.112 Y3.224 F300 +G1 X50.245 Y3.703 F300 +G1 X50.383 Y4.181 F300 +G1 X50.526 Y4.656 F300 G1 X50.673 Y5.128 F300 G1 X50.951 Y5.255 F300 G1 X51.235 Y5.371 F300 @@ -4238,98 +4419,116 @@ G1 X51.522 Y5.476 F300 G1 X51.814 Y5.569 F300 G1 X52.109 Y5.651 F300 G1 X52.13 Y5.657 F300 +G1 X52.42 Y5.732 F300 G1 X52.708 Y5.809 F300 G1 X52.993 Y5.89 F300 G1 X53.276 Y5.977 F300 -G1 X53.23 Y5.169 F300 -G1 X53.191 Y4.361 F300 -G1 X53.178 Y3.957 F300 -G1 X53.169 Y3.553 F300 -G1 X53.168 Y3.149 F300 +G1 X53.249 Y5.515 F300 +G1 X53.224 Y5.054 F300 +G1 X53.201 Y4.592 F300 +G1 X53.183 Y4.13 F300 +G1 X53.171 Y3.668 F300 +G1 X53.167 Y3.206 F300 G1 X53.173 Y2.744 F300 G1 X53.18 Y2.64 F300 -G1 X53.196 Y2.544 F300 -G1 X53.22 Y2.457 F300 -G1 X53.25 Y2.377 F300 -G1 X53.286 Y2.303 F300 -G1 X53.331 Y2.232 F300 -G1 X53.381 Y2.167 F300 -G1 X53.436 Y2.108 F300 -G1 X53.495 Y2.056 F300 -G1 X53.559 Y2.009 F300 -G1 X53.627 Y1.968 F300 -G1 X53.698 Y1.932 F300 -G1 X53.772 Y1.903 F300 -G1 X53.848 Y1.879 F300 -G1 X53.926 Y1.861 F300 -G1 X54.025 Y1.848 F300 -G1 X54.124 Y1.843 F300 -G1 X54.223 Y1.847 F300 -G1 X54.321 Y1.861 F300 -G1 X54.399 Y1.879 F300 -G1 X54.474 Y1.902 F300 -G1 X54.546 Y1.931 F300 -G1 X54.615 Y1.967 F300 -G1 X54.68 Y2.008 F300 -G1 X54.741 Y2.054 F300 -G1 X54.798 Y2.107 F300 -G1 X54.85 Y2.165 F300 -G1 X54.896 Y2.23 F300 -G1 X54.937 Y2.302 F300 -G1 X54.969 Y2.375 F300 -G1 X54.995 Y2.455 F300 -G1 X55.013 Y2.543 F300 -G1 X55.024 Y2.639 F300 +G1 X53.197 Y2.542 F300 +G1 X53.222 Y2.451 F300 +G1 X53.255 Y2.366 F300 +G1 X53.295 Y2.288 F300 +G1 X53.342 Y2.216 F300 +G1 X53.396 Y2.15 F300 +G1 X53.455 Y2.091 F300 +G1 X53.519 Y2.038 F300 +G1 X53.587 Y1.991 F300 +G1 X53.659 Y1.951 F300 +G1 X53.735 Y1.917 F300 +G1 X53.813 Y1.889 F300 +G1 X53.894 Y1.868 F300 +G1 X53.976 Y1.853 F300 +G1 X54.058 Y1.845 F300 +G1 X54.141 Y1.843 F300 +G1 X54.224 Y1.847 F300 +G1 X54.306 Y1.858 F300 +G1 X54.386 Y1.875 F300 +G1 X54.464 Y1.899 F300 +G1 X54.54 Y1.929 F300 +G1 X54.612 Y1.965 F300 +G1 X54.681 Y2.008 F300 +G1 X54.745 Y2.057 F300 +G1 X54.804 Y2.113 F300 +G1 X54.857 Y2.175 F300 +G1 X54.904 Y2.243 F300 +G1 X54.945 Y2.318 F300 +G1 X54.977 Y2.399 F300 +G1 X55.002 Y2.487 F300 +G1 X55.019 Y2.581 F300 G1 X55.025 Y2.744 F300 G1 X55.02 Y3.217 F300 G1 X55.025 Y3.69 F300 G1 X55.037 Y4.163 F300 -G1 X55.068 Y4.872 F300 +G1 X55.056 Y4.636 F300 +G1 X55.08 Y5.109 F300 G1 X55.107 Y5.581 F300 +G1 X55.135 Y6.054 F300 +G1 X55.163 Y6.527 F300 G1 X55.189 Y7.001 F300 -G1 X55.214 Y7.551 F300 -G1 X55.231 Y8.102 F300 -G1 X55.236 Y8.469 F300 -G1 X55.236 Y8.837 F300 +G1 X55.21 Y7.441 F300 +G1 X55.226 Y7.881 F300 +G1 X55.235 Y8.322 F300 +G1 X55.237 Y8.764 F300 G1 X55.229 Y9.205 F300 -G1 X55.223 Y9.462 F300 -G1 X55.21 Y9.723 F300 -G1 X55.196 Y9.896 F300 -G1 X55.176 Y10.069 F300 +G1 X55.226 Y9.352 F300 +G1 X55.222 Y9.5 F300 +G1 X55.215 Y9.648 F300 +G1 X55.204 Y9.797 F300 +G1 X55.191 Y9.946 F300 +G1 X55.172 Y10.093 F300 G1 X55.149 Y10.24 F300 -G1 X55.124 Y10.367 F300 -G1 X55.094 Y10.493 F300 -G1 X55.059 Y10.617 F300 -G1 X55.018 Y10.739 F300 -G1 X54.971 Y10.858 F300 -G1 X54.917 Y10.974 F300 -G1 X54.856 Y11.089 F300 +G1 X55.12 Y10.385 F300 +G1 X55.085 Y10.528 F300 +G1 X55.042 Y10.669 F300 +G1 X54.992 Y10.807 F300 +G1 X54.933 Y10.942 F300 +G1 X54.865 Y11.073 F300 G1 X54.787 Y11.2 F300 G0 X52.602 Y7.07 -G1 X52.369 Y7.008 F300 -G1 X52.136 Y6.949 F300 -G1 X51.903 Y6.89 F300 +G1 X52.292 Y6.988 F300 +G1 X51.981 Y6.91 F300 G1 X51.67 Y6.829 F300 -G1 X51.428 Y6.759 F300 +G1 X51.508 Y6.783 F300 +G1 X51.346 Y6.734 F300 G1 X51.184 Y6.681 F300 G1 X51.266 Y6.921 F300 G1 X51.35 Y7.16 F300 -G1 X51.524 Y7.638 F300 -G1 X51.701 Y8.115 F300 -G1 X51.823 Y8.432 F300 -G1 X51.95 Y8.747 F300 +G1 X51.489 Y7.542 F300 +G1 X51.629 Y7.925 F300 +G1 X51.774 Y8.306 F300 +G1 X51.924 Y8.684 F300 G1 X52.083 Y9.059 F300 G1 X52.202 Y9.32 F300 G1 X52.332 Y9.574 F300 G1 X52.473 Y9.823 F300 G1 X52.556 Y9.961 F300 -G1 X52.614 Y10.041 F300 -G1 X52.719 Y10.179 F300 -G1 X52.846 Y10.334 F300 -G1 X52.911 Y10.408 F300 +G1 X52.568 Y9.977 F300 +G1 X52.585 Y10.001 F300 +G1 X52.607 Y10.032 F300 +G1 X52.635 Y10.069 F300 +G1 X52.666 Y10.11 F300 +G1 X52.701 Y10.155 F300 +G1 X52.738 Y10.202 F300 +G1 X52.777 Y10.251 F300 +G1 X52.816 Y10.299 F300 +G1 X52.856 Y10.346 F300 +G1 X52.895 Y10.39 F300 +G1 X52.932 Y10.431 F300 G1 X52.967 Y10.467 F300 -G1 X53.041 Y10.397 F300 -G1 X53.106 Y10.333 F300 +G1 X52.994 Y10.441 F300 +G1 X53.022 Y10.414 F300 +G1 X53.05 Y10.388 F300 +G1 X53.076 Y10.362 F300 +G1 X53.099 Y10.34 F300 +G1 X53.118 Y10.32 F300 +G1 X53.131 Y10.306 F300 G1 X53.139 Y10.298 F300 G1 X53.202 Y10.204 F300 G1 X53.255 Y10.105 F300 @@ -4343,6 +4542,7 @@ G1 X53.394 Y8.427 F300 G1 X53.384 Y8.003 F300 G1 X53.361 Y7.579 F300 G1 X53.353 Y7.464 F300 +G1 X53.353 Y7.396 F300 G1 X53.353 Y7.326 F300 G1 X53.115 Y7.232 F300 G1 X52.873 Y7.148 F300 @@ -4367,13 +4567,14 @@ G1 X62.005 Y13.226 F300 G1 X61.846 Y13.018 F300 G1 X61.73 Y12.867 F300 G1 X61.357 Y12.406 F300 -G1 X61.1 Y12.105 F300 +G1 X61.099 Y12.105 F300 G1 X60.835 Y11.807 F300 G1 X60.563 Y11.512 F300 G1 X60.364 Y11.295 F300 G1 X60.164 Y11.08 F300 -G1 X59.959 Y10.869 F300 +G1 X59.959 Y10.868 F300 G1 X59.748 Y10.66 F300 +G1 X59.651 Y10.567 F300 G1 X59.552 Y10.475 F300 G1 X59.508 Y10.425 F300 G1 X59.507 Y10.425 F300 @@ -4384,22 +4585,34 @@ G1 X59.258 Y10.304 F300 G1 X59.251 Y10.303 F300 G1 X59.232 Y10.303 F300 G1 X59.179 Y10.356 F300 +G1 X59.167 Y10.377 F300 +G1 X59.152 Y10.403 F300 G1 X59.136 Y10.43 F300 +G1 X59.119 Y10.457 F300 +G1 X59.104 Y10.481 F300 G1 X59.092 Y10.499 F300 -G1 X59.082 Y10.518 F300 -G1 X59.067 Y10.554 F300 -G1 X59.042 Y10.633 F300 +G1 X59.083 Y10.514 F300 +G1 X59.074 Y10.537 F300 +G1 X59.064 Y10.564 F300 +G1 X59.054 Y10.594 F300 +G1 X59.045 Y10.623 F300 +G1 X59.037 Y10.65 F300 +G1 X59.03 Y10.672 F300 G1 X59.026 Y10.687 F300 G1 X58.988 Y10.819 F300 G1 X58.954 Y10.951 F300 -G1 X58.907 Y11.153 F300 -G1 X58.865 Y11.354 F300 +G1 X58.886 Y11.253 F300 G1 X58.827 Y11.554 F300 -G1 X58.803 Y11.699 F300 -G1 X58.784 Y11.831 F300 -G1 X58.751 Y12.089 F300 -G1 X58.717 Y12.362 F300 -G1 X58.696 Y12.51 F300 +G1 X58.809 Y11.659 F300 +G1 X58.794 Y11.758 F300 +G1 X58.78 Y11.854 F300 +G1 X58.768 Y11.948 F300 +G1 X58.757 Y12.042 F300 +G1 X58.745 Y12.137 F300 +G1 X58.733 Y12.234 F300 +G1 X58.72 Y12.336 F300 +G1 X58.706 Y12.443 F300 +G1 X58.689 Y12.558 F300 G1 X58.669 Y12.681 F300 G1 X58.639 Y12.837 F300 G1 X58.597 Y12.991 F300 @@ -4442,11 +4655,15 @@ G1 X56.79 Y12.486 F300 G1 X56.79 Y12.486 F300 G1 X56.816 Y12.398 F300 G1 X56.838 Y12.308 F300 -G1 X56.852 Y12.238 F300 +G1 X56.845 Y12.276 F300 +G1 X56.85 Y12.25 F300 +G1 X56.854 Y12.227 F300 +G1 X56.857 Y12.205 F300 G1 X56.862 Y12.181 F300 G1 X56.862 Y12.16 F300 G1 X56.865 Y12.089 F300 G1 X56.874 Y12.017 F300 +G1 X56.884 Y11.946 F300 G1 X56.893 Y11.874 F300 G1 X56.941 Y11.508 F300 G1 X57 Y11.143 F300 @@ -4508,42 +4725,44 @@ G1 X59.563 Y7.192 F300 G1 X59.653 Y7.728 F300 G1 X59.755 Y8.261 F300 G1 X59.809 Y8.523 F300 -G1 X59.927 Y8.561 F300 -G1 X60.042 Y8.607 F300 -G1 X60.153 Y8.658 F300 -G1 X60.263 Y8.715 F300 +G1 X59.956 Y8.572 F300 +G1 X60.098 Y8.632 F300 +G1 X60.236 Y8.701 F300 G1 X60.37 Y8.778 F300 G1 X60.5 Y8.862 F300 -G1 X60.627 Y8.952 F300 -G1 X60.751 Y9.049 F300 +G1 X60.627 Y8.953 F300 +G1 X60.751 Y9.05 F300 G1 X60.872 Y9.152 F300 -G1 X61.028 Y9.294 F300 -G1 X61.18 Y9.441 F300 +G1 X60.99 Y9.258 F300 +G1 X61.105 Y9.367 F300 +G1 X61.218 Y9.479 F300 G1 X61.328 Y9.593 F300 -G1 X61.545 Y9.823 F300 +G1 X61.437 Y9.707 F300 +G1 X61.544 Y9.822 F300 +G1 X61.65 Y9.936 F300 G1 X61.754 Y10.049 F300 G1 X62.143 Y10.483 F300 G1 X62.528 Y10.929 F300 G1 X62.903 Y11.383 F300 G1 X63.269 Y11.844 F300 G1 X63.608 Y12.29 F300 -G1 X63.648 Y12.348 F300 -G1 X63.682 Y12.413 F300 -G1 X63.709 Y12.48 F300 -G1 X63.728 Y12.549 F300 -G1 X63.741 Y12.621 F300 -G1 X63.748 Y12.712 F300 -G1 X63.745 Y12.805 F300 -G1 X63.732 Y12.898 F300 +G1 X63.652 Y12.355 F300 +G1 X63.688 Y12.427 F300 +G1 X63.716 Y12.503 F300 +G1 X63.735 Y12.581 F300 +G1 X63.745 Y12.662 F300 +G1 X63.748 Y12.744 F300 +G1 X63.743 Y12.826 F300 +G1 X63.73 Y12.909 F300 G1 X63.711 Y12.99 F300 -G1 X63.681 Y13.081 F300 -G1 X63.644 Y13.167 F300 -G1 X63.599 Y13.25 F300 -G1 X63.547 Y13.327 F300 -G1 X63.5 Y13.385 F300 -G1 X63.45 Y13.438 F300 -G1 X63.396 Y13.485 F300 -G1 X63.34 Y13.527 F300 +G1 X63.685 Y13.07 F300 +G1 X63.653 Y13.148 F300 +G1 X63.615 Y13.223 F300 +G1 X63.571 Y13.293 F300 +G1 X63.522 Y13.359 F300 +G1 X63.468 Y13.42 F300 +G1 X63.41 Y13.475 F300 +G1 X63.347 Y13.522 F300 G1 X63.28 Y13.563 F300 G0 X59.251 Y10.298 G1 X59.195 Y10.284 F300 @@ -4551,6 +4770,11 @@ G1 X59.235 Y10.296 F300 G1 X59.251 Y10.298 F300 G0 X59.288 Y10.298 G1 X59.288 Y10.298 F300 -G1 X59.333 Y10.273 F300 +G1 X59.311 Y10.286 F300 +G1 X59.326 Y10.278 F300 +G1 X59.333 Y10.274 F300 +G1 X59.332 Y10.273 F300 +G1 X59.324 Y10.276 F300 +G1 X59.309 Y10.283 F300 G1 X59.288 Y10.292 F300 G1 X59.288 Y10.298 F300 diff --git a/lib/tests/smooth_curves.svg b/g_code/tests/smooth_curves.svg similarity index 100% rename from lib/tests/smooth_curves.svg rename to g_code/tests/smooth_curves.svg diff --git a/lib/tests/smooth_curves_circular_interpolation.gcode b/g_code/tests/smooth_curves_circular_interpolation.gcode similarity index 100% rename from lib/tests/smooth_curves_circular_interpolation.gcode rename to g_code/tests/smooth_curves_circular_interpolation.gcode diff --git a/lib/tests/smooth_curves_circular_interpolation_release.gcode b/g_code/tests/smooth_curves_circular_interpolation_release.gcode similarity index 100% rename from lib/tests/smooth_curves_circular_interpolation_release.gcode rename to g_code/tests/smooth_curves_circular_interpolation_release.gcode diff --git a/lib/tests/square.gcode b/g_code/tests/square.gcode similarity index 100% rename from lib/tests/square.gcode rename to g_code/tests/square.gcode diff --git a/lib/tests/square.svg b/g_code/tests/square.svg similarity index 100% rename from lib/tests/square.svg rename to g_code/tests/square.svg diff --git a/lib/tests/square_dimensionless.svg b/g_code/tests/square_dimensionless.svg similarity index 100% rename from lib/tests/square_dimensionless.svg rename to g_code/tests/square_dimensionless.svg diff --git a/lib/tests/square_transformed.gcode b/g_code/tests/square_transformed.gcode similarity index 100% rename from lib/tests/square_transformed.gcode rename to g_code/tests/square_transformed.gcode diff --git a/lib/tests/square_transformed.svg b/g_code/tests/square_transformed.svg similarity index 100% rename from lib/tests/square_transformed.svg rename to g_code/tests/square_transformed.svg diff --git a/lib/tests/square_transformed_nested.gcode b/g_code/tests/square_transformed_nested.gcode similarity index 100% rename from lib/tests/square_transformed_nested.gcode rename to g_code/tests/square_transformed_nested.gcode diff --git a/lib/tests/square_transformed_nested.svg b/g_code/tests/square_transformed_nested.svg similarity index 100% rename from lib/tests/square_transformed_nested.svg rename to g_code/tests/square_transformed_nested.svg diff --git a/lib/tests/square_viewport.gcode b/g_code/tests/square_viewport.gcode similarity index 100% rename from lib/tests/square_viewport.gcode rename to g_code/tests/square_viewport.gcode diff --git a/lib/tests/square_viewport.svg b/g_code/tests/square_viewport.svg similarity index 100% rename from lib/tests/square_viewport.svg rename to g_code/tests/square_viewport.svg diff --git a/lib/tests/transform_origin.gcode b/g_code/tests/transform_origin.gcode similarity index 100% rename from lib/tests/transform_origin.gcode rename to g_code/tests/transform_origin.gcode diff --git a/lib/tests/transform_origin.svg b/g_code/tests/transform_origin.svg similarity index 100% rename from lib/tests/transform_origin.svg rename to g_code/tests/transform_origin.svg diff --git a/lib/tests/transform_origin_equivalent.svg b/g_code/tests/transform_origin_equivalent.svg similarity index 100% rename from lib/tests/transform_origin_equivalent.svg rename to g_code/tests/transform_origin_equivalent.svg diff --git a/lib/tests/use_defs.gcode b/g_code/tests/use_defs.gcode similarity index 100% rename from lib/tests/use_defs.gcode rename to g_code/tests/use_defs.gcode diff --git a/lib/tests/use_defs.svg b/g_code/tests/use_defs.svg similarity index 100% rename from lib/tests/use_defs.svg rename to g_code/tests/use_defs.svg diff --git a/lib/tests/use_symbol.gcode b/g_code/tests/use_symbol.gcode similarity index 100% rename from lib/tests/use_symbol.gcode rename to g_code/tests/use_symbol.gcode diff --git a/lib/tests/use_symbol.svg b/g_code/tests/use_symbol.svg similarity index 100% rename from lib/tests/use_symbol.svg rename to g_code/tests/use_symbol.svg diff --git a/lib/tests/use_xlink_href.gcode b/g_code/tests/use_xlink_href.gcode similarity index 100% rename from lib/tests/use_xlink_href.gcode rename to g_code/tests/use_xlink_href.gcode diff --git a/lib/tests/use_xlink_href.svg b/g_code/tests/use_xlink_href.svg similarity index 100% rename from lib/tests/use_xlink_href.svg rename to g_code/tests/use_xlink_href.svg diff --git a/lib/src/lib.rs b/lib/src/lib.rs deleted file mode 100644 index 6c82256..0000000 --- a/lib/src/lib.rs +++ /dev/null @@ -1,567 +0,0 @@ -/// Approximate [Bézier curves](https://en.wikipedia.org/wiki/B%C3%A9zier_curve) with [Circular arcs](https://en.wikipedia.org/wiki/Circular_arc) -mod arc; -/// Converts an SVG to an internal representation -mod converter; -/// Emulates the state of an arbitrary machine that can run G-Code -mod machine; -/// Operations that are easier to implement while/after G-Code is generated, or would -/// otherwise over-complicate SVG conversion -mod postprocess; -/// Reorders strokes to minimize pen-up travel using TSP heuristics -mod tsp; -/// Provides an interface for drawing lines in G-Code -/// This concept is referred to as [Turtle graphics](https://en.wikipedia.org/wiki/Turtle_graphics). -mod turtle; - -pub use converter::{ConversionConfig, ConversionOptions, svg2preview, svg2program}; -pub use machine::{Machine, MachineConfig, SupportedFunctionality}; -pub use postprocess::PostprocessConfig; -pub use turtle::Turtle; - -/// A cross-platform type used to store all configuration types. -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -#[derive(Debug, Default, Clone, PartialEq)] -pub struct Settings { - pub conversion: ConversionConfig, - pub machine: MachineConfig, - pub postprocess: PostprocessConfig, - #[cfg_attr(feature = "serde", serde(default = "Version::unknown"))] - pub version: Version, -} - -impl Settings { - /// Try to automatically upgrade the supported version. - /// - /// This will return an error if: - /// - /// - Settings version is [`Version::Unknown`]. - /// - There are breaking changes requiring manual intervention. In which case this does a partial update to that point. - pub fn try_upgrade(&mut self) -> Result<(), &'static str> { - loop { - match self.version { - // Compatibility for M2 by default - Version::V0 => { - self.machine.end_sequence = Some(format!( - "{} M2", - self.machine.end_sequence.take().unwrap_or_default() - )); - self.version = Version::V5; - } - Version::V5 => break Ok(()), - Version::Unknown(_) => break Err("cannot upgrade unknown version"), - } - } - } -} - -/// Used to control breaking change behavior for [`Settings`]. -/// -/// There were already 3 non-breaking version bumps (V1 -> V4) so versioning starts off with [`Version::V5`]. -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] -pub enum Version { - /// Implicitly versioned settings from before this type was introduced. - V0, - /// M2 is no longer appended to the program by default - V5, - #[cfg_attr(feature = "serde", serde(untagged))] - Unknown(String), -} - -impl Version { - /// Returns the most recent [`Version`]. This is useful for asking users to upgrade externally-stored settings. - pub const fn latest() -> Self { - Self::V5 - } - - /// Default version for old settings. - pub const fn unknown() -> Self { - Self::V0 - } -} - -impl std::fmt::Display for Version { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - Version::V0 => f.write_str("V0"), - Version::V5 => f.write_str("V5"), - Version::Unknown(unknown) => f.write_str(unknown), - } - } -} - -impl Default for Version { - fn default() -> Self { - Self::latest() - } -} - -#[cfg(test)] -mod test { - use g_code::emit::{FormatOptions, Token}; - use pretty_assertions::assert_eq; - use roxmltree::ParsingOptions; - use svgtypes::{Length, LengthUnit}; - - use super::*; - - /// The values change between debug and release builds for circular interpolation, - /// so only check within a rough tolerance - const TOLERANCE: f64 = 1E-10; - - fn get_actual( - input: &str, - circular_interpolation: bool, - dimensions: [Option; 2], - ) -> Vec> { - let config = ConversionConfig::default(); - let options = ConversionOptions { dimensions }; - let document = roxmltree::Document::parse_with_options( - input, - ParsingOptions { - allow_dtd: true, - ..Default::default() - }, - ) - .unwrap(); - - let machine = Machine::new( - SupportedFunctionality { - circular_interpolation, - }, - None, - None, - None, - None, - ); - converter::svg2program(&document, &config, options, machine) - } - - fn assert_close(left: Vec>, right: Vec>) { - let mut code = String::new(); - g_code::emit::format_gcode_fmt(left.iter(), FormatOptions::default(), &mut code).unwrap(); - assert_eq!(left.len(), right.len(), "{code}"); - for (i, pair) in left.into_iter().zip(right.into_iter()).enumerate() { - match pair { - (Token::Field(l), Token::Field(r)) => { - assert_eq!(l.letters, r.letters); - if let (Some(l_value), Some(r_value)) = (l.value.as_f64(), r.value.as_f64()) { - assert!( - (l_value - r_value).abs() < TOLERANCE, - "Values differ significantly at {i}: {l} vs {r} ({})", - (l_value - r_value).abs() - ); - } else { - assert_eq!(l, r); - } - } - (l, r) => { - assert_eq!(l, r, "Differs at {i}"); - } - } - } - } - - #[test] - fn square_produces_expected_gcode() { - let expected = g_code::parse::file_parser(include_str!("../tests/square.gcode")) - .unwrap() - .iter_emit_tokens() - .collect::>(); - let actual = get_actual(include_str!("../tests/square.svg"), false, [None; 2]); - - assert_close(actual, expected); - } - - #[test] - fn square_dimension_override_produces_expected_gcode() { - let side_length = Length { - number: 10., - unit: LengthUnit::Mm, - }; - - let expected = g_code::parse::file_parser(include_str!("../tests/square.gcode")) - .unwrap() - .iter_emit_tokens() - .collect::>(); - - for square in [ - include_str!("../tests/square.svg"), - include_str!("../tests/square_dimensionless.svg"), - ] { - assert_close( - get_actual(square, false, [Some(side_length); 2]), - expected.clone(), - ); - assert_close( - get_actual(square, false, [Some(side_length), None]), - expected.clone(), - ); - assert_close( - get_actual(square, false, [None, Some(side_length)]), - expected.clone(), - ); - } - } - - #[test] - fn square_transformed_produces_expected_gcode() { - let square_transformed = include_str!("../tests/square_transformed.svg"); - let expected = - g_code::parse::file_parser(include_str!("../tests/square_transformed.gcode")) - .unwrap() - .iter_emit_tokens() - .collect::>(); - let actual = get_actual(square_transformed, false, [None; 2]); - - assert_close(actual, expected) - } - - #[test] - fn square_transformed_nested_produces_expected_gcode() { - let square_transformed = include_str!("../tests/square_transformed_nested.svg"); - let expected = - g_code::parse::file_parser(include_str!("../tests/square_transformed_nested.gcode")) - .unwrap() - .iter_emit_tokens() - .collect::>(); - let actual = get_actual(square_transformed, false, [None; 2]); - - assert_close(actual, expected) - } - - #[test] - fn square_viewport_produces_expected_gcode() { - let square_viewport = include_str!("../tests/square_viewport.svg"); - let expected = g_code::parse::file_parser(include_str!("../tests/square_viewport.gcode")) - .unwrap() - .iter_emit_tokens() - .collect::>(); - let actual = get_actual(square_viewport, false, [None; 2]); - - assert_close(actual, expected); - } - - #[test] - fn circular_interpolation_produces_expected_gcode() { - let circular_interpolation = include_str!("../tests/circular_interpolation.svg"); - let expected = - g_code::parse::file_parser(include_str!("../tests/circular_interpolation.gcode")) - .unwrap() - .iter_emit_tokens() - .collect::>(); - let actual = get_actual(circular_interpolation, true, [None; 2]); - - assert_close(actual, expected) - } - - #[test] - fn svg_with_smooth_curves_produces_expected_gcode() { - let svg = include_str!("../tests/smooth_curves.svg"); - - let expected = g_code::parse::file_parser(include_str!("../tests/smooth_curves.gcode")) - .unwrap() - .iter_emit_tokens() - .collect::>(); - - let file = if cfg!(debug) { - include_str!("../tests/smooth_curves_circular_interpolation.gcode") - } else { - include_str!("../tests/smooth_curves_circular_interpolation_release.gcode") - }; - let expected_circular_interpolation = g_code::parse::file_parser(file) - .unwrap() - .iter_emit_tokens() - .collect::>(); - assert_close(get_actual(svg, false, [None; 2]), expected); - - assert_close( - get_actual(svg, true, [None; 2]), - expected_circular_interpolation, - ); - } - - #[test] - fn shapes_produces_expected_gcode() { - let shapes = include_str!("../tests/shapes.svg"); - let expected = g_code::parse::file_parser(include_str!("../tests/shapes.gcode")) - .unwrap() - .iter_emit_tokens() - .collect::>(); - let actual = get_actual(shapes, false, [None; 2]); - - assert_close(actual, expected) - } - - #[test] - fn use_defs_produces_expected_gcode() { - let svg = include_str!("../tests/use_defs.svg"); - let expected = g_code::parse::file_parser(include_str!("../tests/use_defs.gcode")) - .unwrap() - .iter_emit_tokens() - .collect::>(); - let actual = get_actual(svg, false, [None; 2]); - - assert_close(actual, expected) - } - - #[test] - fn use_xlink_href_produces_expected_gcode() { - let svg = include_str!("../tests/use_xlink_href.svg"); - let expected = g_code::parse::file_parser(include_str!("../tests/use_xlink_href.gcode")) - .unwrap() - .iter_emit_tokens() - .collect::>(); - let actual = get_actual(svg, false, [None; 2]); - - assert_close(actual, expected) - } - - #[test] - fn use_symbol_produces_expected_gcode() { - let svg = include_str!("../tests/use_symbol.svg"); - let expected = g_code::parse::file_parser(include_str!("../tests/use_symbol.gcode")) - .unwrap() - .iter_emit_tokens() - .collect::>(); - let actual = get_actual(svg, false, [None; 2]); - - assert_close(actual, expected); - } - - #[test] - fn transform_origin_produces_expected_gcode() { - let svg = include_str!("../tests/transform_origin.svg"); - let expected = g_code::parse::file_parser(include_str!("../tests/transform_origin.gcode")) - .unwrap() - .iter_emit_tokens() - .collect::>(); - let actual = get_actual(svg, false, [None; 2]); - assert_close(actual, expected) - } - - /// `transform-origin="5 5"` with `rotate(90)` should be identical to the - /// manual SVG equivalent `translate(5,5) rotate(90) translate(-5,-5)` - #[test] - fn transform_origin_matches_manual_equivalent() { - let with_origin = get_actual( - include_str!("../tests/transform_origin.svg"), - false, - [None; 2], - ); - let manual = get_actual( - include_str!("../tests/transform_origin_equivalent.svg"), - false, - [None; 2], - ); - assert_close(with_origin, manual) - } - - /// Regression test for https://github.com/sameer/svg2gcode/issues/105 - #[test] - fn issue_105_optimize_path_order_does_not_shrink_output() { - let svg = include_str!("../tests/square.svg"); - let document = roxmltree::Document::parse_with_options( - svg, - ParsingOptions { - allow_dtd: true, - ..Default::default() - }, - ) - .unwrap(); - let machine = Machine::new( - SupportedFunctionality { - circular_interpolation: false, - }, - None, - None, - None, - None, - ); - let normal = converter::svg2program( - &document, - &ConversionConfig::default(), - ConversionOptions::default(), - machine.clone(), - ); - let optimized = converter::svg2program( - &document, - &ConversionConfig { - optimize_path_order: true, - ..ConversionConfig::default() - }, - ConversionOptions::default(), - machine, - ); - - // Collect and sort all numeric coordinate values from each output. - // Path reordering changes token order but not the set of coordinate values. - // The bug caused optimized values to be ~0.265x smaller than normal. - let mut normal_values: Vec = normal - .iter() - .filter_map(|t| { - if let Token::Field(f) = t { - f.value.as_f64() - } else { - None - } - }) - .collect(); - let mut optimized_values: Vec = optimized - .iter() - .filter_map(|t| { - if let Token::Field(f) = t { - f.value.as_f64() - } else { - None - } - }) - .collect(); - - normal_values.sort_by(f64::total_cmp); - optimized_values.sort_by(f64::total_cmp); - assert_eq!(normal_values, optimized_values); - } - - #[test] - #[cfg(feature = "serde")] - fn deserialize_v1_config_succeeds() { - let json = r#" - { - "conversion": { - "tolerance": 0.002, - "feedrate": 300.0, - "dpi": 96.0 - }, - "machine": { - "supported_functionality": { - "circular_interpolation": true - }, - "tool_on_sequence": null, - "tool_off_sequence": null, - "begin_sequence": null, - "end_sequence": null - }, - "postprocess": { - "origin": [ - 0.0, - 0.0 - ] - } - } - "#; - serde_json::from_str::(json).unwrap(); - } - - #[test] - #[cfg(feature = "serde")] - fn deserialize_v2_config_succeeds() { - let json = r#" - { - "conversion": { - "tolerance": 0.002, - "feedrate": 300.0, - "dpi": 96.0 - }, - "machine": { - "supported_functionality": { - "circular_interpolation": true - }, - "tool_on_sequence": null, - "tool_off_sequence": null, - "begin_sequence": null, - "end_sequence": null - }, - "postprocess": { } - } - "#; - serde_json::from_str::(json).unwrap(); - } - - #[test] - #[cfg(feature = "serde")] - fn deserialize_v3_config_succeeds() { - let json = r#" - { - "conversion": { - "tolerance": 0.002, - "feedrate": 300.0, - "dpi": 96.0 - }, - "machine": { - "supported_functionality": { - "circular_interpolation": true - }, - "tool_on_sequence": null, - "tool_off_sequence": null, - "begin_sequence": null, - "end_sequence": null - }, - "postprocess": { - "checksums": false, - "line_numbers": false - } - } - "#; - serde_json::from_str::(json).unwrap(); - } - - #[test] - #[cfg(feature = "serde")] - fn deserialize_v4_config_succeeds() { - let json = r#" - { - "conversion": { - "tolerance": 0.002, - "feedrate": 300.0, - "dpi": 96.0 - }, - "machine": { - "supported_functionality": { - "circular_interpolation": true - }, - "tool_on_sequence": null, - "tool_off_sequence": null, - "begin_sequence": null, - "end_sequence": null - }, - "postprocess": { - "checksums": false, - "line_numbers": false, - "newline_before_comment": false - } - } - "#; - serde_json::from_str::(json).unwrap(); - } - - #[test] - #[cfg(feature = "serde")] - fn deserialize_v5_config_succeeds() { - let json = r#" - { - "conversion": { - "tolerance": 0.002, - "feedrate": 300.0, - "dpi": 96.0 - }, - "machine": { - "supported_functionality": { - "circular_interpolation": true - }, - "tool_on_sequence": null, - "tool_off_sequence": null, - "begin_sequence": null, - "end_sequence": null - }, - "postprocess": { - "checksums": false, - "line_numbers": false, - "newline_before_comment": false - }, - "version": "V5" - } - "#; - serde_json::from_str::(json).unwrap(); - } -} diff --git a/lib/src/postprocess.rs b/lib/src/postprocess.rs deleted file mode 100644 index 6db559c..0000000 --- a/lib/src/postprocess.rs +++ /dev/null @@ -1,16 +0,0 @@ -#[cfg(feature = "serde")] -use serde::{Deserialize, Serialize}; - -#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] -#[derive(Debug, Default, Clone, PartialEq)] -pub struct PostprocessConfig { - /// Convenience field for [g_code::emit::FormatOptions] field - #[cfg_attr(feature = "serde", serde(default))] - pub checksums: bool, - /// Convenience field for [g_code::emit::FormatOptions] field - #[cfg_attr(feature = "serde", serde(default))] - pub line_numbers: bool, - /// Convenience field for [g_code::emit::FormatOptions] field - #[cfg_attr(feature = "serde", serde(default))] - pub newline_before_comment: bool, -} diff --git a/star/Cargo.toml b/star/Cargo.toml new file mode 100644 index 0000000..ec84848 --- /dev/null +++ b/star/Cargo.toml @@ -0,0 +1,31 @@ +[package] +name = "svg2star" +version = "0.4.0" +description = "Convert SVGs to machine commands for pen plotters, laser cutters, and more (*)." +authors.workspace = true +edition.workspace = true +repository.workspace = true +license.workspace = true + +[features] +serde = ["dep:serde"] + +[dependencies] +peg = "0.8" +rand = "0.8" +rustc-hash = "1" +lyon_geom.workspace = true +euclid = "0.22" +log.workspace = true +uom = "0.38" +roxmltree.workspace = true +svgtypes.workspace = true + +[dependencies.serde] +default-features = false +optional = true +version = "1" +features = ["derive", "std"] + +[dev-dependencies] +serde_json.workspace = true diff --git a/star/src/lib.rs b/star/src/lib.rs new file mode 100644 index 0000000..f79ddcd --- /dev/null +++ b/star/src/lib.rs @@ -0,0 +1,8 @@ +#![deny(unused_crate_dependencies)] + +/// Lowers an SVG to an intermediate representation that's easier to work when generating machine code. +pub mod lower; + +/// Provides an interface for drawing lines. +/// This concept is referred to as [Turtle graphics](https://en.wikipedia.org/wiki/Turtle_graphics). +pub mod turtle; diff --git a/lib/src/converter/length_serde.rs b/star/src/lower/length_serde.rs similarity index 100% rename from lib/src/converter/length_serde.rs rename to star/src/lower/length_serde.rs diff --git a/lib/src/converter/mod.rs b/star/src/lower/mod.rs similarity index 78% rename from lib/src/converter/mod.rs rename to star/src/lower/mod.rs index a872d65..e61f618 100644 --- a/lib/src/converter/mod.rs +++ b/star/src/lower/mod.rs @@ -1,6 +1,5 @@ use std::fmt::Debug; -use g_code::emit::Token; use lyon_geom::euclid::default::Transform2D; use roxmltree::{Document, Node}; #[cfg(feature = "serde")] @@ -13,12 +12,10 @@ use uom::si::{ use self::units::CSS_DEFAULT_DPI; use crate::{ - Machine, Turtle, - converter::selector::SelectorList, - tsp, + lower::selector::SelectorList, turtle::{ - DpiConvertingTurtle, GCodeTurtle, PreprocessTurtle, StrokeCollectingTurtle, - SvgPreviewTurtle, Terrarium, + DpiConvertingTurtle, PreprocessTurtle, StrokeCollectingTurtle, Terrarium, Turtle, + elements::{Stroke, minimize_travel_time}, }, }; @@ -34,10 +31,6 @@ mod visit; #[derive(Debug, Clone, PartialEq)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct ConversionConfig { - /// Curve interpolation tolerance in millimeters - pub tolerance: f64, - /// Feedrate in millimeters / minute - pub feedrate: f64, /// Dots per inch for pixels, picas, points, etc. pub dpi: f64, /// Set the origin point in millimeters for this conversion @@ -64,8 +57,6 @@ const fn zero_origin() -> [Option; 2] { impl Default for ConversionConfig { fn default() -> Self { Self { - tolerance: 0.002, - feedrate: 300.0, dpi: 96.0, origin: zero_origin(), extra_attribute_name: None, @@ -131,13 +122,22 @@ impl<'a, T: Turtle> ConversionVisitor<'a, T> { } } -/// Top-level function for converting an SVG [`Document`] into g-code -pub fn svg2program<'a, 'input: 'a>( - doc: &'a Document, +/// Drives any [`Turtle`] implementation through the full SVG conversion pipeline. +/// +/// This is the generic entry point for custom backends. The turtle receives resolved, +/// absolute, world-space geometry in millimeters after all SVG transforms, DPI conversion, +/// and optional origin alignment have been applied. +/// +/// Path optimization (TSP reordering) is applied automatically when +/// [`ConversionConfig::optimize_path_order`] is `true`. +/// +/// The turtle is returned so callers can extract its internal state (e.g. generated output). +pub fn svg_to_turtle( + doc: &Document, config: &ConversionConfig, options: ConversionOptions, - machine: Machine<'input>, -) -> Vec> { + turtle: T, +) -> T { let selector_filter = config .selector_filter .as_deref() @@ -186,12 +186,7 @@ pub fn svg2program<'a, 'input: 'a>( let mut conversion_visitor = ConversionVisitor { terrarium: Terrarium::new(DpiConvertingTurtle { - inner: GCodeTurtle { - machine, - tolerance: config.tolerance, - feedrate: config.feedrate, - program: vec![], - }, + inner: turtle, dpi: config.dpi, }), _config: config, @@ -208,7 +203,7 @@ pub fn svg2program<'a, 'input: 'a>( if config.optimize_path_order { let strokes = - svg2strokes_optimized(doc, config, options, origin_transform, selector_filter); + svg_to_optimized_strokes(doc, config, options, origin_transform, selector_filter); let turtle = &mut conversion_visitor.terrarium.turtle; for stroke in strokes { turtle.move_to(stroke.start_point()); @@ -223,67 +218,16 @@ pub fn svg2program<'a, 'input: 'a>( conversion_visitor.end(); conversion_visitor.terrarium.pop_transform(); - conversion_visitor.terrarium.turtle.inner.program -} - -/// Converts an SVG [`Document`] into a preview SVG showing expected toolpath moves. -/// -/// - red: tool-on moves (G1/G2/G3) -/// - green: rapid tool-off moves (G0) -pub fn svg2preview( - doc: &Document, - config: &ConversionConfig, - options: ConversionOptions, - selector_filter: Option, -) -> String { - let mut conversion_visitor = ConversionVisitor { - terrarium: Terrarium::new(DpiConvertingTurtle { - inner: SvgPreviewTurtle::default(), - dpi: config.dpi, - }), - _config: config, - options: options.clone(), - name_stack: vec![], - viewport_dim_stack: vec![], - selector_filter: selector_filter.clone(), - }; - - conversion_visitor - .terrarium - .push_transform(Transform2D::identity()); - conversion_visitor.begin(); - - if config.optimize_path_order { - let strokes = svg2strokes_optimized( - doc, - config, - options, - Transform2D::identity(), - selector_filter, - ); - let turtle = &mut conversion_visitor.terrarium.turtle; - for stroke in strokes { - turtle.move_to(stroke.start_point()); - for cmd in stroke.commands() { - cmd.apply(turtle); - } - } - } else { - visit::depth_first_visit(doc, &mut conversion_visitor); - } - - conversion_visitor.end(); - conversion_visitor.terrarium.pop_transform(); - conversion_visitor.terrarium.turtle.inner.into_preview() + conversion_visitor.terrarium.turtle.inner } -fn svg2strokes_optimized( +fn svg_to_optimized_strokes( doc: &Document, config: &ConversionConfig, options: ConversionOptions, origin_transform: Transform2D, selector_filter: Option, -) -> Vec { +) -> Vec { let mut collect_visitor = ConversionVisitor { terrarium: Terrarium::new(StrokeCollectingTurtle::default()), _config: config, @@ -298,7 +242,7 @@ fn svg2strokes_optimized( collect_visitor.end(); collect_visitor.terrarium.pop_transform(); let strokes = collect_visitor.terrarium.turtle.into_strokes(); - tsp::minimize_travel_time(strokes) + minimize_travel_time(strokes) } fn node_name(node: &Node, attr_to_print: &Option) -> String { diff --git a/lib/src/converter/path.rs b/star/src/lower/path.rs similarity index 98% rename from lib/src/converter/path.rs rename to star/src/lower/path.rs index 40c7f01..8b6ddaf 100644 --- a/lib/src/converter/path.rs +++ b/star/src/lower/path.rs @@ -4,7 +4,7 @@ use lyon_geom::{ArcFlags, point, vector}; use svgtypes::PathSegment; use super::Terrarium; -use crate::Turtle; +use crate::turtle::Turtle; /// Maps [`PathSegment`]s into concrete operations on the [`Terrarium`] /// diff --git a/lib/src/converter/selector.rs b/star/src/lower/selector.rs similarity index 100% rename from lib/src/converter/selector.rs rename to star/src/lower/selector.rs diff --git a/lib/src/converter/transform.rs b/star/src/lower/transform.rs similarity index 100% rename from lib/src/converter/transform.rs rename to star/src/lower/transform.rs diff --git a/lib/src/converter/units.rs b/star/src/lower/units.rs similarity index 99% rename from lib/src/converter/units.rs rename to star/src/lower/units.rs index efaa845..dcc7708 100644 --- a/lib/src/converter/units.rs +++ b/star/src/lower/units.rs @@ -3,7 +3,7 @@ use roxmltree::Node; use svgtypes::{Length, LengthListParser}; use super::ConversionVisitor; -use crate::Turtle; +use crate::turtle::Turtle; /// The DPI assumed by CSS is 96. /// diff --git a/lib/src/converter/visit.rs b/star/src/lower/visit.rs similarity index 99% rename from lib/src/converter/visit.rs rename to star/src/lower/visit.rs index 8f5853c..af336a3 100644 --- a/lib/src/converter/visit.rs +++ b/star/src/lower/visit.rs @@ -14,7 +14,7 @@ use super::{ transform::{get_viewport_transform, svg_transform_into_euclid_transform}, units::DimensionHint, }; -use crate::{Turtle, converter::node_name}; +use crate::{lower::node_name, turtle::Turtle}; const SVG_TAG_NAME: &str = "svg"; const CLIP_PATH_TAG_NAME: &str = "clipPath"; diff --git a/lib/src/turtle/collect.rs b/star/src/turtle/collect.rs similarity index 100% rename from lib/src/turtle/collect.rs rename to star/src/turtle/collect.rs diff --git a/lib/src/turtle/dpi.rs b/star/src/turtle/dpi.rs similarity index 99% rename from lib/src/turtle/dpi.rs rename to star/src/turtle/dpi.rs index 059db02..f242a94 100644 --- a/lib/src/turtle/dpi.rs +++ b/star/src/turtle/dpi.rs @@ -6,7 +6,7 @@ use uom::si::{ length::{inch, millimeter}, }; -use crate::Turtle; +use super::Turtle; /// Wrapper turtle that converts from user units to millimeters at a given DPI #[derive(Debug)] diff --git a/lib/src/arc.rs b/star/src/turtle/elements/arc.rs similarity index 98% rename from lib/src/arc.rs rename to star/src/turtle/elements/arc.rs index b12ff7b..77464b0 100644 --- a/lib/src/arc.rs +++ b/star/src/turtle/elements/arc.rs @@ -180,6 +180,8 @@ where } } +/// Used to move an [`SvgArc`] which, unlike other elements, has a complex +/// transform implementation. pub trait Transformed { fn transformed(&self, transform: &Transform) -> Self; } @@ -273,7 +275,7 @@ impl Transformed for SvgArc { mod tests { use lyon_geom::{CubicBezierSegment, point}; - use crate::arc::{ArcOrLineSegment, FlattenWithArcs}; + use super::{ArcOrLineSegment, FlattenWithArcs}; /// Magic constant for cubic Bézier approximation of a quarter circle: 4(√2-1)/3 const KAPPA: f64 = 4.0 * (std::f64::consts::SQRT_2 - 1.0) / 3.0; diff --git a/lib/src/turtle/elements.rs b/star/src/turtle/elements/mod.rs similarity index 74% rename from lib/src/turtle/elements.rs rename to star/src/turtle/elements/mod.rs index 263ac97..9a242cf 100644 --- a/lib/src/turtle/elements.rs +++ b/star/src/turtle/elements/mod.rs @@ -2,9 +2,19 @@ use std::mem::swap; -use lyon_geom::{CubicBezierSegment, Point, QuadraticBezierSegment, SvgArc}; +pub use lyon_geom::{ArcFlags, CubicBezierSegment, Point, QuadraticBezierSegment, SvgArc, Vector}; -use crate::Turtle; +pub use self::{ + arc::{ArcOrLineSegment, FlattenWithArcs, Transformed}, + tsp::minimize_travel_time, +}; +use crate::turtle::Turtle; + +/// Approximate [Bézier curves](https://en.wikipedia.org/wiki/B%C3%A9zier_curve) with [Circular arcs](https://en.wikipedia.org/wiki/Circular_arc) +mod arc; + +/// Reorders strokes to minimize pen-up travel using TSP heuristics +mod tsp; /// Atomic unit of a [Stroke]. #[derive(Debug, Clone)] @@ -58,7 +68,7 @@ impl DrawCommand { } } -/// A continuous tool-on sequence with a known start_point. +/// A continuous tool-on sequence with a known [Self::start_point]. #[derive(Debug, Clone)] pub struct Stroke { pub(super) start_point: Point, @@ -66,6 +76,13 @@ pub struct Stroke { } impl Stroke { + pub fn new(start_point: Point, commands: Vec) -> Self { + Self { + start_point, + commands, + } + } + pub fn end_point(&self) -> Point { self.commands .iter() @@ -88,4 +105,9 @@ impl Stroke { pub fn commands(&self) -> impl Iterator { self.commands.iter() } + + /// Whether the stroke ends at the start. + pub fn is_closed(&self) -> bool { + (self.start_point() - self.end_point()).length() < f64::EPSILON + } } diff --git a/lib/src/tsp.rs b/star/src/turtle/elements/tsp.rs similarity index 99% rename from lib/src/tsp.rs rename to star/src/turtle/elements/tsp.rs index 06943de..4951d74 100644 --- a/lib/src/tsp.rs +++ b/star/src/turtle/elements/tsp.rs @@ -9,7 +9,7 @@ use lyon_geom::Point; use rand::{Rng, distributions::Standard, prelude::Distribution, thread_rng}; use rustc_hash::FxHashSet as HashSet; -use crate::turtle::Stroke; +use crate::turtle::elements::Stroke; fn dist(a: Point, b: Point) -> f64 { ((a.x - b.x).powi(2) + (a.y - b.y).powi(2)).sqrt() diff --git a/lib/src/turtle/mod.rs b/star/src/turtle/mod.rs similarity index 91% rename from lib/src/turtle/mod.rs rename to star/src/turtle/mod.rs index 27eef41..843a900 100644 --- a/lib/src/turtle/mod.rs +++ b/star/src/turtle/mod.rs @@ -6,18 +6,18 @@ use lyon_geom::{ point, vector, }; -use crate::arc::Transformed; +use crate::turtle::elements::Transformed; mod collect; mod dpi; -mod elements; -mod g_code; +/// Intermediate representation of elements used by a [`Turtle`]. +pub mod elements; mod preprocess; mod svg_preview; pub use self::{ - collect::StrokeCollectingTurtle, dpi::DpiConvertingTurtle, elements::Stroke, - g_code::GCodeTurtle, preprocess::PreprocessTurtle, svg_preview::SvgPreviewTurtle, + collect::StrokeCollectingTurtle, dpi::DpiConvertingTurtle, preprocess::PreprocessTurtle, + svg_preview::SvgPreviewTurtle, }; /// Abstraction for drawing paths based on [Turtle graphics](https://en.wikipedia.org/wiki/Turtle_graphics) @@ -32,9 +32,10 @@ pub trait Turtle: Debug { fn quadratic_bezier(&mut self, qbs: QuadraticBezierSegment); } -/// Wrapper for [Turtle] that handles transforms, position, offsets, etc. See https://www.w3.org/TR/SVG/paths.html +/// Handles SVG complexities outside of [Turtle] scope (transforms, position, offsets, etc.) +/// #[derive(Debug)] -pub struct Terrarium { +pub(crate) struct Terrarium { pub turtle: T, current_position: Point, initial_position: Point, @@ -59,7 +60,7 @@ impl Terrarium { } /// Move the turtle to the given absolute/relative coordinates in the current transform - /// https://www.w3.org/TR/SVG/paths.html#PathDataMovetoCommands + /// pub fn move_to(&mut self, abs: bool, x: X, y: Y) where X: Into>, @@ -100,7 +101,7 @@ impl Terrarium { } /// Close an SVG path, cutting back to its initial position - /// https://www.w3.org/TR/SVG/paths.html#PathDataClosePathCommand + /// pub fn close(&mut self) { // See https://www.w3.org/TR/SVG/paths.html#Segment-CompletingClosePath // which could result in a G91 G1 X0 Y0 @@ -117,7 +118,7 @@ impl Terrarium { } /// Draw a line from the current position in the current transform to the specified position - /// https://www.w3.org/TR/SVG/paths.html#PathDataLinetoCommands + /// pub fn line(&mut self, abs: bool, x: X, y: Y) where X: Into>, @@ -158,7 +159,7 @@ impl Terrarium { } /// Draw a cubic curve from the current point to (x, y) with specified control points (x1, y1) and (x2, y2) - /// https://www.w3.org/TR/SVG/paths.html#PathDataCubicBezierCommands + /// pub fn cubic_bezier( &mut self, abs: bool, @@ -198,7 +199,7 @@ impl Terrarium { } /// Draw a shorthand/smooth cubic bezier segment, where the first control point was already given - /// https://www.w3.org/TR/SVG/paths.html#PathDataCubicBezierCommands + /// pub fn smooth_cubic_bezier(&mut self, abs: bool, mut ctrl2: Point, mut to: Point) { let from = self.current_position; let ctrl1 = self.previous_cubic_control.unwrap_or(self.current_position); @@ -234,7 +235,7 @@ impl Terrarium { } /// Draw a shorthand/smooth cubic bezier segment, where the control point was already given - /// https://www.w3.org/TR/SVG/paths.html#PathDataQuadraticBezierCommands + /// pub fn smooth_quadratic_bezier(&mut self, abs: bool, mut to: Point) { let from = self.current_position; let ctrl = self @@ -265,7 +266,7 @@ impl Terrarium { } /// Draw a quadratic bezier segment - /// https://www.w3.org/TR/SVG/paths.html#PathDataQuadraticBezierCommands + /// pub fn quadratic_bezier(&mut self, abs: bool, mut ctrl: Point, mut to: Point) { let from = self.current_position; if !abs { @@ -295,7 +296,7 @@ impl Terrarium { } /// Draw an elliptical arc segment - /// https://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands + /// pub fn elliptical( &mut self, abs: bool, @@ -331,7 +332,7 @@ impl Terrarium { /// Push a generic transform onto the stack /// Could be any valid CSS transform https://drafts.csswg.org/css-transforms-1/#typedef-transform-function - /// https://www.w3.org/TR/SVG/coords.html#InterfaceSVGTransform + /// pub fn push_transform(&mut self, trans: Transform2D) { self.transform_stack.push(self.current_transform); // https://stackoverflow.com/questions/18582935/the-applying-order-of-svg-transforms diff --git a/lib/src/turtle/preprocess.rs b/star/src/turtle/preprocess.rs similarity index 100% rename from lib/src/turtle/preprocess.rs rename to star/src/turtle/preprocess.rs diff --git a/lib/src/turtle/svg_preview.rs b/star/src/turtle/svg_preview.rs similarity index 100% rename from lib/src/turtle/svg_preview.rs rename to star/src/turtle/svg_preview.rs diff --git a/web/Cargo.toml b/web/Cargo.toml index cc264cd..38bb3e5 100644 --- a/web/Cargo.toml +++ b/web/Cargo.toml @@ -10,11 +10,11 @@ license.workspace = true [dependencies] wasm-bindgen = "0.2" -svg2gcode = { path = "../lib", version = "0.3.4", features = ["serde"] } +svg2gcode = { path = "../g_code", version = "0.4.0", features = ["serde"] } +svg2star = { path = "../star", version = "0.4.0", features = ["serde"] } roxmltree.workspace = true g-code.workspace = true codespan-reporting = "0.13" -codespan = "0.13" serde = "1" paste = "1" log.workspace = true diff --git a/web/src/forms/editors.rs b/web/src/forms/editors.rs index b31d70b..bb2cec6 100644 --- a/web/src/forms/editors.rs +++ b/web/src/forms/editors.rs @@ -97,151 +97,3 @@ gcode_input! { settings.machine.end_sequence, } } - -// TODO: make a nice, syntax highlighting editor for g-code. -// I started on this but it quickly got too complex. -// pub struct GCodeEditor { -// props: GCodeEditorProps, -// dispatch: AppDispatch, -// state: Rc, -// validation_task: Option, -// link: ComponentLink, -// parsed: Option>, -// node_ref: NodeRef, -// } - -// pub enum InputMessage { -// Validate(String), -// State(Rc), -// Change(InputData), -// } - -// impl Component for GCodeEditor { -// type Message = InputMessage; - -// type Properties = GCodeEditorProps; - -// fn create(props: Self::Properties, link: ComponentLink) -> Self { -// Self { -// props, -// dispatch: Dispatch::bridge_state(link.callback(InputMessage::State)), -// state: Default::default(), -// validation_task: None, -// link, -// parsed: None, -// node_ref: NodeRef::default(), -// } -// } - -// fn update(&mut self, msg: Self::Message) -> ShouldRender { -// match msg { -// InputMessage::State(state) => { -// self.state = state; -// true -// } -// InputMessage::Validate(value) => { -// self.parsed = Some(snippet_parser(&value).map(|snippet| { -// html! { -// <> -// { -// for snippet.iter_emit_tokens().flat_map(|token| { -// if let Token::Field(field) = &token { -// vec![ -// html! { -// {field.letters.to_string()} -// }, -// { -// let class = match &field.value { -// Value::Rational(_) | Value::Integer(_) | Value::Float(_) => "hljs-number", -// Value::String(_) => "hljs-string", -// }; -// html! { -// {field.value.to_string()} -// } -// } -// ] -// } else if let Token::Newline{..} = &token { -// vec![ -// html! { -// "\r\n" -// } -// ] -// } -// else { -// let class = match &token { -// Token::Comment{..} => "hljs-comment", -// Token::Checksum(..) => "hljs-number", -// Token::Whitespace(..) => "whitespace", -// Token::Newline{..} => "newline", -// Token::Percent => "hljs-keyword", -// _ => unreachable!(), -// }; -// vec![html!{ -// -// { token.to_string() } -// -// }] -// } -// }) -// } -// -// } -// }).map_err(|err| { -// let mut buf = Buffer::no_color(); -// let config = Config::default(); -// emit( -// &mut buf, -// &config, -// &codespan_reporting::files::SimpleFile::new("", value), -// &into_diagnostic(&err), -// ) -// .unwrap(); -// String::from_utf8_lossy(buf.as_slice()).to_string() -// })); -// true -// } -// InputMessage::Change(InputData { value, .. }) => { -// self.parsed = None; -// self.validation_task = None; -// self.validation_task = Some(TimeoutService::spawn( -// self.props.validation_timeout, -// self.link -// .callback(move |_| InputMessage::Validate(value.clone())), -// )); -// true -// } -// } -// } - -// fn change(&mut self, props: Self::Properties) -> ShouldRender { -// self.props.neq_assign(props) -// } - -// fn view(&self) -> Html { -// let oninput = self.link.callback(|x: InputData| InputMessage::Change(x)); - -// html! { -// <> -//
-//